2017-2018-1 20155327 《信息安全系统设计基础》第7周学习总结
教材学习内容总结
4.1Y86指令集体系结构
4.1.1程序员可见状态
Y86程序中每条指令都会读取或者修改处理器状态的某些部分的状态。
4.1.2 Y86指令
存储器:Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址。
状态码:表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。
4.1.3指令编码
4字节的常数字
1.irmovl中的立即数数据
2.mmovl,mrmovl中存储器m地址指示符的偏移量
3.绝对地址:分支指令jXX的目的地址
4.绝对地址:调用指令call的目的地址
注意:字节编码和指令序列是相对应的
4.1.4Y86异常
1 AOK 正常操作
2 HLT 处理器执行halt指令
3 ADR 遇到非法地址
4 INS 遇到非法指令
当遇到这些异常的时候,我们就简单地让处理器停止执行指令。在更完整的设计中,处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。
4.2逻辑设计和硬件控制语言HCL
电子电路中,用1.0V左右的高电压表示逻辑1,用0.0V左右的低电压表示逻辑0.
4.2.1逻辑门
AND &&
OR ||
NOT !
4.2.2组合电路和HCL布尔表达式
字级相等测试电路:一些位级信号代表一个整数或一些控制模式。执行字级计算的组合电路根据输入字的各个位,用逻辑门来计算输出字的各个位。
算数/逻辑单元(ALU)是很重要的组合电路,有三个输入,标号为A、B的两个数据输入和一个控制输入,根据控制输入的设置,电路会对数据输入执行不同的算数或逻辑操作。
4.2.3字级的组合电路和HCL整数表达式
多路复用函数具体格式:
[
select_1 : expr_1
select_2 : expr_2
……
select_k : expr_k
]从逻辑上讲,这些选择表达式是顺序求值的且不同选择表达式之间允许不互斥。
4.2.4集合关系
通用格式:
iexpr in {iexpr1,iexpr2,...,iexprk}(整数表达式)
4.3Y86的顺序实现
4.3.1将处理组织成阶段
取指 译码 执行 访存 写回 更新PC
4.3.2SEQ硬件结构
4.3.3SEQ的时序
1.取指阶段:取指阶段包括指令存储器硬件单元。以PC作为第一个字节(字节0)的地址,这个单元一次从存储器读出6个字节,第一个字节被解释称指令字节,分为两个4位数。
2.译码和写回阶段:寄存器文件有四个端口,支持同时进行两个读(端口A、B)和两个写(E、M),每个端口都有一个地址连接和一个数据连接。
3.执行阶段:执行阶段包括算术/逻辑单元(ALU)第一步每条指令的ALU计算,执行阶段还包括条件码寄存器。
4.访存阶段:访存阶段的任务是读或者写程序数据,两个控制块产生存储器地址和存储器输入数据的值,另外两个块产生控制信号表明应该执行读操作还是写操作。
5.更新PC阶段:SEQ中最后一个阶段会产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM、valP。
教材问题
了解ISA抽象的作用
ISA模型:CPU允许的指令集编码,且顺序地执行指令,也就是先取出一条指令,等到她执行完毕,再开始下一条。然而,现代处理器的实际工作方式可能跟ISA隐含的计算模型大相径庭。通过同时处理多条指令的不同部分,处理器可以获得较高的性能。但其必须对外表现出符合ISA模型的执行结果。
了解流水线和实现方式
流水线是指程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同 指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。
流水线的特点: @流水线可分成若干个互相联系的子过程 @实现子过程的功能所需时间尽可能相等 @形成流水处理,需要一段准备时间 @指令流发生不能顺序执行时,会是流水过程中断,在形成流水过程则需要时间
教材学习中的问题和解决过程
Y86和X86的区别
Y86指令集
halt:这个指令将会终止指令的执行。
nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
opl:操作指令,比如加法,减法等等。
jxx:条件跳转指令,根据后面的条件进行跳转。
cmovxx:条件传送指令,后面的xx代表的是条件。特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。
call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。
push与pop:入栈和出栈操作。
Y86就是一个X86的缩减版,它的目的是以简单的结构实现一个处理器,帮助我们了解处理器的设计和实现。区别就在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的。
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)