零地址指令格式

4)零地址指令格式

指令格式为:

OP

指令中只有操作码,不含操作数。对于需要有操作对象的指令,所需操作数采用隐含指定。例如,将操作数事先放入堆栈中,由堆栈指针SP(Stack Pointer)隐含指出。这种指令仅对栈顶数据进行操作。操作结果仍送回堆栈中(有关堆栈的知识在后续章节中介绍)。

例如:同样完成(X)+(Y)一(Z)的操作,用零地址指令可表示为:

PUSH    X  指令含义为:X内容入栈

PUSH  Y   指令含义为:Y内容入栈

ADD    指令含义为:栈顶两数相加,结果仍存于栈顶

POP   Z   指令含义为:栈顶结果→Z

当然用栈顶元素隐含表示操作数的方法不可能做到所有的指令都是零地址,至少有两条指令PUSH入栈指令和POP出栈指令必须指明一个操作数地址。目前这种用堆栈指针SP来隐含操作数地址的零地址指令系统是极少见的。

但操作数的地址采用隐含方式却是常见的。例如,对于由某个寄存器隐含,PC机的串操作处理指令,其操作数是隐含在源变址寄存器SI和目的变址寄存器DI所指定的内存单元中的,串操作指令格式就采用了零地址指令格式,换码指令XLAT,十进制调整指令DAA,DAS的操作数也采用隐含方式,指令格式为零地址指令。

需要强调的是,这节谈到指令中的地址码个数并非指由于指令操作的不同而要求有不同的操作数,而是说对于相同的操作,不同地址码结构的计算机有不同的实现方案。

从这节讨论中可以看出,指令中的地址码格式和机器的字长有着比较密切的关系。一地址指令格式是8位机通常采用的地址码结构。16位机更多地采用二地址指令格式。而32位以上的计算机有条件选择三地址结构。不难理解字长愈宽留给地址码的空间愈多,就越便于安排更多的地址码。

当然,三地址指令系统也包括有二地址指令、一地址指令和零地址指令;二地址指令系统也会有一地址指令和零地址指令,这是操作码的性质决定的。但是二地址指令系统中不会出现三地址指令,一地址指令系统中也不会有二地址和三地址指令存在。

还需要指出的是,由于系列机的出现,出于指令兼容性的考虑,往往出现几种地址结构的指令混杂的情况。例如PC系列的32位机的指令系统中就可看到PC系列8位机一地址指令系统的痕迹。

从这节讨论中还可以看到,指令中地址码字段愈多,完成同样的功能所需的指令条数就愈少;反之,地址码字段愈少,所需的指令条数愈多。这就是为什么解决同一问题,8位机的程序一般要长于16位机和32位机程序的执行时间的原因之一。

豫ICP备19006514号 网站地图 免责声明:如果侵犯了你的权益,请发邮件至:419017772@qq.com,我们会及时删除侵权内容,谢谢合作!