29.8.4. x86 ENTER and LEAVE instructions

These instructions were designed to allocate and deallocate function stack frames in the prologue and epilogue: https://stackoverflow.com/questions/5959890/enter-vs-push-ebp-mov-ebp-esp-sub-esp-imm-and-leave-vs-mov-esp-ebp

ENTER appears obsolete and is kept mostly for backwards compatibility. LEAVE is still emitted by some compilers.

ENTER A, B is basically equivalent to:

push %rbp
mov %rsp, %rbp
sub %rsp, A

which implies an allocation of:

  • one dword to remember EBP

  • A bytes for local function variables

I didn’t have the patience to study the B parameter, and it does not seem to be used often: https://stackoverflow.com/questions/26323215/do-any-languages-compilers-utilize-the-x86-enter-instruction-with-a-nonzero-ne

LEAVE is equivalent to:

mov %rbp, %rsp
pop %rbp

which restores RSP and RBP to the values they had before the prologue.