基于堆栈的操作的小帮助!

时间:2011-06-25 14:16:04

标签: assembly stack

堆栈说明:

PUSH A
PUSH B
SUB
POP X

X = A-B X = B-A?

提前谢谢! :)

2 个答案:

答案 0 :(得分:2)

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

实际上,大多数基于堆栈的语言或指令集都遵循Reverse Polish notation的约定:5 2 -将是3,并且可以将堆栈操作视为{ {1}}。因此,在您的示例中,push 5; push 2; subtract将是更典型的预期结果。

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

答案 1 :(得分:0)

因此,如果我必须使用堆栈操作演示A*(B-C)/D-E,我就是这样做的:

PUSH A
PUSH B
PUSH C
SUB
MUL
PUSH D
DIV
PUSH E
SUB

然后,堆栈的顶部将具有A*(B-C)/D-E评估的内容。实际上这需要使用零地址格式寄存器完成,我相信使用堆栈就是这样做的。

非常感谢您的帮助。

非常感谢。