Какова цель EBP в следующем коде?

У меня есть два вопроса о реестре EBP.

Я понимаю ESP и EIP. Однако я не очень понимаю, почему можно использовать EBP.

В приведенном ниже коде я помещаю регистр EBP (который на самом деле 0000000) в стек. Затем я перемещаю адрес памяти стека в EBP, чтобы ESP и EBP имели одинаковые данные. Это пролог. Там есть некоторый код, который заканчивается системным вызовом. Затем я делаю обратное (эпилог), так как «отпуск» указывает, что я перемещаю EBP в ESP (эти значения одинаковы благодаря прологу), а затем извлекаю последнее значение стека (то есть EBP, равное 00000000) в EBP. Это дает EBP то же значение, что и до пролога.

Зачем кому-то это делать? Какой смысл? Пожалуйста, ответьте простым способом! Помните, что я не понимаю, что на самом деле делает EBP (указатель кадра).

РЕДАКТИРОВАТЬ: или это способ эффективного резервного копирования стека (ESP), когда в функции? Другими словами: программа может делать то же, что и со стеком, и в EBP всегда будет «оригинальный стек». Затем, когда программа заканчивается, EBP возвращается к тому, что было раньше. Это правильно? Если так, то эпилог - это просто рутина?

Также, AIUI, я могу использовать «enter» для замены «push ebp / mov ebp, esp». Тем не менее, когда я пытаюсь скомпилировать в nasm, я получаю сообщение «error: недопустимая комбинация кода операции и операндов». «войти» не. Какой правильный синтаксис?

Спасибо!

Example:

    push ebp
    mov, ebp, esp 

    [some code here]
    int 0x80

leave
ret