【笔记】指令系统(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cbwem/article/details/80140595

一、机器指令

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

1.指令的一般格式

  指令是由操作码地址码两部分组成的。

操作码

  操作码用来指明该指令索要完成的操作,如加法、减法、传送、移位、转移等。通常,其位数反映了机器的操作种类,也即机器允许的指令条数。
  操作码的长度可以是固定的,也可以是变化的。前者将操作码集中放在指令字的一个字段内,如图所示。这种格式便于硬件设计,指令译码时间段,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC中。


这里写图片描述

  对于操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。
  通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。


这里写图片描述

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

地址码

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

  (1)四地址指令


这里写图片描述

其中,OP为操作码; A 1 为第一操作数地址; A 2 为第二操作数地址; A 3 为结果地址; A 4 为下一条指令的地址。
  如果地址字段均指示主存的地址,则完成一条四地址指令,共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。

  (2)三地址指令


这里写图片描述

  因为程序中大多数指令是按顺序执行的,而程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段 A 4 便可省去,即得三地址指令格式。
  它可完成 ( A 1 ) O P ( A 2 ) A 3 的操作后,后续指令的地址隐含在程序计数器PC之中。三地址指令操作数的直接寻址范围可达 2 8 = 256 。同理,若地址字段均为主存地址,则完成一条三地址指令也需访问4次存储器。

  (3)二地址指令


这里写图片描述

  机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂存在CPU的寄存器(如ACC)中,这样又可省去一个地址字段 A 3 ,从而得出二地址指令。
  它可完成 ( A 1 ) O P ( A 2 ) A 1 的操作,即 A 1 字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示 ( A 1 ) O P ( A 2 ) A 2 的操作,此时 A 2 除了代表源操作数的地址外,还代表中间结果的存放地址。这两种情况完成一条指令仍需访问4次存储器。如果使其完成 ( A 1 ) O P ( A 2 ) A C C ,此时,它完成一条指令只需3次访存,它的含义是中间结果暂存于累加器ACC中。二地址指令操作数的直接寻址范围为 2 12 = 4 K

  (4)一地址指令


这里写图片描述

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

  (5)零地址指令
  零地址指令在指令字中无地址码,例如,空操作(NOP)、停机(HLT)这类指令只有操作码。而子程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。
  用一些硬件资源(如PC、ACC)承担指令字中需指明的地址码,可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围。此外,用PC、ACC等硬件代替指令字中的某些地址字段,还可缩短指令字长,并可减少访存次数。
  地址字段表示寄存器时,也可有三地址、二地址、一地址之分。它们的共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,使机器运行速度得到提高(因为寄存器类型的指令只需在取值阶段访问一次存储器)。

2.指令字长

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

二、操作类型

1.操作数类型

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

2.操作类型

数据传送

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

算术逻辑操作

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

移位

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

转移

  转移指令按其转移特征又可分为无条件转移、条件转移、跳转、过程调用与返回、陷阱等几种。
  (1)无条件转移
  无条件转移不受任何条件约束,可直接把程序转移到下一条需执行指令的地址。
  (2)条件转移
  条件转移是根据当前指令的执行结果来决定是否需要转移。若条件满足,则转移;若条件不满足,则继续按顺序执行。
  还有一种条件转移指令,SKP,它暗示其下一条指令将被跳过,从而隐含恶劣转移地址是SKP后的第二条指令。

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

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

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

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

  (4)陷阱与陷阱指令
  陷阱其实是一种意外事故的中断。一旦出现意外故障,计算机就发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的故障处理。
  计算机的陷阱指令一般不提供给用户直接使用,而作为隐指令(即指令系统中不提供的指令),在出现意外故障时,由CPU自动产生并执行。也有的机器设置供用户使用的陷阱指令或“访管”指令,利用它完成系统调用和程序请求。

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

  (6)其他
  包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等。
  在多用户、多任务的计算机系统中,还设有特权指令,这类指令只用用于操作系统或其他系统软件,用户是不能使用的。在有些大型或巨型机中,还设有向量指令,可对整个向量或矩阵进行求和、求积运算。

猜你喜欢

转载自blog.csdn.net/cbwem/article/details/80140595