在cdecl中,被调用者是否需要保留传递给它的参数?

时间:2014-01-26 20:04:47

标签: assembly parameters cdecl

假设我在x86程序集中有void f(int a, int b, int c) { g(a, b, c); h(a, b, c); },如下所示:

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不会改变在堆栈中传递给它的参数吗?

1 个答案:

答案 0 :(得分:1)

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

修改 :(添加评论信息/答案)

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

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