Uso do Registro
A arquitetura do x64 sustenta 16 registros de uso geral (a partir de agora chamados de registros de inteiros), bem como para 16 registros XMM/YMM disponíveis para uso de ponto flutuante.Os registros voláteis são registros a partir do zero presumidos pelo chamador para serem destruídos em uma chamada.Os registros não voláteis são obrigados a manter seus valores em uma chamada de função e devem ser salvos pelo receptor da chamada se usados.
A tabela a seguir descreve como cada registro é usado nas chamadas de função:
Registro |
Status |
Uso |
RAX |
Volátil |
Registro de valores retornados |
RCX |
Volátil |
Primeiro argumento inteiro |
RDX |
Volátil |
Segundo argumento inteiro |
R8 |
Volátil |
Terceiro argumento inteiro |
R9 |
Volátil |
Quarto argumento inteiro |
R10, R11 |
Volátil |
Deve ser preservado, conforme a necessidade do chamador; usado em instruções syscall/sysret |
R12, R15 |
Não volátil |
Deve ser preservado pelo receptor da chamada |
RDI |
Não volátil |
Deve ser preservado pelo receptor da chamada |
RSI |
Não volátil |
Deve ser preservado pelo receptor da chamada |
RBX |
Não volátil |
Deve ser preservado pelo receptor da chamada |
RBP |
Não volátil |
Pode ser usado como um ponteiro de quadro; deve ser preservado pelo receptor da chamada |
RSP |
Não volátil |
Ponteiro de pilha |
XMM0, YMM0 |
Volátil |
Primeiro argumento FP; primeiro argumento de tipo vetorial quando __vectorcall for usado |
XMM1, YMM1 |
Volátil |
Segundo argumento FP; segundo argumento de tipo vetorial quando __vectorcall for usado |
XMM2, YMM2 |
Volátil |
Terceiro argumento FP; terceiro argumento de tipo vetorial quando __vectorcall for usado |
XMM3, YMM3 |
Volátil |
Quarto argumento FP; quarto argumento de tipo vetorial quando __vectorcall for usado |
XMM4, YMM4 |
Volátil |
Deve ser preservado conforme necessário pelo chamador; quinto argumento de tipo vetorial quando __vectorcall for usado |
XMM5, YMM5 |
Volátil |
Deve ser preservado conforme necessário pelo chamador; sexto argumento de tipo vetorial quando __vectorcall for usado |
XMM6:XMM15, YMM6:YMM15 |
Não volátil (XMM), Volátil (metade superior de YMM) |
Deve ser preservado conforme necessário pelo receptor da chamada.Os registros YMM devem ser preservados conforme necessário pelo chamador. |