第四章、处理器体系结构
知识点:
1.Y86指令集体系结构
(1)程序员可见的状态:
Y86程序中的每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见状态。(如232图)
Y86的处理器状态类似于IA32,有8个程序寄存器:%eax,%ebx,%ecx,%edx,%esi,%edi,%esp,%ebp。
Stat:程序执行的总体状态
DMEM:存储器
存储器,从概念上来说就是一个很大的字节数组,保存着程序和数组。
(2)Y86指令:
具体见P232表。
细节:
IA32的movl指令分成了四个不同的指令:irmovl,rrmovl,mrmovl,rmmovl,分别显示地指明源和目的的格式;
Y86有4个整数指令操作;
Y86有7个跳转指令;
Y86有6个条件传送指令;
Call指令将返回地址入栈,然后跳到目的地址。Ret指令从这样的过程调用中返回。
Pushl 和popl 指令实现了入栈和出栈;
Halt 指令停止指令的执行。
(3)指令编码:
指令的字节级编码:每条指令需要1~6个字节不等。
每条指令的第一个字节表明指令的类型,这个字节分成两部分,每部分4位:高4位是代码部分,低四位是功能部分。
Y86指令的整数操作、条件传送和分支指令的具体编码见P233图。
寄存器标识符:
Y86的8个寄存器都有相应0~7的标识符(ID)。如果指令中某寄存器字段ID值为0xF,表示没有寄存器操作。(寄存器标识符详见P234表)
练习题1:
确定字节编码。以第一行为例。
Irmovl $15, %ebx # Load 15 into %ebx
起始地址是0x100,查P232表得知irmovl的寄存器指示符字节是30,接下来是F,再接下来是%ebx的标识符,
查P234表得3,接下来V是15,即为0x0000000f,以反向顺序来写就是0f 00 00 00 。所以最后得到的是0x100:30f30f000000 。
(4)Y86异常:
处理器停止执行指令。
(5)Y86程序:
Y86代码与IA32的主要区别在于,它可能需要多条指令来执行一条IA32指令所完成的功能。
命令指明应该将代码或数据放在什么位置,以及如何对齐
以“.”开头的是汇编器命令。
创建Y86代码的唯一工具是汇编器,所以程序员必须执行本来通常交给编译器、链接器和运行时系统来完成的任务。
(6)一些Y86指令的详情:
pushl会把栈指针减4,并将一个寄存器值写入存储器中。因此,执行pushl %esp 和 popl %esp时,处理器的行为是不确定的,
因为要入栈的寄存器会被同一条指令修改。通常有两种约定:
1):压入%esp的原始值;
2):压入减去4的%esp的值。
习题4.6
回答函数总返回0,表示在IA32中pushl%esp指令行为是怎样?
回答:subl指令将%esp的起始值与压入栈中的值进行了比较,这个减法的结果为0,表明压入的是%esp,表明压入的是%esp的旧值。
2.逻辑设计和硬件控制语言HCL
要实现一个数字系统需要三个主要的组成部分:计算对位进行操作的函数的组合逻辑、存储器的存储元素,以及控制存储器更新的时钟信号。
(1)逻辑门:
C语言中运算符地逻辑门下面是对应的HCL表达式:AND用&&表示,OR用||表示,NOT用!表示。
逻辑门只对单个位的数进行操作,而不是整个字。
(2)组合电路和HCL布尔表达式
将很多的逻辑门组合成一个网,就能构建计算块,称为组合电路,限制是:
两个或者多个逻辑门的输出不能连接在一起;
这个网必须无环。
注意P244图10图11的表达式。
(3)字级的组合电路和HCL整数表达式
通过将逻辑门组合成大的网,可以构造出能计算更加复杂函数的组合电路
组合逻辑电路和c语言中逻辑表达式的区别:
a.组合电路的输出会持续响应输入变化,c语言表达式只有在执行过程中被遇到才求值;
b.逻辑门只对0和1操作,c语言表达式中参数可以是任意整数,0是FALSE,不是0的都是TRUE;
c.C的逻辑表达式可能被部分求值。
3.Y86的顺序实现
每个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。
(1) 将处理组织成阶段:
取指;译码;执行;访存;写回;更新PC。 (具体见书P251)
具体框架分为四类:
a.针对OPl(整数和逻辑运算),rrmovl(寄存器-寄存器传送)和irmovl(立即数-寄存器传送) 见P252表4.18
b.针对rmmovl和mrmovl 见P253表4.19
c.针对pushl和popl 见P254表4.20
d.针对跳转,call和ret 见P256表4.21
(2)SEQ硬件结构:
SEQ抽象视图的画法:
程序计数器放在寄存器中,位于左下角PC。信息随着线流动,方向是先向上再向右。反馈先祖在右边向下。所有硬件单元的处理都在一个时钟周期内完成。浅灰色方块表示硬件单元。控制逻辑块是用灰色圆角矩形表示的。线路的名字在白色椭圆中说明。宽度为字长或更窄的数据连接用细线。单个位的连接用虚线。
(3)SEQ的时序:
SQE的实现包括组合逻辑电路和两种存储器设备:时钟寄存器(程序计数器和条件码计数器),随机访问存储器(寄存器文件、指令存储器和数据存储器)
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
(4)SEQ阶段的实现:
a.取指阶段
b.译码和写回阶段
c.执行阶段
d.访存阶段
e.更新PC阶段
疑问:Y86和IA32相似度很高,它们各自适用的场合?
还有就是有些练习题需要好好看看。
收获体会:
之前的学习还处于前层次,但我明显感觉上次和这次的学习对我来说挑战性增加了。所以我要多看书,不能让自己不会的留到下次成为卡住的问题。
还要多研究习题,不然看书也缺乏重点。
参考资料:《深入理解计算机系统》
20135202闫佳歆博客园