2013-07-05 3 views
0

Просто быстро, почему нет инструкции компаньона, чтобы выйти на x86? Таким образом,Почему нет инструкции для компаньона?

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

может стать:

enter #or something 
pushl $3 
leave 
ret 

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

+1

первый код быстрее. см. http://stackoverflow.com/questions/5959890/enter-vs-push-ebp-mov-ebp-esp-sub-esp-imm-and-leave-vs-mov-esp-ebp – qwr

ответ

3

Фактически там является a enter instruction. Относительно того, почему он не видит особый смысла, "Intel® 64 and IA-32 Architectures Optimization Reference Manual" предлагает подсказку:

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

1

Для некоторых процессоров имеется enter.

+1

IIRC, оно было введено на x86 с процессорами 80186/80188. –

3

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

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