Purpose of Stack

m Memory used to pass parameters to procedures (including C function calls)

m Memory used for allocating space for local variables

m Save return address in procedure calls

m Save registers to be preserved across procedure calls


Passing Parameters to Procedures


Call Frames


Setting up Call Frames


Reading Arguments


Reading Arguments


Get argument and Return


Procedure Calls (Steps Recap)

Caller: Before Call
n Save registers that are needed (for C functions save EAX, ECX, EDX)
n Push arguments, last first
n CALL the function

Callee:
n Save caller's EBP and set up callee stack frame (ENTER macro)
n Allocate space for local variables and temporary storage
n Save registers as needed (C functions save EBX, ESI, EDI)
n Perform the task
n Store return value in EAX
n Restore registers (C functions restore EBX, ESI, EDI)
n Restore caller's stack frame (LEAVE macro)
n Return

Caller: After Return
n POP arguments, get return value in EAX, restore registers (for C EAX, ECX, EDX)