Как преобразовать инструкции на основе стека в систему на основе регистрации - PullRequest
2 голосов
/ 21 марта 2019

Это то, что я тестировал с модулем dis в python -

>>> 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 основана на стекено Дальвик В.М. основан на регистре.Когда мы пишем код на Java, файлы классов содержат инструкции на основе стека, а инструмент dx преобразует инструкции на основе стека для регистрации инструкций на основе, чтобы он мог работать в виртуальной машине Dalvik.Так что, скорее всего, может быть где-то алгоритм, который я пропустил.

Также может быть ребро, где стек может динамически увеличиваться и уменьшаться (что будет решено во время выполнения), в этом случае это будетневозможно преобразовать основанные на стеке инструкции в основанные на регистрации.Однако один инструмент делает это.

Может кто-нибудь указать мне правильное направление.Или знаете любой алгоритм, который может помочь в этом.

...