Why do we push ebp
as the first action in the Callee of an Assembly function?
I understand that then we use mov edi, [ebp+8]
to get the passed in variables, but our esp
is already pointing to return address of the Caller function. We can easily access the passed in variables with mov edi, [esp+4]
or if we pushed the Callee registers, then mov edi, [esp+16]
.
So, why have that extra register in the cpu (the ebp
) which you later have to manage in functions? i.e.
push ebp
mov ebp, esp
...
mov esp, ebp
pop ebp