2018-2019-1 20165203 《信息安全系统设计基础》第四周学习总结
2018-2019-1 20165203 《信息安全系统设计基础》第四周学习总结
教材学习内容总结
-
一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构,也就是ISA。
-
程序员可见状态:
- Y86-64(一个指令集体系结构)程序中的每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见状态。
- Y86-64状态包括15个寄存器、3个一位的条件码(ZF、SF和OF)、程序计数器PC(存放当前正在执行指令的地址)、内存(一个很大的字节数组,保存着程序和数据)和状态码(表明程序执行的总体状态)。
- Y86-64指令
- 4个传送指令(irmovq\rrmovq\mrmovq\rmmovq):第一个字母是源的类型(i、r、m),第二个字母是目的的类型(r、m).
- 4个整数操作指令(addq\subq\andq\xorq): 只对寄存器数据进行操作,与ZF\SF\OF有关。
- 6个条件传送指令(cmovle\cmovl\cmove\cmovne\cmovge\cmovg): 条件码满足所需要的约束时才会更新寄存器的值。
- 7个跳转指令(jmp\jle\jl\je\jne\jge\jg):根据设置来选择分支。
- call:将返回地址入栈,然后跳到目的地址。
- ret:从call的调用中返回。
- pushq和popq:入栈和出栈。
- halt:停止指令的执行。
- 指令编码
- 指令代码的第一个字节表明指令的类型,第一个字节高字节是代码部分,低字节是功能部分。
- 还有寄存器指示符字节,指定一个或两个寄存器,只需要一个寄存器的指令或无需寄存器的指令将指示符设为0xF。
- 还有一个附加的常数4字节,可以作为irmovq的立即数数据,rmmovq和mrmovq的地址指示符的偏移量,以及分支指令和调用指令的目的地址,注意编码时要倒过来,因为计算机采用小端法。
- 处理异常情况时,处理器会调用一个异常处理程序。
- 逻辑设计和硬件控制语言
- 数字系统的三个二组成部分:对位进行操作的组合逻辑、存储位的存储器单元、控制存储器单元更新的时钟信号。
- HCL表达式:AND---&& OR---|| NOT---!
- 逻辑门只对单个位的数进行操作,而不是整个字。
- 组合电路
- 位相等组合电路
- (重点)多路复用器电路(有控制信号)
下图是一个四路复用器
- 字级的组合电路
- 注意用中等粗度的线来表示携带字的每个位的线路,用虚线来表示布尔信号结果。
- 多路复用电路的情况表达式的通用格式:
[
select1 : expr1;
select2 : expr2;
]
select布尔表达式
expr整数表达式
注意:select有时可以简化 - 集合关系
iexpr in
- 存储器和时钟
- 两类存储设备: 时钟寄存器和随机访问存储器
- 寄存器读数据的方式: 如图所示
读数据以地址为输入、数据为输出,写数据的方式: 当时钟为上升沿时,输入valw上的值会被写入输入dstw上的寄存器ID指示的程序寄存器。
3. 随机访问存储器存储数据的方式
- SEQ处理器
处理器各个阶段
取指
译码
执行
访存
写回
更新
教材学习中的问题和解决过程
-
问题1:看到书中P261页,对选择表达式的简化不太懂,如图所示
-
问题1解决方案:根据教材中所描述的,第二个表达式可以写成!s1,而不用写成更完整的!s1 && s0, 因为另一种可能s1=0已经出现在了第一个选择表达式中,那么顺着教材理解,s1=0已经出现在了第一个选择表达式中,那么如果满足第一个表达式的条件,则第一个表达式为第一个求值为1的表达式,如果第一个表达式求值不为1,那么自然第2个表达式就是求值为1的表达式。不知这样理解是否正确。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 假设用ADD指令完成C表达式t=a+b的功能,有关条件码寄存器的说法正确的是()
A. 若t== 0 ,则ZF=1
B. 若t<0, 则CF=1
C. 若t<0, 则SF=1
D. 若(a<0== b<0)&&(t<0 != a<0), 则OF=1
E. 若(a<0==b<0)&&(t<0 != a<0), 则CF=1
F.leaq指令不影响条件码寄存器
G.cmp指令不影响条件码寄存器
错解:A B D G
正解:A D F
解析:A项,ZF为零标志,如果a+b的结果为0,那么自然ZF=1;D项,表达式的意思是,a<0, b<0,t反而>0,自然是发生了溢出,则OF的溢出标志为1.
F项,leap指令不改变任何条件码,因为它是用来进行地址计算的。
其他(感悟、思考等,可选)
本周我学习了第四章部分,了解了一个新的指令集合,及其它的硬件和软件实现,Y86-64处理器的指令和x86-64的指令有一些不同,但可以比较来学习,Y86-64的硬件和我们所学习的数电知识大同小异,这一部分学习来相对容易些,但是顺序实现这一部分自认为有些难度,日后还需要抓紧练习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 |
-
计划学习时间:10小时
-
实际学习时间:9小时
-
改进情况:
自己需要合理安排自己的学习时间