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