Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 关于堆栈操作的小帮助!_Assembly_Stack - Fatal编程技术网

Assembly 关于堆栈操作的小帮助!

Assembly 关于堆栈操作的小帮助!,assembly,stack,Assembly,Stack,堆栈指令: PUSH A PUSH B SUB POP X 是X=A-B 或 X=B-A 先谢谢你!:) 理论上,SUB可以用任何一种方式定义(正如@delnan所说) 在实践中,大多数基于堆栈的语言或指令集将遵循以下约定:52-将是3,并且可以将堆栈操作视为push 5;推2;减去。因此,在您的示例中,X=A-B将是更典型的预期结果 (一个真实的例子:在JVM中。)因此,如果我必须用堆栈操作演示A*(B-C)/D-E,那么我做得对: PUSH A PUSH B PUSH C SUB MUL

堆栈指令:

PUSH A
PUSH B
SUB
POP X
X=A-B X=B-A


先谢谢你!:)

理论上,
SUB
可以用任何一种方式定义(正如@delnan所说)

在实践中,大多数基于堆栈的语言或指令集将遵循以下约定:
52-
将是
3
,并且可以将堆栈操作视为
push 5;推2;减去
。因此,在您的示例中,
X=A-B
将是更典型的预期结果


(一个真实的例子:在JVM中。)

因此,如果我必须用堆栈操作演示
A*(B-C)/D-E
,那么我做得对:

PUSH A
PUSH B
PUSH C
SUB
MUL
PUSH D
DIV
PUSH E
SUB
然后,堆栈顶部将有
A*(B-C)/D-E
计算结果。实际上,这需要使用零地址格式寄存器来完成,我相信使用堆栈这种方式就是这样做的

非常感谢你的帮助


非常感谢。

取决于
SUB
;)的定义)