【问题标题】:how to pass to printf more than 8 floating point values in assembly如何在汇编中将超过 8 个浮点值传递给 printf
【发布时间】:2016-09-06 11:51:39
【问题描述】:

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

据说前8个浮点参数通过xmm0-xmm15和寄存器rdi、rsi、rdx、rcx、r8、r9中的其他参数传递, 其余参数应按相反顺序入栈。

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

【问题讨论】:

    标签: assembly x86-64 abi


    【解决方案1】:

    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 和 标签 wiki。

    【讨论】:

    • 是权威稿,可以参考吗?扉页上写的名字很少,我以前从未听说过。
    • @BulatM。是的,该页面链接到标准文档的官方当前版本。例如“x86-64 psABI 修订版 252 可以从 here 下载”。不幸的是,该文档并不总是完整地记录编译器所依赖的所有内容,但它所说的一切都是准确的。我知道的唯一例外是zero/sign extending narrow integer args to 32-bit。
    • 一份 ABI 文档的副本曾经发布在 x86-64.org/documentation.html,但现在 x86-64.org 已经死了几个星期了。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多