0Pricing
Assembly Language & x86 Low-Level Systems Programming · Lekcja

Konwencje wywołań: cdecl, stdcall i System V

Porównaj najważniejsze konwencje wywołań x86, aby kod asemblera i C zgodnie ustalały, gdzie trafiają argumenty, kto czyści stos i które rejestry są zachowywane.

Konwencje wywołań: cdecl, stdcall i System V to bezpłatna lekcja Assembly Language & x86 Low-Level Systems Programming na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Assembly Language & x86 Low-Level Systems Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Assembly Language & x86 Low-Level Systems Programming zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Why Conventions Matter

For assembly and C to interoperate, both sides must agree on a calling convention: how arguments are passed, who cleans the stack, and which registers must be preserved.

Argument Passing

Conventions differ on where arguments go: on the stack, in registers, or a mix. Getting this wrong corrupts data silently.

cdecl

cdecl (32-bit, the C default) pushes arguments on the stack right to left, and the caller cleans them up after the call.

push arg2
push arg1
call func
add esp, 8     ; caller cleans

stdcall

stdcall also passes on the stack right to left, but the callee cleans the stack via ret n. The Win32 API uses it.

ret 8          ; callee cleans 8 bytes

Caller vs Callee Cleanup

The key contrast:

  • cdecl: caller cleans, supports variadic functions
  • stdcall: callee cleans, smaller call sites

System V AMD64

The 64-bit Linux/macOS convention passes the first six integer args in registers: RDI, RSI, RDX, RCX, R8, R9; extras go on the stack.

mov rdi, arg1
mov rsi, arg2
call func

Microsoft x64

64-bit Windows uses a different register set: RCX, RDX, R8, R9 for the first four args, plus 32 bytes of shadow space.

Return Values

Integer and pointer results come back in EAX (32-bit) or RAX (64-bit); floating point uses XMM0 in 64-bit conventions.

Preserved vs Scratch Registers

Each convention designates callee-saved registers (the callee must restore them) and caller-saved ones (free to clobber). Violating this corrupts the caller.

Stack Alignment

System V requires the stack to be 16-byte aligned at a call. Forgetting this crashes code that uses SSE instructions.

Matching the Compiler

Always declare functions on the C side with the matching convention attribute (e.g. __stdcall) so both halves agree.

Quick Check

Test your understanding of calling conventions.

Recap

You learned calling conventions:

  • cdecl: stack args, caller cleans, supports varargs
  • stdcall: stack args, callee cleans
  • System V x64: args in RDI,RSI,RDX,RCX,R8,R9
  • Return in EAX/RAX; respect callee-saved registers and alignment

Często zadawane pytania

Czy lekcja „Konwencje wywołań: cdecl, stdcall i System V” jest bezpłatna?

Tak — pełny tekst „Konwencje wywołań: cdecl, stdcall i System V” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Assembly Language & x86 Low-Level Systems Programming, przejdź na CoddyKit PRO. Kurs Assembly Language & x86 Low-Level Systems Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „Konwencje wywołań: cdecl, stdcall i System V”?

Porównaj najważniejsze konwencje wywołań x86, aby kod asemblera i C zgodnie ustalały, gdzie trafiają argumenty, kto czyści stos i które rejestry są zachowywane. Ćwiczysz Assembly Language & x86 Low-Level Systems Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Assembly Language & x86 Low-Level Systems Programming?

Nie wymagamy żadnego doświadczenia. Assembly Language & x86 Low-Level Systems Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Konwencje wywołań: cdecl, stdcall i System V”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Assembly Language & x86 Low-Level Systems Programming?

Tak. Każda lekcja Assembly Language & x86 Low-Level Systems Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wywoływanie asemblera z języka C
  2. Wywoływanie języka C z asemblera
  3. Techniki programowania w wielu językach
  4. Konwencje wywołań: cdecl, stdcall i System V
← Powrót do Assembly Language & x86 Low-Level Systems Programming