2018-2019-1 20165336《信息安全系统设计基础》第四周学习总结
1.教材学到的知识点
-
Y86-64中程序员(汇编程序员、编译器等)可见的状态包括程序寄存器、条件码、程序状态、程序计数器(PC)、内存
-
Y86-64中有15个程序寄存器分别是%eax %ecx %edx %ebx %esp %ebp %esi %eadi ZF SF OF PC Stat DMEM
-
Y86-64指令支持的整数操作的长度是8字节
-
Y86-64的指令编码长度是1-10字节,指令编码长度从1-6个字节不等。一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字
-
Y86-64中共有7个跳转指令,分别为jmp、jle、jl、je、jne、jge、jg。
-
Y86-64的状态码AOK表示正常操作,3表示遇到非法地址,HLT 处理器执行halt命令,ADR 遇到非法地址,INS 遇到非法指令
-
实现一个数字系统需要三个主要的组成部分:计算对位进行操作的函数的组合逻辑、存储位的存储器元素,以及控制存储器元素更新的时钟信号。
-
与、或、非三种逻辑门可以用一种门(与非门, 或者 或非门)实现。
-
多路复用器。多路复用器根据输入控制信号的值,从一组不同的数据信号中选出一个。
-
ALU是一种组合电路,寄存器是一种时序电路,区分在有没有时钟。
-
每当每个时钟到达上沿时,值才会从寄存器的输入传送到输出。我们的Y86处理器会用时钟寄存器保存程序计数器(PC)、条件代码(CC)和程序状态(Stat)。
-
寄存器文件有两个读端口,还有一个写端口。这样一个多端口随机访问存储器允许同时进行多个读和写操作。向寄存器文件写入字是由时钟信号控制的。
-
Y86-64中,指令执行分为6个阶段取指(fetch)、译码(decode)、执行(execute)、访存(memory)、写回(write)、更新PC(PC update)
-
在执行阶段,算数/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值我们称为valE。在此,也可能设置条件码。对一条跳转指令来说,这个阶段会检验条件码和分支条件,看是不是应该选择分支
-
rrmovl是寄存器-寄存器传送,irmovq是立即数-寄存器传送,不需要访存。
-
在SEQ+中,创建状态寄存器来保存在一条指令执行过程中计算出来的信号。然后,当一个新的时钟周期开始时,这些信号值通过同样的逻辑来计算当前指令的PC。
SEQ+中对状态元素的改变称为电路重定时,在SEQ+的各个阶段之间插入了流水线寄存器,并对信号重新排列。
教材学习中的问题和解决过程
书中例题指令编码问题:需要掌握Y86-64指令集,Y86-64指令集的功能码,Y86-64程序寄存器标识符
考试错题总结
- 1.4.在Y86-64中,对一条跳转指令,决定是不是应该选择分支的阶段是()
A . fetch
B . decode
C . execute
D . memory
E . write back
F . PC update
正确答案: C
解析:在执行阶段,算数/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值我们称为valE。在此,也可能设置条件码。对一条跳转指令来说,这个阶段会检验条件码和分支条件,看是不是应该选择分支。
- 2.图中的代码说明异常处理的细节问题是()
A . 同时多条指令引起异常
B . 指令执行引起异常,后来由于分支预测错误,取消了该指令
C . 不同阶段更新系统状态的不同部分
D . 与流水线无关的异常
正确答案: B
解析:在这个程序中,流水线会预测选择分支,因此他会取出并以一个值为0xFF的字节作为指令。译码阶段会因此发现一个非法指令异常。稍后,流水线会发现不应该选择分支,因此根本就不应该取出位于地址0x00e的指令。流水线控制逻辑会取消该指令,但是我们想要避免出现异常。