标签:
定义一个指令集体系结构,例如Y86,包括定义各种状态元素、指令集和他们的编码、一组变成规范和异常事件处理。
①程序员可见的状态:Y86中每条指令都会读取或修改处理器状态的某些部分。这里的“程序员”既可以是用汇编代码写程序的人,也可以是产生机器代码的编译器。
Y86的处理器状态类似IA32。有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%esp和%ebp。处理器的每个程序寄存器存储一个字。
②存储器,从概念上来说是一个很大的字节数组,保存着程序和数据。
Y86程序用虚拟地址来引用存储器位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际保存在存储器那个地方。
③状态码stat:它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。
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
每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。
这个字节分为两个部分,每个部分4位:
比如:课本第233页,Y86指令集的功能码:
整数操作里代码部分均为6,功能部分区分addl,subl,andl,xorl
分支指令里代码部分均为7
传送指令里代码部分均为2
这里要注意rrmovl归到了传送指令里,前面说过它们有相同的指令代码
8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器id作为地址的随机访问存储器。
当需要指明不应访问任何寄存器时,用ID值0xF表示
指定一个或两个寄存器,例如rA或者rB。
这个字的用处:
1.irmovl的立即数数据
2.rmmol和mrmovl的地址指示符的偏移量
3.分支指令和调用指令的目的地址
注意事项
1.分支指令和调用指令的目的地址是一个绝对地址
2.所有整数采用小端法编码
对于Y86,当遇到这些异常的时候,我们就简单的让处理器停业执行指令。
在更完整的设计中,处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。
1.Y86有时需要两条指令来完成IA32一条指令就能完成的事
2.Y86没有伸缩寻址模式
1.逻辑门产生的输出,等于它们输入位值的某个布尔函数。
2.
AND &&OR ||NOT !
3.逻辑门只对单个位的数进行操作,而不是整个字。
4.逻辑门总是活动的,输入变化输出很快就跟着变化。
组合电路:讲很多的逻辑门组成一个网,就能构成计算块。
构建这些网有两条限制:
①两个或多个逻辑门的输出不能连接在一起,否则他们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电器故障。
②这个网必须是无环的。
判断集合关系的通用格式是:
iexpr in {iexpr1,iexpr2,...,iexprk}
iexpr等都是整数表达式。
(1)时钟寄存器(简称寄存器):储存单个位或字。
(2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。
寄存器分为“硬件寄存器”和“程序寄存器”。
它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。
下面是关于各个阶段以及各阶段内执行操作的简略描述:
一个时钟变化会引发一个经过组合逻辑的流来执行整个指令。
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的值。
标签:
原文地址:http://www.cnblogs.com/lxq20135309/p/4890428.html