第四节 指令格式举例
指令格式不仅体现了指令系统的各种功能,而且也突出地反映了机器的硬件结构特点。设计指令格式时必须从诸多方面综合考虑,并经一段模拟运行后,最后确定。
一、设计指令格式应考虑的各种因素
指令系统集中反映了机器的性能,又是程序员编程的依据。用户在编程时既希望指令系统很丰富,便于用户选择,同时还要求机器执行程序时速度快、占用主存空间少,实现高效运行。此外,为了继承已有的软件,必须考虑新机器的指令系统与同一系列机器指令系统的兼容性,即高档机必须能兼容低档机的程序运行,称之为“向上兼容”。
指令格式集中体现了指令系统的功能,为此,在确定指令格式时,必须从以下几个方面综合考虑。
·操作类型:包括指令数及操作的难易程度;
·数据类型:确定哪些数据类型可以参与操作;
·指令格式:包括指令字长、操作码位数、地址码位数、地址个数、寻址方式以及指令字长和操作码位数是否可变等等;
·寻址方式:寻找操作数真实地址的方式;
·寄存器个数:寄存器的多少直接影响指令的执行时间。
二、指令格式举例
不同机器其指令格式可以有很大的差别,下面列举几种较为典型的指令格式。
1.PDP-8
PDP-8的指令字长统一为12位,CPU内只设一个通用寄存器,即累加器ACC,其主存被划分为若干个容量相等的存储空间(每个相同的空间被称为一页)。该机的指令格式可分为三大类,如下图所示。
访存类指令属一地址指令。0~2位为操作码(只定义了000~101六种基本操作);第3、4两位为寻址特征位,其中第3位表示是否间接寻址,第4位表示是当前页面(即PC指示的页面)还是0页面;第5~11位为地址码。
为了扩大操作种类,对应操作码“111”又配置了辅助操作码,构成了寄存器类指令,这类指令主要对ACC进行各种操作,如清A、对A取反、对A移位、对A加1、根据A的结果是否跳转……等等。辅助操作码的每一位都有一明确的操作。
第三类指令是I/O类,用第0~2位为110作标志,其具体操作内容由第9~11位反映,第3~8位表示设备号,总共可选64种设备。
PDP-8指令格式支持间接寻址、变址寻址、相对寻址。加上操作码扩展技术,共有35条指令。
2.PDP-11
PDP-11机器字长为16位,CPU内设8个16位通用寄存器,其中两个通用寄存器有特殊作用,一个用作堆栈指针SP,一个用作程序计数器PC。
PDP-11指令字长有16位、32位和48位三种,采用操作码扩展技术,使操作码位数不固定,指令字的地址格式有零地址、一地址、二地址等共有13类指令格式,下图所示的是其中五种。
图中(a)为零地址格式;图(b)为一地址格式,其中6位目的地址码中的3位为寻址特征位,另3位表示8个寄存器中的任一个:图(c)、图(d)、图(e)均为二地址格式指令,但操作数来源不同,有寄存器—寄存器型、寄存器—存储器型和存储器—存储器型。
PDP-11指令系统和寻址方式比较复杂,这既增加了硬件的价格,又增加了编程的复杂度,但好处是能编出非常高效的程序。
3.IBM 360
IBM 360属系列机,所谓系列机是指其基本指令系统相同,基本体系结构相同的一系列计算机。IBM370对IBM360是完全向上兼容的。所以IBM 370可看作IBM360的扩展或延伸或改进。
IBM360是32位机器,按字节寻址,并可支持多种数据类型,如字节、半字、字、双字(双精度实数)、压缩十进制数、字符串等等。在CPU中有16个32位通用寄存器(用户可选定任一个寄存器作为基址寄存器BR或变址寄存器IX),4个双精度(64位)浮点寄存器。指令字长有16位、32位、48位三种,如下图所示。
![]()
图中共画出了五种指令格式,它们的操作码位数均为8位。RR格式是寄存器—寄存器格式,两个操作数均在寄存器中,完成(R1)OP(R2)→R1的操作,RX是二地址格式的寄存器—存储器型指令,一个操作数在寄存器中,另一个操作数在存储器中,其有效地址由变址(X)和基址(B)寻址方式求得,可以完成(R)OP M[(x)+(B)+(D)] →R的操作。RS格式是三地址格式的寄存器一存储器型指令,完成(R3)OP M[(B)+D] →R1操作。SI格式中的I为立即数,它完成立即数→M[(B)+D]的操作。SS格式是存储器—存储器指令,两个操作数均在存储器,这类指令用于十进制运算和字符串处理,数据长度字段L可定义一个长度(1—256个字符)或两个长度(每一个为1~16个十进制数),它完成M[(B1)+D1] OP M[(B2)+D2] →M[(B1)+D]的操作。
4.Inte18086/80486系列机
Inte18086/80486系列微机的指令字长为1~6个字节,即不定长。如零地址格式的空操作指令NOP只占一个字节;一地址格式的CALL指令可以是3字节(段内调用)或5字节(段间调用);二地址格式指令中的两个操作数,既可以是寄存器一寄存器型、寄存器—存储器型,也可以是寄存器—立即数型或存储器一立即数型,它们所占的字节数分别为2、2~4、2~3、3~6个字节。