Сборка 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, чтобы я мог поиграть с ним в своем коде, не беспокоясь о том, чтобы что-то испортить, и как только я закончу, я просто восстановлю его первоначальное значение. Это цель установки стекового фрейма или я что-то упустил?

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос