如何在汇编中将超过 8 个浮点值传递给 printf
how to pass to printf more than 8 floating point values in assembly
正在阅读有关汇编的内容,部分内容是关于汇编中调用例程的约定(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 刚好在 return 地址之上。这就像在 32 位代码中一样,args 总是在堆栈上传递。
另请参阅 http://wiki.osdev.org/System_V_ABI, and the x86 标签 wiki。
正在阅读有关汇编的内容,部分内容是关于汇编中调用例程的约定(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 刚好在 return 地址之上。这就像在 32 位代码中一样,args 总是在堆栈上传递。
另请参阅 http://wiki.osdev.org/System_V_ABI, and the x86 标签 wiki。