Это то, что я тестировал с модулем 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.Так что, скорее всего, может быть где-то алгоритм, который я пропустил.
Также может быть ребро, где стек может динамически увеличиваться и уменьшаться (что будет решено во время выполнения), в этом случае это будетневозможно преобразовать основанные на стеке инструкции в основанные на регистрации.Однако один инструмент делает это.
Может кто-нибудь указать мне правильное направление.Или знаете любой алгоритм, который может помочь в этом.