2014-01-26 3 views
1

내가 이런 식의 x86 어셈블리에 void f(int a, int b, int c) { g(a, b, c); h(a, b, c); } 말해봐 : g가 호출 규칙을 cdecl 규칙을 다음과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 스택에 전달 된 매개 변수를 변경하지 않습니다 보장 무엇입니까?

+0

cdecl 규칙 스택 프레임의 인수 값의 사본을 값으로 전달 운영 체제의 ABI를에서 정보를 찾기 위해 시도 할 수 있습니다. 호출자가 "보존"하는지 여부는 중요하지 않으며 호출 후 호출이 무시됩니다. –

답변

1

cdecl은 인수를 유지하기 위해 호출 수신자를 필요로하지 않지만 대부분의 기능이이를 수행합니다.

편집 : (의견 정보/대답을 추가)

코드에 대해 어떻게 (질문 편집 한 후 관련이없는) : 호출 수신자가 하나 fpu 레지스터를 보존 할 필요가 없습니다.

나는 그것으로 Agner Fog을 믿고 선호하지만, 당신은

+0

당신 말이 맞아요. 이것을 인정하도록 편집 됨. 성명서 원본이 있습니까? – Arcinde

+0

@ user49164 업데이트 됨 – qwm