计算机组成原理16-指令系统

目录

一、机器指令

1、操作码

2、地址码

(1)四地址指令

(2)三地址指令

(3)二地址指令

(4)一地址指令

(5)零地址指令

3、指令字长

二、操作数类型和操作类型

1、操作数类型

2、数据在存储器中的存放方式

(1)从任意位置开始存储

(2)从一个存储字的起始位置开始访问

(3)边界对准方式——从地址的整数倍位置开始访问

2、操作类型

(1)数据传送

(2)算术逻辑操作

(3)移位

(4)转移


计算机组成原理

指令在计算机中的地位

一、机器指令

每一条机器语言的语句称为机器指令,而又将全部机器指令的集合称为机器的指令系统

指令的一般格式

1、操作码

操作码用来指明该指令索要完成的操作,如加法、减法、传送、移位、转移等。通常,其位数反映了机器的操作种类,也即机器允许的指令条数。

操作码的长度可以是固定的,也可以是变化的。

操作码长度固定的指令,将操作码集中放在指令字的一个字段内,这种格式便于硬件设计,指令译码时间段,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC中。

操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。

通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。

在设计操作码不固定的指令系统时,应尽量考虑安排指令使用频度(即指令在程序中出现的概率)高的指令占用短的操作码,对使用频度低的指令可使用较长的操作码,这样可以缩短经常使用的指令的译码时间。

2、地址码

地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的“地址”可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O设备的地址。

(1)四地址指令

其中,OP为操作码;A1为第一操作数地址;A2为第二操作数地址;A3为结果地址;A4为下一条指令的地址。

如果地址字段均指示主存的地址,则完成一条四地址指令,共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。

(2)三地址指令

因为程序中大多数指令是按顺序执行的,而程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段A4便可省去,即得三地址指令格式。

它可完成(A1)OP(A2)→A3的操作后,后续指令的地址隐含在程序计数器PC之中。三地址指令操作数的直接寻址范围可达2^8=256。同理,若地址字段均为主存地址,则完成一条三地址指令也需访问4次存储器。

(3)二地址指令

机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂存在CPU的寄存器(如ACC)中,这样又可省去一个地址字段A3,从而得出二地址指令。

它可完成(A1)OP(A2)→A1的操作,即A1字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示(A1)OP(A2)→A2的操作,此时A2除了代表源操作数的地址外,还代表中间结果的存放地址。

这两种情况完成一条指令仍需访问4次存储器。如果使其完成(A1)OP(A2)→ACC,此时,它完成一条指令只需3次访存,它的含义是中间结果暂存于累加器ACC中。二地址指令操作数的直接寻址范围为2^12=4K。

(4)一地址指令

如果将一个操作数的地址隐含在运算器的ACC中,则指令字中只需给出一个地址码,构成一地址指令。
它可完成(ACC)OP(A1)→ACC的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样完成一条一地址指令只需两次访存。一地址指令操作数的直接寻址范围达2^24,即16M。

(5)零地址指令

零地址指令在指令字中无地址码,例如,空操作(NOP)、停机(HLT)这类指令只有操作码。而子程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。

用一些硬件资源(如PC、ACC)承担指令字中需指明的地址码,可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围。

此外,用PC、ACC等硬件代替指令字中的某些地址字段,还可缩短指令字长,并可减少访存次数。

地址字段表示寄存器时,也可有三地址、二地址、一地址之分。它们的共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,使机器运行速度得到提高(因为寄存器类型的指令只需在取值阶段访问一次存储器)。

3、指令字长

指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数

为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算逻运算指令等)设计成单字长或短字长格式的指令。

通常指令字长取8的整数倍。

二、操作数类型和操作类型

1、操作数类型

机器中常见的操作数类型有地址、数字、字符、逻辑数据等。

2、数据在存储器中的存放方式

字节编址,数据在存储器中的存放方式(存储字长 64位,机器字长32 位)

(1)从任意位置开始存储

优点:不浪费存储资源
缺点:除了访问一个字节之外,访问其它任何类型的数据, 都可能花费两个存储周期的时间。读写控制比较复杂。(需要对字长进行判断,是不是跨存储字)

(2)从一个存储字的起始位置开始访问

优点:无论访问何种类型的数据,在一个周期内 均可完成,读写控制简单。
缺点:浪费了宝贵的存储资源
 

(3)边界对准方式——从地址的整数倍位置开始访问

 
数据存放的起始地址是数据长度(按照编址单位进行计算)的整数倍。如果是双字节,就是按照8byte的倍数,如果是单字节就按照4byte的倍数
本方案是前两个方案的折衷,在一个周期内可以完成存储访问,空间浪费也不太严重。
 

2、操作类型

(1)数据传送

数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送。

(2)算术逻辑操作

加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算、与、或、非、异或、位操作、位测试、位清除、位求反

这类操作可实现算术运算和逻辑运算。有些机器还具有位操作功能,如位测试(测试指定位的值)、位清除(清除指定位)、位求反(对指定位求反)等。

如:8086
 
ADD SUB MUL DIV INC DEC CMP NEG
 
AAA AAS AAM AAD
 
AND OR NOT XOR TEST
 

(3)移位

移位可分为算数移位、逻辑移位、循环移位三种。

(4)转移

转移指令按其转移特征又可分为无条件转移、条件转移、跳转、过程调用与返回、陷阱等几种。

A\ 无条件转移

无条件转移不受任何条件约束,可直接把程序转移到下一条需执行指令的地址。

B\ 条件转移

条件转移是根据当前指令的执行结果来决定是否需要转移。

若条件满足,则转移;若条件不满足,则继续按顺序执行。
还有一种条件转移指令,SKP,它暗示其下一条指令将被跳过,从而隐含恶劣转移地址是SKP后的第二条指令。

C\ 调用与返回
 
通常调用指令包括 过程调用、系统调用、子程序调用。它可实现从一个程序转移到另一个程序的操作。
 
调用指令(CALL)一般与返回指令(RETURN)配合使用。CALL用于从当前的程序位置转至子程序的入口;RETURN用于子程序执行后重新返回到原程序的断点。
 
 

需注意以下三点:

  • 子程序可在多处被调用
  • 子程序调用可出现在子程序中,即允许子程序嵌套。
  • 每个CALL指令都对应一条RETURN指令。

返回地址可存放在以下三处:

  • 寄存器内。机器内设有专用寄存器,专门用于存放返回地址。
  • 子程序的入口地址内。
  • 栈顶内。现代计算机都设有堆栈,执行RETURN指令后,便可自动从栈顶内取出应返回的地址。
D\ 陷阱与陷阱指令
 
陷阱其实是一种意外事故的中断。一旦出现意外故障,计算机就发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的故障处理。
 
计算机的陷阱指令一般不提供给用户直接使用,而作为隐指令(即指令系统中不提供的指令),在出现意外故障时,由CPU自动产生并执行。
 
也有的机器设置供用户使用的陷阱指令或“访管”指令,利用它完成系统调用和程序请求。
 
E\ 输入输出

通常设有输入输出指令,它完成从外设中的寄存器读入一个数据到CPU的寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中。
 
F\ 其他
 
包括 等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等。
 
在多用户、多任务的计算机系统中,还设有特权指令,这类指令只用用于操作系统或其他系统软件,用户是不能使用的。
 
在有些大型或巨型机中,还设有向量指令,可对整个向量或矩阵进行求和、求积运算。
 

参考:https://blog.csdn.net/cbwem/article/details/80140595

猜你喜欢

转载自blog.csdn.net/swadian2008/article/details/112854898