32 位 cdecl

cdecl 是一個 Windows 32 位函式呼叫約定,它非常類似於許多 POSIX 作業系統上使用的呼叫約定(在 i386 System V ABI 中有記錄 )。其中一個不同之處在於返回小結構。

引數

引數在堆疊上傳遞,第一個引數位於呼叫時堆疊的最低地址(最後推送,因此它在函式入口處的返回地址之上)。呼叫者負責在呼叫後從堆疊中彈出引數。

回報價值

對於標量返回型別,返回值放在 EAX 中,或 EDX:EAX 放置為 64 位整數。浮點型別在 st0(x87) 中返回。返回更大型別的結構是通過引用完成的,指標作為隱式的第一個引數傳遞。 (此指標在 EAX 中返回,因此呼叫者不必記住它傳遞的內容)。

儲存和 Clobbered 暫存器

受呼叫者必須保留 EBX,EDI,ESI,EBP 和 ESP(以及 FP / SSE 舍入模式設定),以便呼叫者可以依賴那些未被呼叫改變的暫存器。

所有其他暫存器(EAX,ECX,EDX,FLAGS(除 DF 之外),x87 和向量暫存器)可由被呼叫者自由修改; 如果呼叫者希望在函式呼叫之前和之後保留一個值,它必須將值儲存在別處(例如在一個儲存的暫存器中或堆疊上)。