4.1 Y86指令集体系结构
程序员可见的状态
·释义:Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
Y86→IA32
·8个程序寄存器
%eax,%ecx,%edx,%ebx,%esi,%edi,%esp ,%ebp
·存储器
释义:从概念上来讲就是一个很大的字节数组,保存着程序和数据。
·Y86指令
见书中图片
·Y86指令的更多细节
*IA32的movl指令分成了4个不同的指令:irmovl、rrmovl、mrmovl和rmmovl,分别显示地指明源和目的的格式。
PS:源可以是立即数(i),寄存器(r)或存储器(m)
指令名字的第一个字母就表明了源的类型,第二个字母指明了目的类型。
△同IA32一样,不允许从一个存储器地址直接传送到另一个存储器地址,也不允许将立即数传送到存储器。
*四个整数操作指令:addl、subl、andl、xorl。
*七个跳转指令:jmp、jle、jl、je、jne、jge、jg。
*六个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg
*call指令将返回地址入栈,然后跳到目的地址。
*push1和pop1指令实现了入栈和出栈。
*halt指令停止指令的执行。
指令编码
·每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分四位:高4位是代码部分,低4位是功能部分。
·8个程序寄存器中每个都有相应的0~7的寄存器标识符。
·程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。
PS:有的指令只有一个字节长,而有的需要操作数的指令编码就更长一些。
有些指令需要一个附加的4字节常数字,这个字能作为irmovl的立即数数据,rmmovl和mrmovl的地址指示符的偏移量,以及分支指令和调用指令的目的地址。
△指令集的一个重要性质就是字节编码必须有唯一的解释。
Y86异常
4.2逻辑设计和硬件控制语言HCL
逻辑门
组合电路和HCL布尔表达式
集合关系
存储器和时钟
4.3 Y86的顺序实现
将处理组织成阶段
取指→译码→执行→访问→写回→更新PC
SEQ硬件结构
(1)浅灰色方框表示硬件单元。
(2)控制逻辑快是用灰色圆角矩形表示的。
(3)线路的名字在百色椭圆中说明。
(4)宽度为字长的数据连接用中等粗度的线表示。
(5)宽度为字节或更窄的数据连接用细线表示。
(6)单个位的连接用虚线来表示。
SEQ的时序
(1)时钟寄存器-程序计数器和条件码寄存器。
(2)随机访问存储器-寄存器文件,指令存储器和数据存储器。
(3)剩下四个:
SEQ阶段的实现
(1)nop指令:PC+1,别的只经过不改变。
(2)halt指令:使处理器状态变为HLT,导致停止运行。
以PC为第一个字节,读6个字节。
(1)两个逻辑块:
(2)三个一位的信号
都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB
(1)包括算术/逻辑单元ALU,输出的是valE。
(2)包括条件码寄存器。
(1)读或者写程序数据。
(2)根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
会产生程序计数器的新值。
参考资料