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

Assembly 在cdecl中,被调用方是否需要保留传递给它的参数?,assembly,parameters,cdecl,Assembly,Parameters,Cdecl,假设我在x86程序集中有void f(inta,intb,intc){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调用约定,我是否可以保

假设我在x86程序集中有
void f(inta,intb,intc){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
不会更改堆栈中传递给它的参数?

cdecl
不要求被调用方保留其参数,但大多数函数都会这样做

编辑(在评论中添加信息/答案)

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


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

你是对的。编辑以确认这一点。您有语句的源吗?cdecl在堆栈帧上通过值传递参数值的副本。无论调用方是否“保留”它,在调用之后都会丢弃副本。