汇编中的堆栈传参

什么是堆栈传参?

顾名思义,就是调用堆栈进行参数传递。

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

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

具体实现方法

直接上分析图:

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

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