2014-01-26 32 views
1

说我有void f(int a, int b, int c) { g(a, b, c); h(a, b, c); }在x86汇编这样的:在cdecl中,是否需要保存传递​​给它的参数的被调用者?

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

+0

CDECL经过值与参数值的堆栈帧的副本。主叫方是否“保留”它并不重要,无论如何,该副本在通话后都会被丢弃。 –

回答

1

cdecl不需要被调用者来保存它的参数,但大多数函数都这样做。

编辑:(添加信息/答复意见)

你的代码是什么(这个问题已被编辑后不相关):不需要被叫要么保留fpu寄存器。

我宁愿相信Agner Fog它,但你可以尝试寻找信息在你的操作系统的ABI

+0

你说得对。编辑承认这一点。你有声明来源吗? – Arcinde

+0

@ user49164已更新 – qwm

相关问题