汇编语言中的PUSH指令是零地址指令还是一地址指令?

Pul*_*uja 1 assembly cpu-architecture stack-machine

我读到,在堆栈中实现时,ADD 和 MUL 指令是零地址指令,但没有任何地方讨论 PUSH 和 POP 指令是一个地址指令还是零地址指令。以下是 Morris Mano 的《计算机体系结构》的摘录: 在此输入图像描述

在我们的考试中被问到并回答为零地址指令,但我很确定它一定是一地址指令。请有人帮忙。

Pet*_*des 5

PUSH/POP 显然是 1 个显式地址,因为它们有一个显式操作数。其他(隐式)操作数是堆栈指针和堆栈内容。

您从教科书中引用的文字甚至说 PUSH 和 POP 在其机器代码中需要一个地址字段。

显然,您的考试存在评分错误,在堆栈机中将 PUSH/POP 与 ADD/MUL 指令混合在一起。即使在 x86 等其他 ISA 中,PUSH/POP 也是 1 地址指令

如果有某个固定寄存器的内容被推送,则 PUSH 只能是 0 地址,并且必须先将数据放入该寄存器才能推送它。