Страницы

Поиск по вопросам

суббота, 27 апреля 2019 г.

Зачем нужен ebp, если можно без него [закрыт]

Зачем нужно использовать регистр ebp при организации стека программы, если можно обойтись и без него(если нет хитрых асм вставок)? Почему нельзя по умолчанию использовать такую оптимизацию? С чем это связанно?


Ответ

Связано это в первую очередь с удобством. Никто не мешает вам адресоваться через регистр esp. Но при этом нужно постоянно держать в голове что сам стековый указатель в процессе выполнения кода может прыгать как угодно. И постоянно менять смещение для одних и тех же сущностей (а вам было бы удобно, если сейчас переменная называется foo, а через пару строк к ней нужно обращаться как к bar?). В совсем простеньких случаях это может иметь смысл, сам так делаю :) Например:
print_uint: pushad push dword [esp+36] push format_u ; "%u", 0 call printf pop eax pop eax popad ret 4
Да и компиляторы могут генерировать код без enter/leave при оптимизации. Но в общем случае это "микрооптимизация" (и то под вопросом), и не стоит она того геморроя, который за собой тащит.

Комментариев нет:

Отправить комментарий