Я видел как 3-адресные инструкции, так и 2 адресные инструкции, используемые как ИК-интерфейс между интерфейсом и интерфейсом, в чем преимущество и недостаток для каждого из них, поскольку они так похоже?Сравнение между 3-адресными инструкциями и инструкциями с 2 адресами
ответ
Три адреса - это форма, которая показывает главный принцип SSA, что промежуточные всегда неизменны. (если вы всегда выделяете новый виртуальный регистр для нового промежуточного элемента).
Конечно, машинные распределители могут легко конвертировать и работать с другими формами. Три кода адреса - всего лишь обзорный и простой способ моделирования и объяснения SSA.
Я чувствую, что два набора адресов и 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), вероятно, приведет к очень неэффективному коду.
- 1. разница между условными инструкциями (cmov) и инструкциями по прыжкам
- 2. В чем разница между машинными инструкциями и инструкциями по сборке?
- 3. Вложения «и» с инструкциями «или»
- 4. Разница между инструкциями и действиями в OpenFlow
- 5. Выполнение с инструкциями If
- 6. Непоследовательность с инструкциями else?
- 7. Проектирование набора инструкций с 2 инструкциями
- 8. работает СЭД с двумя инструкциями
- 9. Какая разница между двумя инструкциями в сборке?
- 10. Установите задержку между двумя инструкциями в R
- 11. Проблемы с несколькими инструкциями SELECT
- 12. Понимание векторизации с инструкциями SSE
- 13. SQL с несколькими инструкциями SELECT
- 14. Разница между приведенными ниже двумя инструкциями c
- 15. Цикл с инструкциями if и break
- 16. Приостановка между инструкциями cout для заданной продолжительности
- 17. Строки, написанные инструкциями «mov»
- 18. Есть ли разница между этими инструкциями?
- 19. Разница между двумя инструкциями ISA ISA x86?
- 20. jQuery autocomplete с инструкциями IF
- 21. Плавный сплайн с инструкциями SIMD
- 22. Использование row_number с инструкциями подготовки
- 23. Значение ПК между двумя инструкциями (счетчик программ)
- 24. Уменьшите количество инструкций с инструкциями
- 25. INSERT с несколькими инструкциями UPDATE
- 26. Обработка строки с инструкциями MMX
- 27. Разница между инструкциями с одной и двойной точностью
- 28. Шаг данных с инструкциями infile и filename
- 29. Что происходит, когда jmp на адрес между двумя инструкциями?
- 30. Что не так с моими инструкциями System.out.println