assembly - 什么是参数推序

标签 assembly x86 arguments calling-convention stack-memory

我正在学习汇编语言。到底什么是参数推序?我知道参数是如何插入堆栈的,但是左和部分是什么意思?左边还是右边?

或者这仅仅是与命令的语义编写方式有关,即:

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表示atop + 2*W > 代表 btop + 3*W 代表 c

您也可以建立一个约定:前两个参数位于寄存器 ebx 和 ecx 中,其余参数位于堆栈中。只要调用者和被调用者同意,就可以了。

关于assembly - 什么是参数推序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141574/

相关文章:

assembly - 为什么要在 FreeBSD 中重置堆栈指针寄存器?

c++ - API 更改时函数参数的常量正确性

R从函数调用中获取参数名称

linux - 移动 x86_64 linux 程序的虚拟内存空间以方便 ROP 探索

performance - 英特尔 Broadwell 处理器出现明显的 FMA 性能异常

linux - x86 GNU 汇编程序奇怪的更改段错误

c - 从 CreateProcess 获取 PROCESS_INFORMATION

assembly - 跳转到指令中间 - 在 IA-32 中

performance - 为什么一个循环迭代中的依赖不能和上一个一起执行

bash - 传递到 mvn exec :java 时保留参数间距等