Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1016164
  • 博文数量: 146
  • 博客积分: 3444
  • 博客等级: 中校
  • 技术积分: 1602
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-21 15:18
文章分类

全部博文(146)

文章存档

2014年(9)

2013年(3)

2012年(6)

2011年(44)

2010年(38)

2009年(46)

分类: C/C++

2009-06-05 18:49:49

int getnum(int a, int b,int c){ 
 int ee;
 c=a+b;
 return  c ; 
 }
 
getnum:
 pushl %ebp
 movl %esp, %ebp
 subl $16, %esp //这里总是16的倍数,如是局部变量多,就会变成subl $32, %esp,subl $48, %esp
 movl 12(%ebp), %eax
 addl 8(%ebp), %eax //为什么是8不是4呢?因为前面第一句pushl %ebp的时候esp又增加了4,否则的话第一个参数的上面就只有一个eip,那4(%ebp),就可以取到第一个参数了。
 movl %eax, 16(%ebp)
 movl 16(%ebp), %eax
 leave  //相当于movl %ebp,%esp  ; pop %ebp
 ret
 
阅读(1420) | 评论(0) | 转发(0) |
0

上一篇:C调用约定

下一篇:gcc 编译过程(转)

给主人留下些什么吧!~~