Assembly 在cdecl中,被调用方是否需要保留传递给它的参数?
假设我在x86程序集中有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调用约定,我是否可以保
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在堆栈帧上通过值传递参数值的副本。无论调用方是否“保留”它,在调用之后都会丢弃副本。