【发布时间】:2016-09-06 11:51:39
【问题描述】:
正在阅读有关汇编的内容,部分是关于在汇编中调用例程的约定(尤其是 Linux)。
据说前8个浮点参数通过xmm0-xmm15和寄存器rdi、rsi、rdx、rcx、r8、r9中的其他参数传递, 其余参数应按相反顺序入栈。
如果我有超过 8 个浮点参数和超过 6 个其他参数,应该以什么顺序将它们推送到堆栈?第一个不适合 8 fp 的浮点值。寄存器或其他不适合 6 个寄存器的参数?
【问题讨论】:
正在阅读有关汇编的内容,部分是关于在汇编中调用例程的约定(尤其是 Linux)。
据说前8个浮点参数通过xmm0-xmm15和寄存器rdi、rsi、rdx、rcx、r8、r9中的其他参数传递, 其余参数应按相反顺序入栈。
如果我有超过 8 个浮点参数和超过 6 个其他参数,应该以什么顺序将它们推送到堆栈?第一个不适合 8 fp 的浮点值。寄存器或其他不适合 6 个寄存器的参数?
【问题讨论】:
ABI 文档的哪一部分不清楚 (https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI)?
您是否在问如果混合使用 int 和 fp args 会发生什么情况,并且您用完了两种类型的 arg 传递寄存器?
IIRC,它们只是以相反的顺序进入堆栈,最后一个 arg 位于最高地址,第一个非寄存器 arg 位于返回地址上方。这就像在 32 位代码中总是在堆栈上传递参数一样。
另请参阅 http://wiki.osdev.org/System_V_ABI 和 x86 标签 wiki。
【讨论】: