2013-09-09 4 views
0

Я видел как 3-адресные инструкции, так и 2 адресные инструкции, используемые как ИК-интерфейс между интерфейсом и интерфейсом, в чем преимущество и недостаток для каждого из них, поскольку они так похоже?Сравнение между 3-адресными инструкциями и инструкциями с 2 адресами

ответ

1

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

Конечно, машинные распределители могут легко конвертировать и работать с другими формами. Три кода адреса - всего лишь обзорный и простой способ моделирования и объяснения SSA.

1

Я чувствую, что два набора адресов и 3 набора инструкций отличаются друг от друга. Есть много факторов, которые могут вступить в игру при определении того, что использовать.

  • Сложность кода и размер кода. Меньше операндов означает, что каждая отдельная инструкция легче представить и реализовать. Больше операндов означает, что более функциональные возможности могут быть представлены одной инструкцией. Возьмем следующий пример сравнения:
+--------------------------------------------------------- 
| C instruction | 2 address | 3 address | 4 address | 
+----------------+-----------+-------------+-------------+ 
| r = x;   | mov r,x | mov r,x  | mov r,x  | 
+----------------+-----------+-------------+-------------+ 
| r = x + y;  | mov r,x | add r,x,y | add r,x,y,0 | 
|    | add r,y |    |    | 
+----------------+-----------+-------------+-------------+ 
| r = x + y + z; | mov r,x | add q,x,y | add r,x,y,z | 
|    | add r,y | add r,q,z |    | 
|    | add r,z |    |    | 
+----------------+-----------+-------------+-------------+ 
  • Простота оптимизации. Как уже упоминалось ранее, наборы инструкций с 3 + адресами учитывают реализацию и анализ SSA, что значительно упрощает многие оптимизации времени компиляции.

  • Простота перевода в целевой код. Это зависит от того, к чему вы переводите свой IR. Перевод 4-х адресного кода на язык, основанный на стеке, был бы затруднительным. Перевод 2 кода адреса в архитектуру CISC общего назначения (например, сборку x86), вероятно, приведет к очень неэффективному коду.

Смежные вопросы