# # File: local1_mod.s # Author: William T Krieger, Oct 2003 # # My modification of the local1 test case. # It demonstrates using local variables. .text FMT0: .ascii "Sum is %d\0" .align 4 # # Function: _main() # void _main() # Demonstrates how to setup/use local variables. .globl _main _main: pushl %ebp # enter _main() movl %esp, %ebp pushl $25 # call sum( 75, 25) pushl $75 call sum addl $8,%esp pushl %eax # call printf( fmt, %eax ret value) pushl $FMT0 call _printf addl $8,%esp movl %ebp, %esp # exit _main() pop %ebp ret # # Function: sum() # int sum( int p1, int p2) # The return value is p1 + p2. .globl sum sum: pushl %ebp # enter sum() movl %esp, %ebp subl $4,%esp # adjust stack for local vars # int tmp = -4(%ebp); movl 8(%ebp),%eax # %eax = p1 movl 12(%ebp),%edx # %edx = p2 addl %eax,%edx # %edx = %edx + %eax movl %edx,-4(%ebp) # tmp = %ecx movl -4(%ebp),%eax # %eax return value = tmp movl %ebp, %esp # exit sum() pop %ebp ret