第四章 处理器体系结构
第一节 Y86指令集体系结构
一、程序员可见的状态
存储器
Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址
状态码stat
它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。
二、Y86指令
Movl类指令
irmovl,rrmovl,mrmovl,rmmovl
前面的两个字母是在显式的指定源操作数和目的操作数的格式,第一位是源操作数,第二位是目的操作数。
四个整数操作指令
addl 加subl 减andl 与xorl 异或
并且它们只对寄存器数据进行操作,会设置三个条件码ZF\SF\OF
七个跳转指令——分支控制
jmp 直接跳转jle(SF^OF)|ZF 有符号数≤jl SF^OF 有符号<je ZF 相等/零jne ~ZF 不相等/非零jge ~(SF^OF) 有符号≥jg ~(SF^OF)&~ZF 有符号>
六个条件传送指令
Cmovle 、cmovl 、cmove 、cmovne 、cmovge 、cmovg
halt指令
halt指令停止指令的执行,执行此指令会导致处理器停止,并将状态码设置为HLT。
三、指令的字节级编码
字节编码必须有唯一的解释
每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。
第一个字节
整数操作里代码部分均为6,功能部分区分addl,subl,andl,xorl
分支指令里代码部分均为7
传送指令里代码部分均为2
当需要指明不应访问任何寄存器时,用ID值0xF表示
额外需要的字节
(1)附加的寄存器指示符字节
指定一个或两个寄存器,例如rA或者rB。
- 没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
- 只需要一个寄存器操作数的指令(irmovl,pushl,popl)将另一个寄存器指示符设为0xF
(2)附加的4字节常数可包括:
1.irmovl的立即数数据2.rmmol和mrmovl的地址指示符的偏移量3.分支指令和调用指令的目的地址
四、Y86异常
状态码Stat的可能取值
Stat描述程序执行的总体状态
1. AOK 正常操作2. HLT 处理器执行halt指令3. ADR 遇到非法地址4. INS 遇到非法指令
第二节 逻辑设计和硬件控制语言HCL
一、逻辑门
1.符号表示:AND &&OR ||NOT !
2.逻辑门只对单个位的数进行操作,而不是整个字。
二、组合电路
限制:
- 两个或多个逻辑门的输出不能连接在一起
- 必须无环
三、集合关系
判断集合关系的通用格式是:
iexpr in {iexpr1,iexpr2,...,iexprk}
iexpr等都是整数表达式。
四、存储器和时钟
1.时序电路的两类存储器设备:
(1)时钟寄存器(简称寄存器):储存单个位或字。
(2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。
2.Y86处理器
它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。
第三节 Y86的顺序实现
一、将处理组织成阶段
具体框架分为四类:
1.针对OPl(整数和逻辑运算),rrmovl(寄存器-寄存器传送)和irmovl(立即数-寄存器传送)
2.针对rmmovl和mrmovl
3.针对pushl和popl
4.针对跳转,call和ret
二、SEQ硬件结构
SEQ抽象视图的画法:
- 程序计数器放在寄存器中,位于左下角PC。
- 信息随着线流动,方向是先向上再向右
- 反馈先祖在右边向下
- 所有硬件单元的处理都在一个时钟周期内完成。
- 浅灰色方块表示硬件单元
- 控制逻辑块是用灰色圆角矩形表示的
- 线路的名字在白色椭圆中说明
- 宽度为字长或更窄的数据连接用细线
- 单个位的连接用虚线
三、SEQ的时序
SEQ的实现包括组合逻辑和两种存储器设备:
1.时钟寄存器——程序计数器和条件码寄存器2.随机访问存储器——寄存器文件、指令存储器和数据存储器
对于上面提到的五个硬件单元,可以分成两类:
1.组合逻辑——指令存储器2.时序:
条件码寄存器——只在执行整数运算指令时装载数据存储器——只在执行rmmovl、pushl或call时写入寄存器文件——两个写端口允许每个时钟周期更新两个程序寄存器。特殊寄存器?0xF表示此端口不应执行写操作。
四、SEQ阶段的实现
1.取指阶段
以PC为第一个字节,读6个字节。
两个逻辑块(从第一个字节中分出,各四位)
icode-指令代码ifun-指令功能
三个一位的信号(根据icode值计算)
instr_valid-发现不合法的指令need_regids-包含寄存器指示符字节吗need_valC-包括常数字吗
后五个字节是寄存器指示符字节和常数字的组合编码。
2.译码和写回阶段
3.执行阶段
(1)包括算术/逻辑单元ALU,输出的是valE。
ALU常被用作加法器
(2)包括条件码寄存器
零,符号,溢出,产生信号set_cc
4.访存阶段
根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
5.更新PC阶段
参考资料:
http://www.cnblogs.com/20135202yjx/p/4888820.html
实验五:
Y86编写得程序文件