堆栈机与寄存器机示例

stack machine vs register machine example

我想通过一个例子来弄清楚堆栈机器和基于寄存器的机器之间的区别:

叠机是这样的:

1+2*3:

1.push 1 push 2 push 3
2.pop 3 pop 2 push 6
3.pop 6 pop 1
4.push 7

所以上面的计算需要很多操作。但是,在基于寄存器的机器中,我们没有任何 push 或 pop 操作,但是指令需要有操作数的寄存器。

有些例子是这样的:

R1(register) --> operand:1
R2 --> operand:2
R3 --> operand:3

寄存器VM中的等效操作如何表示?

smali 是一种基于寄存器的汇编语言dalvik bytecode,它类似于

const v0, 2        # v0 = 2
const v1, 3        # v1 = 3
mul-int v0, v0, v1 # v0 = v0 * v1
                   # v0 is now 6
const v1, 1        # v1 = 1
add-int v0, v0, v1 # v0 = v0 + v1
                   # v0 is now 7