Assembly x86-64Convenções
Convenção de chamada
System V (Linux) × Microsoft x64 (Windows)
Convenções de chamada
Ao chamar uma função (não uma syscall), cada sistema segue uma convenção diferente sobre em quais registradores os argumentos entram e onde o valor volta. Linux usa a System V AMD64 ABI; Windows usa a Microsoft x64.
System V AMD64Linux · macOS · BSD
Argumentos (em ordem)
1rdi2rsi3rdx4rcx5r86r9
Retornorax (e rdx para 128 bits)
- Argumentos além do 6º vão para a pilha (da direita para a esquerda).
- Ponto flutuante usa xmm0–xmm7 para argumentos e xmm0/xmm1 para retorno.
- Não há shadow space; a pilha deve estar alinhada em 16 bytes na chamada.
Microsoft x64Windows
Argumentos (em ordem)
1rcx2rdx3r84r9
Retornorax
- Apenas 4 registradores de argumento; o 5º em diante vai para a pilha.
- O chamador reserva 32 bytes de shadow space (home space) antes do call.
- rsi e rdi são preservados (callee-saved) — ao contrário do System V.