Assume that each subroutine has 3 32-bit integer parameters Assume that we have 200 such subroutines. We need to allocate 200*3 = 600 bytes for all the subroutines. =========================================== XYZ <- esp =========================================== movb $'J', %al push %ax XYZ <'J'> <- esp ========================================== call putchar XYZ <'J'> <- esp ========================================= [in putchar] push %eax push %ebx push %ecx push %edx XYZ <'J'> <- esp ======================================== movl $4,%eax movl $1,%ebx movl %esp,%ecx XYZ <'J'> <- esp <- ecx ======================================= addl $4+4+4+4+4,%ecx XYZ <'J'> <- ecx <- esp ====================================== movl $1,%edx int $0x80 XYZ <'J'> <- ecx <- esp ===================================== pop %edx XYZ <'J'> <- ecx <- esp ===================================== pop %ecx pop %ebx pop %eax XYZ <'J'> <- esp ==================================== ret XYZ <'J'> <- esp ================================== addl $2,%esp XYZ <- esp <'J'> ================================= After we use a frame pointer (13.2) =========================================== XYZ <- esp =========================================== movb $'J', %al push %ax XYZ <'J'> <- esp ========================================== call putchar XYZ <'J'> <- esp ========================================= (in the subroutine putchar) push %ebp XYZ <'J'> <- esp ======================================== movl %esp,%ebp XYZ <'J'> <- esp <- ebp ======================================== push %eax push %ebx push %ecx push %edx XYZ <'J'> <- ebp <- esp ====================================== movl $4,%eax movl $1,%ebx movl %ebp,%ecx XYZ <'J'> <- ebp <- ecx <- esp ======================================= addl $4+4,%ecx XYZ <'J'> <- ecx <- ebp <- esp ==================================== movl $1,%edx int $0x80 pop %edx pop %ecx pop %ebx pop %eax XYZ <'J'> <- ebp <- esp ===================================== pop %ebp XYZ <'J'> <- esp ==================================== ret XYZ <'J'> <- esp =================================== addl $2,%esp XYZ <- esp <'J'> ===================================