如何在汇编中将超过 8 个浮点值传递给 printf

how to pass to printf more than 8 floating point values in assembly

正在阅读有关汇编的内容,部分内容是关于汇编中调用例程的约定(Linux,尤其是)。

据说前8个浮点参数是通过xmm0-xmm15和寄存器rdirsirdx中的其他参数传递的, rcx, r8, r9, 其余参数倒序入栈

如果我有超过 8 个浮点参数和超过 6 个其他参数怎么办,应该以什么顺序将它们压入堆栈?第一个不适合 8 fp 的浮点值。寄存器或其他不适合 6 个寄存器的参数?

A​​BI 文档的哪一部分不清楚 (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 标签 wiki。