Сборка x86: зачем нужны стековые рамки?
В большинстве примеров кода сборки x86 (особенно NASM), которые я вижу (даже в тех, которые генерируются GCC), я вижу то, что называется «установкой стекового фрейма». Нравится:
main:
/*setting the stack frame*/
push ebp
mov ebp,esp
...
code goes here
...
/*removing the stack frame*/
mov esp, ebp
pop ebp
У меня есть 3 вопроса об этой практике:
Если мой код не касается стека, то установка / удаление фрейма стека, как описано выше, совершенно бесполезна, верно?
Даже если мой код использует стек, до тех пор, пока вы выталкиваете все, что я нажимаю (оставляя стек в том виде, в котором он был по существу), то снова установка фрейма стека совершенно бесполезна, верно?
На мой взгляд, единственная цель этого состоит в том, чтобы сохранить значение ESP, чтобы я мог поиграть с ним в своем коде, не беспокоясь о том, чтобы что-то испортить, и как только я закончу, я просто восстановлю его первоначальное значение. Это цель установки стекового фрейма или я что-то упустил?
Спасибо