汇编中的堆栈传参

什么是堆栈传参?

这个堆栈传参,就好比你想吃糖,可是你左边的口袋里已经装满了瓜子,所以你只能,先把糖放入右边口袋,当你需要吃糖的时候。在从右边口袋里把糖取出来,就这么简单,这就是堆栈传参,左边口袋是通用寄存器,右边口袋就是堆栈。糖果就是参数,向口袋放糖和从口袋拿糖就是调用堆栈,吃糖这个动作就是执行程序。

什么时候我们会用到堆栈传参?

当我们在执行函数调用时,寄存器不够用的时候,我们可以使用堆栈传参,比如说,我们要计算任意10个参数相加的和,如果按照之前文章的办法,我们会使用mov这个指令把参数传递到寄存器中进行计算,但是通用寄存器只有八个,我们现在要传递十个参数,这时候就可以使用堆栈传参了。

具体实现方法

直接上分析图:

  • PUSH 压入参数(放糖)
  • 运行到CALL时调用函数(打算吃糖了)
  • 从堆栈把参数传递给寄存器EAX,相加计算参数的和(拿糖)
  • 返回结果到寄存器EAX(吃糖)

在这里插入图片描述
这里函数运行多加4是因为调用CALL的时候程序会把CALL下一行的地址压入栈顶以便RETN返回,所以得多加4,这里压入10个数据太麻烦,所以简化了一下,不过具体实现方法就是如图所示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值