概述
源代码如下:
#include <stdio.h> int add(int x,int y) { int t = x + y; return t; } int main(void) { int x=4, y=1; return add(x,y); }
经过 gcc -S hello.c
产生汇编代码如下:
add: pushl %ebp movl %esp, %ebp subl $16, %esp movl 12(%ebp), %eax movl 8(%ebp), %edx leal (%edx,%eax), %eax movl %eax, -4(%ebp) movl -4(%ebp), %eax leave ret main: pushl %ebp //其实有两步,subl $4 %esp,mov %ebp (%esp),保存当前的栈低 movl %esp, %ebp //得到新栈低,将当前栈顶赋予栈低 subl $24, %esp movl $4, -4(%ebp) //x入栈 movl $1, -8(%ebp) //y入栈 movl -8(%ebp), %eax movl %eax, 4(%esp) //实参x入栈 movl -4(%ebp), %eax movl %eax, (%esp) //实参y入栈 call add leave ret
若采用优化 gcc -O2 -S hello.c
产生汇编代码如下:
add: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax addl 8(%ebp), %eax popl %ebp ret main: pushl %ebp //保存当前栈低 movl $5, %eax movl %esp, %ebp //得到新栈低 popl %ebp //过程调用结束,恢复旧栈低 ret
转载于:https://www.cnblogs.com/GODYCA/archive/2012/12/29/2839398.html
最后
以上就是直率香烟为你收集整理的汇编代码看过程调用的全部内容,希望文章能够帮你解决汇编代码看过程调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复