Почему нет сопутствующей инструкции, чтобы уйти?
Просто быстро, почему на 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). Однако он редко используется, потому что он очень медленный, как объяснено в ссылке.