1

假设我void f(int a, int b, int c) { g(a, b, c); h(a, b, c); }在 x86 程序集中有这样的:

section .text
f:
    pop dword [res_1]
    call g          ; g(a, b, c)
    call h          ; h(a, b, c)
    push dword [res_1]
    ret
section .bss
res_1:
    resd 1

如果g遵循 cdecl 调用约定,我是否保证g不会更改堆栈中传递给它的参数?

4

1 回答 1

1

cdecl不需要被调用者保留它的参数,但大多数函数都需要。

编辑:(添加信息/回答评论)

(在问题被编辑后不相关)你的代码呢:被调用者也不需要保留fpu寄存器。

我更愿意相信Agner Fog,但您可以尝试在操作系统的 ABI 中查找信息

于 2014-01-26T20:24:55.753 回答