第六周学习总结

第四章  处理器体系结构

4.1 Y86指令集体系结构

  定义一个指令集体系结构,例如Y86,包括定义各种状态元素、指令集和他们的编码、一组变成规范和异常事件处理。

4.1.1 程序员可见的状态

①程序员可见的状态:Y86中每条指令都会读取或修改处理器状态的某些部分。这里的“程序员”既可以是用汇编代码写程序的人,也可以是产生机器代码的编译器。

Y86的处理器状态类似IA32。有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%esp和%ebp。处理器的每个程序寄存器存储一个字。

②存储器,从概念上来说是一个很大的字节数组,保存着程序和数据。

Y86程序用虚拟地址来引用存储器位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际保存在存储器那个地方。

③状态码stat:它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。

 

 

4.1.2 Y86指令

Y86指令集基本上是IA32指令集的一个子集,只包括四字节整数操作,寻址方式比较少,操作也较少。

 

IA32的movl指令分成了四个不同的指令:irmovl,rrmovl,mrmovl,rmmovl 显示的指明源和目的。

源可以是立即数i,寄存器r,存储器m     目的可以是寄存器r,存储器m

不允许从存储器到存储器,也不允许将立即数传到存储器。

4个整数操作指令:addl,subl,andl,xorl  只对寄存器数据进行操作,会设置3个条件码

7个跳转指令:jmp,jle,jl,je,jne,jge,jg

6个条件传送指令:cmovle,comvl,cmove,cmovne,cmovge,cmovg

call指令将返回地址入栈,然后跳到目的地址。ret从这样的过程调用中返回

 

pushl,popl实现入栈和出栈

 

halt停止指令的执行,会导致处理器停止,并将状态码设置为HLT

4.1.3 指令编码

每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。

1.第一个字节

这个字节分为两个部分,每个部分4位:

  • 高四位:代码部分,值域为0~0xB
  • 第四位:功能部分,功能值只有在一组相关指令共用一个代码时才有用。

比如:课本第233页,Y86指令集的功能码:

整数操作里代码部分均为6,功能部分区分addl,subl,andl,xorl

分支指令里代码部分均为7

传送指令里代码部分均为2

这里要注意rrmovl归到了传送指令里,前面说过它们有相同的指令代码

8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器id作为地址的随机访问存储器。

当需要指明不应访问任何寄存器时,用ID值0xF表示

2.有的需要额外的字节

(1)附加的寄存器指示符字节

指定一个或两个寄存器,例如rA或者rB。

  • 没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
  • 只需要一个寄存器操作数的指令(irmovl,pushl,popl)将另一个寄存器指示符设为0xF
(2)附加的4字节常数字

这个字的用处:

1.irmovl的立即数数据

2.rmmol和mrmovl的地址指示符的偏移量

3.分支指令和调用指令的目的地址

注意事项

1.分支指令和调用指令的目的地址是一个绝对地址

2.所有整数采用小端法编码

 

4.1.4 Y86异常

 

对于Y86,当遇到这些异常的时候,我们就简单的让处理器停业执行指令。

在更完整的设计中,处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。

4.1.5 Y86程序

Y86和IA32的区别

1.Y86有时需要两条指令来完成IA32一条指令就能完成的事

2.Y86没有伸缩寻址模式

4.1.6 一些Y86指令的详情

 

 

4.2 逻辑设计和硬件控制语言HCL

4.2.1 逻辑门

1.逻辑门产生的输出,等于它们输入位值的某个布尔函数。

2.

AND &&OR ||NOT !

3.逻辑门只对单个位的数进行操作,而不是整个字。

4.逻辑门总是活动的,输入变化输出很快就跟着变化。

4.2.2 组合电路和HCL布尔表达式

组合电路:讲很多的逻辑门组成一个网,就能构成计算块。

构建这些网有两条限制:

①两个或多个逻辑门的输出不能连接在一起,否则他们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电器故障。

②这个网必须是无环的。

4.2.3 字节的组合电路和HCL整数表达式

 

4.2.4 集合关系

判断集合关系的通用格式是:

iexpr in {iexpr1,iexpr2,...,iexprk}

iexpr等都是整数表达式。

4.2.5 存储器和时钟

1.时序电路的两类存储器设备:

(1)时钟寄存器(简称寄存器):储存单个位或字。

(2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。

寄存器分为“硬件寄存器”和“程序寄存器”。

2.Y86处理器

它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。

4.3 Y86的顺序实现

4.3.1 将处理组织成阶段

下面是关于各个阶段以及各阶段内执行操作的简略描述:

  • 取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。
  • 译码:译码阶段从寄存器文件读入最多两个操作数,得到val A/val B.
  • 执行:执行阶段,算术/逻辑单元要么执行指令明确的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值称为valE
  • 访存:访存阶段可将数据写入存储器或从存储器读出数据
  • 写回:最多可写两个结果到存储器。
  • 更新PC:将PC设置成下一指令的地址。
  • 程序计数器放在寄存器中,位于左下角PC。
  • 信息随着线流动,方向是先向上再向右
  • 反馈先祖在右边向下
  • 所有硬件单元的处理都在一个时钟周期内完成。
  • 浅灰色方块表示硬件单元
  • 控制逻辑块是用灰色圆角矩形表示的
  • 线路的名字在白色椭圆中说明
  • 宽度为字长或更窄的数据连接用细线
  • 单个位的连接用虚线。

4.3.2 SEQ硬件结构

SEQ抽象视图的画法:

 

  • 程序计数器放在寄存器中,位于左下角PC。
  • 信息随着线流动,方向是先向上再向右
  • 反馈先祖在右边向下
  • 所有硬件单元的处理都在一个时钟周期内完成。
  • 浅灰色方块表示硬件单元
  • 控制逻辑块是用灰色圆角矩形表示的
  • 线路的名字在白色椭圆中说明
  • 宽度为字长或更窄的数据连接用细线
  • 单个位的连接用虚线。

 

4.3.3 SEQ的时序

一个时钟变化会引发一个经过组合逻辑的流来执行整个指令。

SEQ的实现包括组合逻辑和两种存储器设备:

时钟寄存器:程序计数器和条件码寄存器

随机访问存储器:寄存器文件、指令存储器和数据存储器

组合逻辑不需要时序或控制。

四个硬件单元需要时序进行明确控制:程序计数器、条件码寄存器、数据存储器和寄存器文件,通过一个时钟信号来控制,它触发将新值装载到寄存器以及将值写到随机访问存储器。即要控制处理器中的时序,只需要寄存器和存储器的时钟控制。

4.3.4 SEQ阶段的实现

 

1、取指阶段

以PC作为起始地址,从指令存储器中读出六个字节。

根据这些字节,产生出各个指令字段。PC增加模块计算信号valP。

2、译码和写回阶段

指令字段译码,产生寄存器文件使用的四个地址(两个读和两个写)的寄存器标识符。

从寄存器文件中读出的值成为信号valA和valB。两个写回值valE和valM作为写操作的数据。

3、执行阶段

ALU要么为整数运算指令执行操作,要么作为加法器。

根据ALU的值,设置条件码寄存器。检测条件码的值,判断是否该选择分支。

4、访存阶段

数据存储器既可以写,也可以读存储器的值。从存储器读出的值就形成了信号valM。

5、更新PC阶段

根据指令代码和分支标志,从信号valC、valM和valP中选出下一个PC的值。

 

参考资料:

百度百科

闫佳歆同学的博客

 

posted @ 2015-10-18 21:57  20135309李雪琦  阅读(302)  评论(0编辑  收藏  举报