汇编中的堆栈传参
什么是堆栈传参?
顾名思义,就是调用堆栈进行参数传递。
什么时候我们会用到堆栈传参?
当我们在执行函数调用时,寄存器不够用的时候,我们可以使用堆栈传参,比如说,我们要计算任意10个参数相加的和,如果按照之前文章的办法,我们会使用mov这个指令把参数传递到寄存器中进行计算,但是通用寄存器只有八个,我们现在要传递十个参数,这时候就可以使用堆栈传参了。
具体实现方法
直接上分析图:
- PUSH 压入参数
- 运行到CALL时调用函数
- 从堆栈把参数传递给寄存器EAX,相加计算参数的和
- 返回结果到寄存器EAX
这里函数运行多加4是因为调用CALL的时候程序会把CALL下一行的地址压入栈顶以便RETN返回,所以得多加4,这里压入10个数据太麻烦,所以简化了一下,不过具体实现方法就是如图所示。