我正在学习汇编语言。到底什么是参数推序?我知道参数是如何插入堆栈的,但是左和右部分是什么意思?左边还是右边?
或者这仅仅是与命令的语义编写方式有关,即:
mov ebp, esp ;esp is moved into ebp, right to left.
这是正确的还是有人可以启发我?
最佳答案
处理器不知道“函数参数”。因此,当您想要编写 f(a,b,c)
时,您确实需要将参数推到“某个地方”。
如何以及在哪里插入它们只是惯例。我知道在大多数 x86 机器上,函数参数从右到左压入堆栈,即首先是 c,然后是 b,然后是 a。
push c
push b
push a
call f
在 x86 上,插入堆栈会减少堆栈“顶部”一个字。已经压入了三个字,还有返回地址,所以被调用的函数可以用top + 1*W
表示a
,top + 2*W
> 代表 b
,top + 3*W
代表 c
。
您也可以建立一个约定:前两个参数位于寄存器 ebx 和 ecx 中,其余参数位于堆栈中。只要调用者和被调用者同意,就可以了。
关于assembly - 什么是参数推序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141574/