• 内容讲解

指令系统中的地址码用来描述指令的操作对象。在地址码中可以直接给出操作数本身,也可以给出操作数在存储器或寄存器中的地址、操作数在存储器中的间接地址等。

根据指令功能的不同,一条指令中可以有一个、两个或者多个操作数地址,也可以没有操作数地址。一般情况下要求有两个操作数地址,但若要考虑存放操作结果,就需要有三个操作数地址。

根据地址码的数量,可以将指令的格式分为:零地址指令、一地址指令、二地址指令、三地址指令和多地址指令。各种不同地址码的指令格式如图4-2所示:

412.gif

1. 零地址指令

在该指令格式中没有地址码部分,只有操作码。

该类指令分两种情况:一种是无需操作数,如空操作指令、停机指令等;另一种则是操作数为默认的(或称隐含的),如操作数在累加器或者堆栈中,它们的操作数由硬件机构来提供。

2. 一地址指令

常称为单操作数指令,该指令中只有一个地址码。这种指令可能是单操作数运算,给出的地址既作为操作数的地址,也作为操作结果的存储地址;也可能是二元运算,指令中提供一个操作数,另一个操作数则是隐含的。例如,以运算器中累加寄存器AC中的数据为被操作数,指令字的地址码字段所指向的数为操作数,操作结果又放回累加寄存器AC中。其数学含义为

(AC) OP (A) → AC

式中,

OP表示操作性质,如加、减、乘、除等;

(AC)表示累加寄存器AC中的数;

(A)表示主存中地址为A的存储单元中的数,或者是运算器中地址为A的通用寄存器中的数;

→表示把操作(运算)结果传送到指定的地方。

注意:地址码字段A指明的是操作数的地址,而不是操作数本身。

3. 二地址指令

这是最常见的指令格式,又称为双操作数指令。通常情况下,在这种指令中包括两个参加运算的操作数的地址码,运算结果保存在其中一个操作数的地址码中,从而使得该地址中原来的数据被覆盖。其数学含义可表示为

(A1)OP(A2)→ A1

式中,两个地址码字段A1和A2分别指明参与操作的两个数在主存或通用寄存器中的地址,且地址A1兼做存放操作结果的地址。

4. 三地址指令

在这种指令中包括两个操作数地址码和一个结果地址码,可使得在操作结束后,原来的操作数不被改变。其数学含义可表示为

(A1)OP(A2)→ A3

式中,A1和A2指明两个操作数地址,A3为存放操作结果的地址。

5. 多地址指令

我们以四地址指令为例,四地址指令比三地址指令增加了下一条要执行的指令地址,因此其优点是非常直观,指令所用的所有参数都有各自的存放地址,并且有明确的下一条指令地址,程序的流程很明确,但是其缺点也是显而易见的,这就是指令所占的长度太长。

从操作数的物理位置来说,二地址指令格式又可归结为三种类型:

1)存储器-存储器(Storage-Storage, SS)型指令

这种指令在操作时需要多次访问主存,参与读、写操作的数都放在主存里。

2)寄存器-寄存器(Register-Register, RR)型指令

这种指令在操作时需要多次访问寄存器,从寄存器中取操作数,把操作结果放到寄存器中。

由于不需要访问主存,机器执行寄存器-寄存器型指令的速度很快。

3)寄存器-存储器(Register-Storage, RS)型指令

这种指令在操作时既要访问主存单元,又要访问寄存器。

计算机选择什么样的指令格式,包括多方面的因素:一般情况下,地址码越少,占用的存储器空间就越小,运行速度也越快,具有时间和空间上的优势;而地址码越多,指令内容就越丰富。因此,要通过指令的功能来选择指令的格式。在计算机中,一个指令系统中所采用的指令地址结构并不是惟一的,往往混合采用多种格式,以增强指令的功能。