2.3.5 指令格式设计举例
指令的长度有固定长度的和可变长度的两种,有些RISC(精简指令系统计算机)的指令是固定长度的,但是,由于各种不同用途的指令所要表达的信息量差别很大,因此,目前多数计算机系统的指令是可变长度的。
目前的绝多数计算机系统,指令长度通常取8的倍数,并且要求,当指令长度小于一个存储字时,不要跨越存储字存放,这是因为,如果跨越两个存储字存放,读取一条指令就需要访问两次存储器,从而降低了指令的执行速度。
操作码长度也有固定长度的和可变长度的两种,下面分别举两个例子。
IBM370系列计算机的指令长度有16位、32位和48位等几种,所有指令的操作码都是8位固定长度。在操作码中要给出操作种类、数据类型和寻址方式等。主要指令的格式如图2.12所示。
地址个数采用两地址。有16个通用寄存器,可兼做变址寄存器和基址寄存器使用。如果参加运算的操作数都在通用寄存器中,运算结果也放在通用寄存器中,则为RR型指令,指令字长只需要16位。一个存储字中可以放两条指令。如果参加运算的一个操作数来自主存储器,并采用变址寻址方式,另一个操作数来自通用寄存器,运算结果也放在通用寄存器,则为RX型指令,指令字长32位。正好一个存储字。
另外,RS型指令可用来在通用寄存器与主存储器之间一次传送多个数据。Rn为起始通用寄存器编号,Rm为结束通用寄存器编号,只要用一条指令就能把通用寄存器中从Rn开始到Rm结束的所有数据都存入相邻的主存单元中,同样,也可以从主存储器的相邻单元读出多个数据到通用寄存器中。在程序调用和中断处理时,用这种指令可以快速保存和恢复程序现场。
SI型指令的一个操作数在主存储器中,另一个操作数为立即数。立即数的长度为8位,当然,立即数只能是第二操作数。SS型指令的两个操作数都在主存储器中,并且支持"串"操作。如字符串运算,十进制运算等,也可以用来把长度不超过256个字节的数据块从主存储器的一个区域搬到另一个区域。
小型计算机PDP-11的指令格式如图2.13所示。其指令长度和操作码长度都是可变的,所采用的寻址方式很有特点。
操作码的长度有4位、7位、10位、13位和16位等几种,从4位开始,按等长3位扩展。共有8个通用寄存器,其中也包括程序计数器(R7)和堆栈指针(R6)。寻址方式有8种,见表2.8所示。
从表2.8中可以看出,每个访问主存储器的地址只需要用6位表示,其中3位是寄存器编号,3位是寻址方式。用6位就能寻址整个主存储器的逻辑地址空间。
表2.8 PDP-11计算机的寻址方式
代码
|
名 称
|
汇编符号
|
有效地址
|
R中内容
|
说 明
|
000
|
寄存器寻址
|
R
|
R
|
不变
|
R中内容即为操作数
|
001
|
自增寻址
|
(R)+
|
(R)
|
(R)+d
|
字指令d=1,字节指令d=1
|
010
|
自减寻址
|
-(R)
|
(R)-d
|
(R)-d
|
d的取值同上,(R)先减后用
|
011
|
变址寻址
|
A(R)
|
(R)+A
|
不变
|
A为偏移量,16位
|
100
|
寄存器间址
|
(R)
|
(R)
|
不变
|
.
|
101
|
自增间址
|
@(R)+
|
((R))
|
(R)+d
|
d的取值同上
|
110
|
自减间址
|
@-(R)
|
((R)-d)
|
(R)-d
|
d的取值同上
|
111
|
变址间址
|
@A(R)
|
((R)+A)
|
不变
|
d的取值同上,A为偏移量
|