第四章 处理器体系结构
指令被编码为由一个或多个字节序列组成的二进制格式。一个处理器支持的指令和指令字节级编码成为他的指令集体系结构ISA。
4.1 Y86指令集体系结构
指令集体系结构,包括定义各种状态元素、指令集和他们的编码、一组编程规范和异常事件处理。
- 程序员可见的状态
Y86处理器有八个寄存器:%eax、%edx、%ecx、%ebx、%esi、%edi、%esp和%ebp。每个程序存储器存储一个字。
●寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。
●3个一位的条件码:ZF、SF、OF;保存最近的算术或逻辑指令所造成影响的有关信息。
●程序计数器(PC)存放当前正在执行指令的地址。
●存储器:保存程序和数据。Y86用虚拟地址引用存储器位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际保存的地方。虚拟存储器提供给Y86程序一个单一的字节数组映像。
●状态码Stat,表明程序执行的总体状态。
2.Y86 指令
Y86 指令集只包含四字节整数操作。
3.指令编码
每条指令的第一个字节表明指令的类型。高四位是代码部分,第四位是功能部分。
!指令集的重要性质——字节编码必须有唯一的解释。
4.Y86异常
5.Y86程序
Y86没有伸缩寻址模式;
!以“.”开头的词是汇编器命令
YIS(指令集模拟器)目的是Y86机器程序代码的执行
6.一些Y86指令的详情
两个特别的指令组合需要注意!
4.2 逻辑设计和硬件控制语言HCL
1.逻辑门
逻辑门只对单个位的数进行操作。
2.组合电路和HCLB布尔表达式
组合电路——将很多逻辑门组合成一个网,构建计算块。
!两个限制:
(1) 两个或多个逻辑门的输出不能连接在一起,否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障;
(2) 这个网必须是无环的。回路会导致网络计算的函数有歧义。
●多路复用器MUX
3.字级的组合电路和HCL整数表达式
(1)多路复用函数用情况表达式来描述:
理解:前面的为选择表达式,它可以是任意的布尔表达式,并按照顺序求值,且第一个求值为1的情况会被选中。允许不互斥的选择表达式使得HCL的可读性更好。实际的硬件多路复用器的信号必须互斥。
(2)算术/逻辑单元(ALU)
4.集合关系
5. 存储器和时钟
两类存储设备:
(1)寄存器(简称寄存器):存储单个位或字,时钟信号控制寄存器加载输入值。
(2)随机访问存储器(简称存储器):存储多个字,用地址来选择该杜或该写哪个字。
寄存器工作:
处理器有一个随机访问存储器来存储程序数据,如下图所示:
4.3 Y86的顺序实现
1.将处理组织成阶段
取指——译码——执行——访存——写回——更新PC
(处理器无限循环,执行这些阶段)
2.SEQ硬件结构、SEQ的时序
SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器)和随机访问寄存器(寄存器文件、指令存储器和数据存储器)。
!!遵循以下原则组织计算:
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
3.SEQ阶段的实现
常数一般用大写表示。
(1) 取指阶段
取指阶段包括指令存储器硬件单元。
(2) 译码和写回阶段(均需访问寄存器文件)
(3) 执行阶段
执行阶段包括算术/逻辑单元(ALU)。这个单元根据alufun信号的设置,对输入aluA和aluB执行ADD、SUBTRACT、AND和EXCLUSIVE-OR运算。这些数据和控制信号由三个控制块产生。ALU的输出就是valE信号。
(4) 访存阶段
访存阶段的任务就是读或者写程序数据。
访存阶段最后的功能是根据取值阶段产生的icode、imem_error、instr_valid值以及数据存储器产生的dmem_error信号,从指令执行的结果来计算状态码Stat。
(5) 更新PC阶段
会产生程序计数器的新值。
实验楼作业:
首先下载了Y86模拟器,然后创建YIS环境:
遇到的问题:
本章主要是讲了处理器结构,各种逻辑门、功能单元,指令集,指令的执行,指令执行的流水线等的内容,感觉通过Y86简单的了解了一些处理器体系结构。并且书上用其表示基本的运算和控制,甚至讲了数字电路的HCL 。数据流、组合逻辑和流水线,图示+详细的讲解,让我学习起来还比较顺利。
参考资料:《深入理解计算机系统》
PS:老师,我把第二章和第三章的作业写在新的博客里面了。请老师检查。