قراردادهای فراخوانی اکس۸۶
فهرست قراردادهای فراخوانی معماری x86

این لیستی از قراردادهای فراخوانی x86 است. این قراردادها عمدتاً برای کامپایلرهای C / C ++ (به ویژه بخش ۶۴ بیتی در زیر) تعریف شده‌اند و در نتیجه موارد بسیار خاصی در نظر گرفته شده‌است. زبان‌های دیگر ممکن است از فرمت‌ها و قراردادهای دیگر در پیاده‌سازی خود استفاده کنند.
| معماری | اسم قراداد فراخوانی | کامپایلرِ سیستم عامل | پارامترها در ثبّات | دستور پارامتر در پشته | پشته پاک می‌شود به‌وسیلهٔ | توضیحات |
| --- | --- | --- | --- | --- | --- | --- |
| ۸۰۸۶ | cdecl |  |  | (RTL (C | Caller |  |
| ۸۰۸۶ | Pascal |  |  | LTR ((Pascal | Callee |  |
| ۸۰۸۶ | fastcall | Microsoft (non-member) | AX, DX, BX | LTR (Pascal) | Callee | Return pointer in BX. |
| ۸۰۸۶ | fastcall | Microsoft (member function) | AX, DX | LTR (Pascal) | Callee | “this” on stack low address. Return pointer in AX. |
| ۸۰۸۶ | fastcall | Turbo C | AX, DX, BX | LTR (Pascal) | Callee | “this” on stack low address. Return pointer on stack high address. |
| ۸۰۸۶ |  | Watcom | AX, DX, BX, CX | (RTL (C | Callee | Return pointer in SI. |
| IA-32 | cdecl | GCC |  | (RTL (C | Caller | When returning struct/class, the calling code allocates space and passes a pointer to this space via a hidden parameter on the stack. The called function writes the return value to this address. |
| IA-32 | cdecl | Microsoft |  | (RTL (C | Caller | When returning struct/class, Plain old data (POD) return values 32 bits or smaller are in the EAX register  POD return values 33-64 bits in size are returned via the EAX:EDX registers.  Non-POD return values or values larger than 64-bits, the calling code will allocate space and passes a pointer to this space via a hidden parameter on the stack. The called function writes the return value to this address. |
| IA-32 | stdcall | Microsoft |  | (RTL (C | Callee |  |
| IA-32 |  | GCC |  | (RTL (C | Hybrid | Stack aligned on 16 bytes boundary. |
| IA-32 | fastcall | Microsoft | ECX, EDX | (RTL (C | Callee | Return pointer on stack if not member function. |
| IA-32 | fastcall | GCC | ECX, EDX | (RTL (C | Callee |  |
| IA-32 | ثبّات | Delphi و Free Pascal | EAX, EDX, ECX | LTR (Pascal) | Callee |  |
| IA-32 | thiscall | Windows (Microsoft Visual C++) | ECX | (RTL (C | Callee | Default for member functions. |
| IA-32 | vectorcall | Windows (Microsoft Visual C++) |  | (RTL (C |  |  |
|  | Watcom compiler | EAX, EDX, EBX, ECX | (RTL (C | Callee | Return pointer in ESI. |  |
| x86-64 | Microsoft x64 calling convention | Windows (Microsoft Visual C++, GCC, Intel C++ Compiler, Delphi), UEFI | RCX/XMM0, RDX/XMM1, R8/XMM2, R9/XMM3 | (RTL (C | Caller | Stack aligned on 16 bytes. 32 bytes shadow space on stack. The specified 8 registers can only be used for parameters 1 through 4. For C++ classes, the hidden "this" parameter is the first parameter, and is passed in RCX. |
| x86-64 | vectorcall | Windows (Microsoft Visual C++) | RCX/XMM0, RDX/XMM1, R8/XMM2, R9/XMM3 + XMM0-XMM5/YMM0-YMM5 | (RTL (C | Caller |  |
| x86-64 | System V AMD64 ABI | Solaris, Linux, BSD, OS X (GCC, Intel C++ Compiler) | RDI, RSI, RDX, RCX, R8, R9, XMM0–7 | (RTL (C | Caller | پشته در ۱۶ بایت محدوده شده‌است. ۱۲۸ بایت محدوده قرمز زیر پشته هستند. رابط هسته از RDI, RSI, RDX, R10، R8 و R9 استفاده می‌کند. |