不同的处理器家族支持不同的ISA(Instruction-Set Architecture,指令集体系结构),ISA在编译器编写者和处理器设计人员之间提供了一个抽象概念层,ISA模型看上去是顺序指令执行,但在实际执行时,为了获取更高的性能,往往采取一些特殊机制
本章目的在于设计处理器,首先会定义一个简单的指令集(Y86-64,是X86-64子集,只包含8字节整数操作),和实际ISA相比,简单一些但足够完整,完成一些处理整数的程序,接着会提供一些数字硬件设计的背景,之后会设计基于顺序操作的Y86-64处理器,之后进行改进,创建一个流水线化的处理器
Y86-64指令集体系结构的指令都会读取和修改处理器状态的某些部分,这称为程序员可见状态,也就是多个寄存器(每个寄存器存储一个64位字)、3个一位的条件码(ZF、SF、OF,保存最近的算术或逻辑指令造成的信息)、PC和状态码(Stat,表明程序执行的总体状态,指示是正常运行还是出现了某种异常,例如当指令试图读取非法的内存地址时,就会产生对应的状态码,这就和软件层的异常对应上了)
中间介绍了一些指令细节、逻辑设计和硬件控制语言,要么就是过于细节,要么就是学过了,因此没有仔细看,直接跳过,直接进入处理器设计步骤
即使是ISP的一条指令也包含了很多操作,而且指令之间或多或少会有些不同,因此创建一个框架,使得指令都遵循统一的序列,有点类似于模板设计方法
- 取指:从内存中读取指令字节,地址为PC的值
- 译码:从寄存器文件读入最多两个操作数
- 执行:算术/逻辑单元(ALU)执行指令指明的操作,计算内存引用的有效地址,要么增加/减少栈指针
- 访存:将数据写入内存,或者从内存读取数据
- 写回:将结果写回到寄存器文件
- 更新PC:将PC设置为下一条指令地址