int add(int x,int y)
{
return x+y;
}
int main()
{
int i=1,j=2;
int x=add(i,j);
return 0;
}
相应的汇编代码为
main:
.LFB1:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $1, -12(%ebp)
movl $2, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl -12(%ebp), %eax
movl %eax, (%esp)
call add
movl %eax, -4(%ebp)
movl $0, %eax
leave
ret
本来我是调用add(i,j)结果汇编代码里面是
movl $1, -12(%ebp) 先存变量
movl -12(%ebp), %eax将变量的值赋给寄存器eax
movl %eax, (%esp) 将eax的值赋给esp所指向的地址
#include<stdio.h>
int add(int x,int y)
{
return x+y;
}
int main()
{
int i=1,j=2;
int x=add(1,2);
return 0;
}
main:
.LFB1:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $1, -12(%ebp)
movl $2, -8(%ebp)
movl $2, 4(%esp)
movl $1, (%esp)
call add
movl %eax, -4(%ebp)
movl $0, %eax
leave
ret
相反,这里不需要,因为调用函数的时候是直接将实参放进函数表达式中去的