Почему нет сопутствующей инструкции, чтобы уйти?

Просто быстро, почему на x86 нет сопутствующей инструкции? Сюда,

pushl   %ebp
movl    %esp,%ebp
pushl   $3
leave
ret

мог стать:

enter #or something
pushl   $3
leave
ret

Разве это не просто быстрее в целом?

3 ответа

Решение

На самом деле, есть enter инструкция Что касается того, почему он не видит особого смысла, в "Справочном руководстве по оптимизации архитектур Intel® 64 и IA-32" есть подсказка:

Правило 32 кодирования сборки / компилятора (влияние MH, M общность) Использование push / pop управлять пространством стека и настройкой адреса между вызовами / возвратами функций вместо enter / leave, С помощью enter Инструкция с ненулевыми непосредственными участниками может иметь значительные задержки в конвейере в дополнение к неправильному прогнозированию.

Действительно, есть соответствующая инструкция ENTER (Art of Assembly Language). Однако он редко используется, потому что он очень медленный, как объяснено в ссылке.

Есть enterдля некоторых процессоров.

Другие вопросы по тегам