.file "test.c"
.text
.globl fun
.type fun, @function
fun:
pushl %ebp // 此时ebp为main函数的堆栈帧,压栈保存
movl %esp, %ebp // ebp指向fun函数的堆栈帧
subl $16, %esp // esp下移16个字节,用于保存局部变量 sum
movl 12(%ebp), %eax // ebp加12,指向实参y,放入eax
movl 8(%ebp), %edx // ebp加8, 指向实参x,放入ebx
leal (%edx,%eax), %eax // x+y ,放入eax
addl 16(%ebp), %eax // ebp加16,指向实参z,然后加上x+y,放入eax
movl %eax, -4(%ebp) // 把x+y+z 放入申请的sum空间
movl -4(%ebp), %eax // 然后把求和值放入eax
leave
ret
.size fun, .-fun
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $28, %esp // esp下移28个字节,用于保存局部变量i
movl $3, 8(%esp) // 保存实参3
movl $2, 4(%esp) // 保存实参2
movl $1, (%esp) // 保存实参1
call fun // 调用函数fun,同时把下一个指针的地址压栈
movl %eax, -4(%ebp) // ebp减4,为i地址空间.eax保存了fun函数返回值
movl $0, %eax // return 0
leave
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.0 20090514 (Red Hat 4.4.0-6)"
.section .note.GNU-stack,"",@progbits
|