信息安全系统设计基础第六周学习总结
冒险:一条指令的位置或者操作数依赖于其他仍在流水线中的指令。
4.1 Y86指令集体系结构
4.1.1程序员可见的状态
处理器状态:
8个程序寄存器,每个寄存器存储一个字。其中%esp被入栈、出栈、调用和返回指令作为栈指针。
3个条件码:保存最近的算术或逻辑指令所造成影响的有关信息
程序计数器PC:存放当前正在执行指令的地址
存储器:我们认为虚拟存储器提供给Y86一个单一的字节数组映像。
状态码Stat:表明程序执行的总体状态,指示是在正常运行,还是出现了某种异常。
4.1.2 Y86指令
4个movl的不同指令:(irmovl,rrmovl,mrmovl,rmmovl)
第一个字母表明了3种源的类型
第二个字母表明了2种目的类型。
4个整数操作指令:addl,subl,andl,xorl;他们会设置三个条件码ZF,SF,OF
7个跳转指令
6个条件传送指令
call和ret
pushl和popl
halt停止指令的执行。会导致处理器停止,并将状态码设置为HLT
4.1.3指令编码
Y86指令集中,每条指令需要1-6个字节不等。每条指令的第一个字节表明指令的类型。这个字节分为高低两部分:
高4位是代码部分,低4位是功能部分。
8个程序寄存器各自有相应0-7的寄存器标识符。当需要指明不应访问任何寄存器时,有ID值0xF表示。
寄存器指示符字节:在需要操作数的指令编码中,可以用于数据源和目的寄存器,或地址计算的基址寄存器。
有些指令会附加一个4字节常数字:可作为irmovl的立即数数据,rmmovl和mrmovl的地址指示符偏移量,以及分支指令和调用指令的目的地址(绝对地址)。
4.1.4 Y86异常
状态码Stat:
值1:AOK 正常操作
值2:HLT halt指令执行
值3:ADR 遇到非法地址
值4:INS 遇到非法指令
4.2 逻辑设计和硬件控制语言HCL
数字系统的三个组成部分:
计算对位进行操作的函数的组合逻辑、
存储位的存储器元素、
控制存储器元素更新的时钟信号
4.2.1逻辑门
AND:&&
OR:||
NOT:!
逻辑门只对单个位的数进行操作,而不是整个字
3输入AND:a&&b&&c
逻辑门总是活动的
4.2.2组合电路和HCL布尔表达式
组合电路:
两条限制:
两个或多个逻辑门的输出不能连接在一起;
这个网必须无环。
例1:bool eq = (a&&b)||(!a&&!b);
多路复用器:
例2:bool out=(s&&a)||(!s&&b);
4.2.3字级组合电路和HCL整数表达式
同C语言的switch语句不同,我们不要求不同的选择表达式之间互斥。这些选择表达式顺序求值,且第一个求值为1的情况被选中。
4.2.4集合关系
bool s1= code==2||code==3;
等价于
bool s1 = code in {2,3};
表示当code在集合{2,3}中s1为1。
4.2.5存储器和时钟
组合电路从本质上讲,不存储任何信息。只响应输入产生输出。
时序电路:有状态并且在这个状态上进行计算的系统。
时钟寄存器:存储单个位或者字。时钟信号控制寄存器加载输入值。
随机访问存储器:存储多个字,用地址选择该读写哪个字:
(1) 处理器的虚拟存储器系统
(2) 寄存器文件
Y86处理器会用时钟寄存器保存程序计数器(PC),条件代码(CC)和程序状态(Stat)。
寄存器文件有两个读端口和一个写端口。
4.3 Y86的顺序实现
SEQ(“sequential”顺序的)处理器:
4.3.1将处理组织成阶段
取址(fetch):从存储器读取指令字节,地址为程序计数器(PC)的值。
译码(decode):从寄存器文件读入最多两个操作数,得到值valA和/或valB
执行(execute):算术逻辑单元执行指令指明的操作,计算存储器引用的有效地址,或者增加或减少栈指针
访存(memory):将数据写入存储器,或者从存储器读出数据,读出的值为valM。
写回(write back):最多可以写两个结果到寄存器文件
更新PC(PC update):将PC设置为下一条指令的地址
4.3.3 SEQ的时序
Y86指令集的组织运算原则:处理器从来不需要为了执行一条指令而去读取被该指令更新了的状态。
4.3.4 SEQ阶段的实现
在这个Y86处理器的完整设计中,我们可以少量各种硬件单元和一个时钟来控制计算顺序。其中控制逻辑必须要在这些单元之间传递信号,并根据指令类型和分支条件产生适当的控制信息。
他的问题在于时钟必须非常慢,来让信号能在一个周期内传播所有阶段。
参考资料:《深入理解计算机系统》