Assembly x86-64Convenções
Volátil × preservado
Quem o chamador salva e quem a função restaura
Volátil × preservado
Um registrador volátil (caller-saved) pode ser destruído por uma função chamada — se você precisa do valor depois, salve-o antes. Um preservado (callee-saved) tem que ser restaurado pela função antes de retornar. As duas convenções discordam em pontos importantes — em especial rsi e rdi, voláteis e usados como argumento no Linux, mas preservados no Windows.
| Registrador | System V (Linux) | Microsoft x64 (Windows) |
|---|---|---|
| rax | Retorno · volátil | Retorno · volátil |
| rdi | 1º argumento · volátil | Preservado |
| rsi | 2º argumento · volátil | Preservado |
| rdx | 3º argumento · volátil | 2º argumento · volátil |
| rcx | 4º argumento · volátil | 1º argumento · volátil |
| r8 | 5º argumento · volátil | 3º argumento · volátil |
| r9 | 6º argumento · volátil | 4º argumento · volátil |
| r10 / r11 | Volátil (r10 = 4º arg na syscall) | Volátil |
| rbx | Preservado | Preservado |
| rbp | Preservado (frame pointer) | Preservado (frame pointer) |
| rsp | Ponteiro de pilha (preservado) | Ponteiro de pilha (preservado) |
| r12–r15 | Preservado | Preservado |