117-描述函数调用的现场保护和现场恢复

博客介绍了主函数和子函数调用时的栈操作过程,包括入栈、现场保护、现场恢复等。还列举了push、pop等多种汇编指令的功能,强调栈空间是从上到下、从低地址向高地址,同时提醒要注意栈平衡、抬栈和压栈。

在这里插入图片描述

在这里插入图片描述
首先进入主函数,系统为主函数开辟一个栈帧,依次入栈 x=10(占4字节),y=20(占4字节),z=0(占4字节),执行到z=fun(x,y);调用子函数fun,开辟子函数fun的栈帧,先将y的值赋值给b,b=20入栈,然后将x的值赋值给a,a=10入栈,然后将主函数的栈底指针入栈,然后将主函数z=fun(x,y);后的指令地址也进行入栈,称为现场保护。然后将a+b的值30赋值给c,将c=30入栈。子函数此时执行到return c; 系统将30这个值寄存到eax寄存器中,然后将eax寄存器的值30赋值给主函数的z。然后将z=fun(x,y);的指令地址和主函数的栈底指针恢复给主函数,称为现场恢复,主函数执行printf("%d ",z); return 0;程序结束

在这里插入图片描述
push push src入栈指令 将源操作数src压入堆栈
pop pop dest 出栈指令 从栈顶弹出数据到dest
mov mov dest,src 将数据从src移动到dest
add 加法指令 add dest,src 在dest基础上加src
sub 减法指令 sub dest,src 在dest基础上减src
inc 加1指令 dec减1指令 inc dest在dest基础上加1 dec dest在dest基础上减1
not 取反运算指令 no

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值