这是我在 python 中使用 dis 模块测试过的 -
>>> def f():
... a = 1
... b = 2
... c = 3
... a = b + c * a
... return a + c
...
>>> dis.dis(f)
2 0 LOAD_CONST 1 (1)
2 STORE_FAST 0 (a)
3 4 LOAD_CONST 2 (2)
6 STORE_FAST 1 (b)
4 8 LOAD_CONST 3 (3)
10 STORE_FAST 2 (c)
5 12 LOAD_FAST 1 (b)
14 LOAD_FAST 2 (c)
16 LOAD_FAST 0 (a)
18 BINARY_MULTIPLY
20 BINARY_ADD
22 STORE_FAST 0 (a)
6 24 LOAD_FAST 0 (a)
26 LOAD_FAST 2 (c)
28 BINARY_ADD
30 RETURN_VALUE
这些是基于堆栈的虚拟机的指令。如果我可以访问无限数量的寄存器,有什么方法可以将上述基于堆栈的指令转换为基于寄存器的指令。
我只知道一种工具可以做到这一点,我们知道 JVM 是基于堆栈的,但 Dalvik VM 是基于寄存器的。当我们用 Java 编写代码时,类文件包含基于堆栈的指令,dx 工具将基于堆栈的指令转换为基于寄存器的指令,以便它可以在 Dalvik VM 中运行。所以很可能在某个地方我错过了一个算法。
也可以有一个边缘可以使堆栈动态增长和收缩(这将在运行时决定),在这种情况下,不可能将基于堆栈的指令转换为基于寄存器的指令。然而,一个工具可以做到这一点。
有人可以指出我正确的方向。或者知道任何可以对此有所帮助的算法。