Зачем нужно использовать регистр 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 при оптимизации. Но в общем случае это "микрооптимизация" (и то под вопросом), и не стоит она того геморроя, который за собой тащит.
Комментариев нет:
Отправить комментарий