Uso de registros
Actualización: noviembre 2007
La arquitectura x64 proporciona recursos para 16 registros de uso general (de ahora en adelante, se les llamará registros de tipo entero) así como 16 registros de XMM disponibles para el uso de punto flotante. Los registros variables son registros improvisados que el llamador supone que se van a destruir durante una llamada. Los registros no variables deben retener sus valores durante una llamada a una función y el destinatario debe guardarlos si los utiliza.
La tabla siguiente describe cómo se utiliza cada registro durante las llamadas a funciones:
Register |
Estado |
Uso |
RAX |
Variable |
Registro de valor devuelto |
RCX |
Variable |
Primer argumento de tipo entero |
RDX |
Variable |
Segundo argumento de tipo entero |
R8 |
Variable |
Tercer argumento de tipo entero |
R9 |
Variable |
Cuarto argumento de tipo entero |
R10:R11 |
Variable |
Se debe conservar según requiera el llamador; se utiliza en instrucciones syscall/sysret |
R12:R15 |
No variable |
Debe ser conservado por el destinatario |
RDI |
No variable |
Debe ser conservado por el destinatario |
RSI |
No variable |
Debe ser conservado por el destinatario |
RBX |
No variable |
Debe ser conservado por el destinatario |
RBP |
No variable |
Se puede utilizar como un puntero de marco; debe ser conservado por el destinatario |
RSP |
No variable |
Puntero de pila |
XMM0 |
Variable |
Primer argumento FP |
XMM1 |
Variable |
Segundo argumento FP |
XMM2 |
Variable |
Tercer argumento FP |
XMM3 |
Variable |
Cuarto argumento FP |
XMM4:XMM5 |
Variable |
Se debe conservar según lo requiera el llamador |
XMM6:XMM15 |
No variable |
Se debe conservar según lo requiera el destinatario |