3

这是我在 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 中运行。所以很可能在某个地方我错过了一个算法。

也可以有一个边缘可以使堆栈动态增长和收缩(这将在运行时决定),在这种情况下,不可能将基于堆栈的指令转换为基于寄存器的指令。然而,一个工具可以做到这一点。

有人可以指出我正确的方向。或者知道任何可以对此有所帮助的算法。

4

0 回答 0