从用到的操作数个数区分,可能有如下4种情况:
(1) 无操作数指令,有的指令不涉及操作数,或使用约定的某个(些)操作数,既已约定则没有必要再在指令中加以表示,称这类指令为无操作数指令,它仅有操作码部分,例如停机指令、空操作指令、关中断指令、堆栈结构的计算机系统中对堆栈中数据运算的指令等。
(2) 单操作数指令,有些指令只用一个操作数,必须在指令中指明其地址,如一个寄存器内容增1或减1运算的指令;或还使用约定的某个操作数,既已约定则无需再在指令中加以表示,如完成从(向)外设读(写)数据的指令,就可以只在指令中指明该外设地址,而把接受(送出)数据的通用寄存器约定下来。此外,在短字长的、采用单个累加器的计算机中,已约定目的操作数(如被加数、被减数等)和保存计算结果都使用唯一的那个累加器,指令中只需表示另一个源操作数即可。称这类指令为单操作数指令。
(3) 双操作数指令,对于常用的算术和逻辑运算指令,往往要求使用两个操作数,需分别给出目的操作数和源操作数的地址,其中目的操作数地址还用于保存本次的运算结果。称这类指令为双操作数指令。
(4) 多操作数指令,另外一些指令可能使用多个操作数,如3个操作数,其中两个操作数地址分别给出目的操作数和源操作数的地址,第三个操作数地址用于指出保存本次的运算结果的去处。可以称这类指令为三操作数指令;在有些性能更高的计算机(甚至PC机)中,还有在指令中使用更多个操作数地址的指令,用于完成对一批数据的处理过程,如字符串复制指令,向量、矩阵运算指令等,称这类指令为多操作数指令。
上述4种情况中的前3种,由于其指令字长可以相对较短,执行速度较高,计算机硬件结构可以相对简单等优点,在各种不同类型的计算机中被广泛应用;相对而言,最后一种更多地用在字长较长的大中型计算机中。
关于指令字长,在同一台计算机中,从效率考虑,并不要求所有指令都使用同一长度。在字长较长的计算机中,一个机器字中可以存放多条短指令;在字长较短的计算机中,一条指令也可以占多个机器字。
|
|