第四章 处理器体系结构
4.1 Y86指令集体系结构
指令集体系结构,包括定义各种状态元素、指令集和他们的编码、一组编程规范和异常事件处理。
程序员可见的状态:Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
8个程序寄存器:%eax、%ebx、%ecx、%edx、%esi、%edi、%esp、%ebp。存储一个字。
存储器:可以理解为很大的字节数组,保存着程序和数据。Y86用虚拟地址来引用存储器位置。
物理地址:硬件和操作系统软件联合将虚拟地址翻译成实际,指明数据实际保存在存储器的那个位置。
状态码Stat,表明程序执行的总体状态。
Y86指令:基本上是IA32指令集的一个子集。
指令编码
每条指令的第一个字节表明指令的类型。高四位是代码部分,第四位是功能部分。!指令集的重要性质——字节编码必须有唯一的解释。
Y86异常
Y86程序
没有伸缩寻址模式;
!以“.”开头的词是汇编器命令
YIS(指令集模拟器)目的是Y86机器程序代码的执行
一些Y86指令的详情
两个特别的指令组合需要注意!
4.2 逻辑设计和硬件控制语言HCL
逻辑门
AND &&. OR ||. NOT
组合电路——将很多逻辑门组合成一个网,构建计算块。
!两个限制:
(1) 两个或多个逻辑门的输出不能连接在一起,否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障;
(2) 这个网必须是无环的。回路会导致网络计算的函数有歧义。
3.字级的组合电路和HCL整数表达式
表达式:
理解:前面的为选择表达式,它可以是任意的布尔表达式,并按照顺序求值,且第一个求值为1的情况会被选中。允许不互斥的选择表达式使得HCL的可读性更好。实际的硬件多路复用器的信号必须互斥。
算术/逻辑单元(ALU)
集合关系
存储器和时钟
两类存储设备:
(1)寄存器(简称寄存器):存储单个位或字,时钟信号控制寄存器加载输入值。
(2)随机访问存储器(简称存储器):存储多个字,用地址来选择该杜或该写哪个字
4.3 Y86的顺序实现
1.将处理组织成阶段
取指——译码——执行——访存——写回——更新PC
(处理器无限循环,执行这些阶段)
2.SEQ硬件结构、SEQ的时序
SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器)和随机访问寄存器(寄存器文件、指令存储器和数据存储器)。
!!遵循以下原则组织计算:
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
3.SEQ阶段的实现
常数一般用大写表示。
(1) 取指阶段
取指阶段包括指令存储器硬件单元。
(2)译码和写回阶段(均需访问寄存器文件)
(3 执行阶段
执行阶段包括算术/逻辑单元(ALU)。
(4)访存阶段
访存阶段的任务就是读或者写程序数据。
访存阶段最后的功能是根据取值阶段产生的icode、imem_error、instr_valid值以及数据存储器产生的dmem_error信号,从指令执行的结果来计算状态码Stat。
(5)更新PC阶段
会产生程序计数器的新值。
参考资料为教材的PDF版
实验内容:
1.下载Y86模拟器
2.构建YIS环境:
cd ~/Code/shiyanlou_cs413 wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar tar -xvf sim.tar cd sim sudo apt-get install tk sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so make
3.YIS手册下载
4.YIS测试:
验证:
来源:https://www.cnblogs.com/20135230pjy/p/4889107.html