第四章 处理器体系结构
第四章《处理器体系结构》
一、概述
1、现代微处理器可以称得上人类创造的最复杂的系统之一
2、一个处理器支持的指令和指令的字节级编码称为它的指令级体系结构
二、Y86指令集体系结构
1、简易图示
2、各个字节代表的含义
halt:这个指令将会终止指令的执行。
nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
opl:操作指令,比如加法,减法等等。
jxx:条件跳转指令,根据后面的条件进行跳转。
cmovxx:条件传送指令,后面的xx代表的是条件。特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。
call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。
push与pop:入栈和出栈操作。
3、对于指令的基本介绍
对于opl、jxx、cmovxx指令来说,都有一个fn标识,占用4个二进制位(半个字节)。这个便是指令的功能部分,这个是由于它们的指令编码一样,但功能有所不同所造成的。比如对于opl,就有加、减、与、异或等操作,那么它们的指令编码第一个字节就分别为十六进制的60、61、62、63。
对于寄存器的表示,是使用4个二进制位表示的,这是一个ID标识。所有的寄存器可以看做是一个寄存器文件,其中的ID标识就类似于它们的地址。对于一些只需要一个寄存器的指令来说,另一个寄存器标识位使用0xF表示。
还有的指令需要一个字的常数,比如irmovl指令,call指令等等。这种指令,将把常数放在最后的四个字节当中,顺序按照大端法或小端法表示(与机器和OS有关)。对于call指令来说,这四个字节就是一个地址,这个地址就是绝对地址,指向了存储器当中的某一个位置,这个位置存储着代码。采用绝对地址是为了描述简单,真实当中,是采取的基于PC的相对地址。
4、Y86异常
对于Y86来说,程序猿可见的状态中就有stat状态码,它标识了程序执行的状态。Y86需要有能力根据stat去做一些处理。不过为了简单起见,这里除了正常执行之外,都将停止指令的执行。真实当中,会有专门的异常处理程序。
Y86有四种不同的状态码,AOK(正常)、HLT(执行halt指令)、ADR(非法地址)和INS(非法指令)。
三、逻辑设计和硬件控制语言HCL
1、逻辑门
AND:&&
OR:||
NOT:!
2、组合电路和布尔表达式
*两个或多个逻辑门的输出不能连接在一起,否则可能会使线上的信号矛盾,导致一个不合法的电压或电路故障
*网必须无环
3、字级的组合电路和HCL整数表达式
*P245图
一些位级信号代表一个整数或一些控制模式。执行字级计算的组合电路根据输入字的各个位,用逻辑门来计算输出字的各个位。
4、集合关系
判断集合关系的通用格式:
Iexpr in {iexpr1,iexpr2,…,iexprk}
5、存储器和时钟
组合电路从本质上讲,不存储任何信息。只响应输入产生输出。
时序电路:有状态并且在这个状态上进行计算的系统。
时钟寄存器:存储单个位或者字。时钟信号控制寄存器加载输入值。
随机访问存储器:存储多个字,用地址选择该读写哪个字:
(1) 处理器的虚拟存储器系统
(2) 寄存器文件
Y86处理器会用时钟寄存器保存程序计数器(PC),条件代码(CC)和程序状态(Stat)。
寄存器文件有两个读端口和一个写端口。
四、Y86的顺序实现
1、 将处理组织成阶段
下面是关于各个阶段以及各阶段内执行操作的简略描述:
- 取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。
- 译码:译码阶段从寄存器文件读入最多两个操作数,得到val A/val B.
- 执行:执行阶段,算术/逻辑单元要么执行指令明确的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值称为valE
- 访存:访存阶段可将数据写入存储器或从存储器读出数据
- 写回:最多可写两个结果到存储器。
- 更新PC:将PC设置成下一指令的地址。
- 2、seq阶段的实现
- 参考资料
- 1、百度百科
- 2、左潇龙的技术博客
- 3、bubuko的博客
- 4、码迷指导教程
五、学习总结
本周的内容虽然不多,但是有些晦涩难懂,看书有的地方还是不理解,需要靠做题加深。而本章知识比较像汇编和数字逻辑电路的结合,引入了更多的逻辑门,时序逻辑电路等知识点。
六、遇到的问题以及解决方式
1、235页的练习题4.2,由数字编码翻译成汇编语言时不知道30f3fcffffff为什么偏移量为四。
后面通过询问同学知道,因为偏移量编码是反序的补码形式存放在4个字节的常数字中
2、不知道为什么val值等于pc值+常数
通过百度以及做习题知道,已取指令长度:指令所占字节编码,即是字节数。