Assembly Language & x86 Low-Level Systems Programming · Aula

Convenções de chamada: cdecl, stdcall e System V

Compare as principais convenções de chamada do x86 para que seu código Assembly e C concorde sobre onde ficam os argumentos, quem limpa a pilha e quais registradores são preservados.

Aula 4 de 413 etapas

Convenções de chamada: cdecl, stdcall e System V é uma aula grátis de Assembly Language & x86 Low-Level Systems Programming no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Assembly Language & x86 Low-Level Systems Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Assembly Language & x86 Low-Level Systems Programming inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

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
Grátis para começar

Aprenda Assembly com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
12
Aulas
48

Perguntas Frequentes

A aula “Convenções de chamada: cdecl, stdcall e System V” é grátis?

Sim — o texto completo de “Convenções de chamada: cdecl, stdcall e System V” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Assembly Language & x86 Low-Level Systems Programming, atualize para CoddyKit PRO. O curso de Assembly Language & x86 Low-Level Systems Programming inclui 4 aulas no total.

O que vou aprender em “Convenções de chamada: cdecl, stdcall e System V”?

Compare as principais convenções de chamada do x86 para que seu código Assembly e C concorde sobre onde ficam os argumentos, quem limpa a pilha e quais registradores são preservados. Você pratica Assembly Language & x86 Low-Level Systems Programming com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Assembly Language & x86 Low-Level Systems Programming?

Nenhuma experiência prévia é necessária. Assembly Language & x86 Low-Level Systems Programming no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Convenções de chamada: cdecl, stdcall e System V”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Assembly Language & x86 Low-Level Systems Programming?

Sim. Cada aula de Assembly Language & x86 Low-Level Systems Programming inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Chamando Assembly a partir de C
  2. Chamando C a partir de Assembly
  3. Técnicas de Programação em Múltiplas Linguagens
  4. Convenções de chamada: cdecl, stdcall e System V
← Voltar para Assembly Language & x86 Low-Level Systems Programming