2014-01-26 31 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

相關問題