【计算机组成原理】指令系统

一、机器指令

指令由操作码地址码两部分构成

指令的字长:一条指令的长度是多少,分固定字长、可变字长

指令的一般格式:

1. 操作码

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

(1)当长度固定时:用于指令字长较长的情况,将操作码集中放在指令字的一个字段内,这种格式便于硬件设计,指令译码时间段,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC中,如IBM370---->固定为8位

(2)当长度可变时,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。通常采用扩展操作码技术,使操作码的长度随地址数的减少術增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。图7.2是一种扩展操作码的安排示意图。

扩展操作码技术

1. 保留一种编码的码点作为扩展标志

2. 利用操作码中某一位作为扩展标志

假设现在有如下的一种指令,OP代表操作码,A1A2A3为地址码,并且它们的长度均为4位,4位操作码若全部用于三地址指令,则有16条。下面通过扩展操作码技术来增加指令长度

(1)如果是4位操作码,那么OP是0000~1111共16个点,那么从0000~1110就是前15条,剩余最           后一条1111我们作为扩展标志

(2)如果OP为1111时,说明这条指令操作码长度至少为8位,且我们减少了一个地址字段A1,剩           余11111111作为扩展标志,。可见操作码的位数随地址数的减少而增加。

操作码取4位时,三地址指令最多为15条
操作码取8位时,两地址指令最多为15条
操作码取12位时,一地址指令最多为15 条
操作码取16位时,零地址指令为16条,共61条
除了这种安排以外,还有其他多种扩展方法,例如,形成15条三地址指令、12条二地址指
令、31条一地址指令和16条零地址指令,共74条指令,读者可自行安排

这种扩展方式要注意,短操作码一定不能是长操作码的前缀,一般我们将高频出现的用作短操作码,不常出现的作长操作码,这样可以缩短经常使用的指令的译码时间。

三地址指令操作码,每减少一种最多可多构成2^4种二地址指令

二地址指令操作码,每减少一种最多可多构成2^4种一地址指令

2.  地址码

地址码的个数有多种形式

(1)四地址

它完成(A1)OP(A2)——A3的操作,A1A2进行操作,将结果保存在A3中,A4中存的是下一条指令的地址

假设此时有32位的指令字长,其中操作码固定为8位,剩下的24位分给了这4位操作数,每个地址码字段都是相同的,均为6位,即寻址范围为2^6=64,完成一条四地址指令,共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。64的寻址范围实际上是非常小的,通过减少地址码的个数可以扩大寻址范围

(2)三地址

它完成(A1)OP(A2)——A3的操作,因为程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段A4便可省去,即得三地址指令格式。将A4字段用pc代替,32位的指令字长,其中操作码固定为8位,剩下的24位分给了这3位操作数,寻址范围扩大到2^8=256,

还可以用A1或A2代替A3,将运算结果不保存在A3中而是某一个参加运算的元操作数,比如暂放在CPU的寄存器(如ACC)中,这样又可省去一个地址字段A3 ,从而得出二地址指令。

(3)二地址

它完成(A1)OP(A2)——A1的操作,或者也可以表示(A1)0P(A2)——A2的操作,此时A2除了代表源操作数的地址外,还代表中间结果的存放地址。这两种情况完成一条指令仍需访问4次存储器,如果将中间结果暂存于累加器ACC中,使其完成(A1)0P(A2)——ACC操作,此时,它完成一条指令只需3次访存,寻址范围为2^12=4 K

(4)一地址

它可完成(ACC)OP(A1)→ACC的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令只需两次访存(取指令一次,取操作数一次)。在指令字长仍为32位、操作码位数仍固定为8位时,一地址指令操作数的直接寻址范围达2^24=16 M
在指令系统中,还有一种指令可以不设地址字段,即所谓零地址指令。

(5) 零地址

在指令字中无地址码,对ACC里的数据进行操作,比如清零、取反、判断是否为全0或全1,堆栈型的指令,空操作(NOP)、停机(HLT)这类指令只有操作码。而子程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。

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

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

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

二、指令字长

1、指令字长固定 

如果指令字长的长度只有一种,我们称指令字长固定,此时,指令字长=存储字长

2、指令字长可变

那么一般是按照字节的倍数变化,通常指令字长取8的整数倍

小结

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

三、操作数类型和种类

1、操作数类型

操作数:指令要进行处理的数据,有四种形式

地址: 在跳转型指令中,绝对地址---->无符号数,相对地址----->有符号数

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

操作数有多种类型的长度,一个操作数可能占4个字节,可能占1个.....,按字节编址时

 存储器存储字长为32位,可按字节、半学、字、双字访问。

(1)从任意位置开始

优点:不浪费存储资源

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

如何保证任何一种类型的数据在一个主存周期我都可以取出来呢?-----第二种方式

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

每一次都从起始开始,这样

优点:无论访问何种类型的数据,在一个周期内均可完成,读写控制简单。

缺点:浪费了宝贵的存储资源(图中黑色部分)

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

数据存放的起始地址是数据长度(按照编址单位进行计算)的整数倍。半字地址是2的整数倍,字地址是4的整数倍,双字地址是8的整数倍。当所存数据不能满足此要求时,可填充一个至多个空自字节。而字节的次序有两种,高地址和低地址。

本方案是前两个方案的折衷,在一个周期内可以完成存储访问,空间浪费也不太严重。

 2、操作类型

(1)数据传送:在不同的存储介质间进行数据传送

数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元、存储器与存储器之间的传送。还有些特殊类型的数据传送指令,如将指定的寄存器置1或清0

(2)算数逻辑操作

 (3)移位操作

算数移位、逻辑移位、循环移位(又分为带进位的和不带进位)三种

(4)转移操作

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

条件转移:

一般机器都能提供一些条件码,这些条件码是某些操作的结果。例如:零标志位(Z) :结果为0,Z=1;负标志位(N) :结果为负,N=1;溢出标志位(V) :结果有溢出, V=1;进位标志位(C):最高位有进位,C=1;奇偶标志位(P) :结果呈偶数,P=1等。

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

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

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

需注意以下三点:

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


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

1.寄存器内。机器内设有专用寄存器,专门用于存放返回地址。
2.子程序的入口地址内。
3.栈顶内。现代计算机都设有堆栈,执行RETURN指令后,便可自动从栈顶内取出应返回的地址。

陷阱与陷阱指令:

陷阱其实是一种意外事故的中断。一旦出现意外故障,计算机就发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的故障处理。比如操作码非法,操作数访问越界等

计算机的陷阱指令一般不提供给用户直接使用,而作为隐指令(即指令系统中不提供的指令),在出现意外故障时,由CPU自动产生并执行。

也有的机器设置供用户使用的陷阱指令或“访管”指令,利用它完成系统调用和程序请求。

(5)输入输出

通常设有输入输出指令,它完成从外设中的寄存器读入一个数据到CPU的寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中。 

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值