Utilizzo dei registri
Aggiornamento: novembre 2007
L'architettura x64 fornisce 16 registri di utilizzo generale (d'ora in poi denominati registri integer) e 16 registri XMM disponibili per le operazioni a virgola mobile. I registri volatili sono registri temporanei che si suppone vengano eliminati dal chiamante attraverso una chiamata. I registri non volatili conservano i relativi valori durante le chiamate di funzione e, se utilizzati, devono essere salvati dal chiamante.
Nella tabella riportata di seguito è indicato il modo in cui ciascun registro viene utilizzato durante le chiamate di funzione:
Registro |
Stato |
Utilizzo |
RAX |
Volatile |
Valore restituito |
RCX |
Volatile |
Primo argomento integer |
RDX |
Volatile |
Secondo argomento integer |
R8 |
Volatile |
Terzo argomento integer |
R9 |
Volatile |
Quarto argomento integer |
R10:R11 |
Volatile |
Deve essere salvato, se necessario, dal chiamante. Viene utilizzato nelle istruzioni syscall/sysret |
R12:R15 |
Non volatile |
Deve essere salvato dal chiamato |
RDI |
Non volatile |
Deve essere salvato dal chiamato |
RSI |
Non volatile |
Deve essere salvato dal chiamato |
RBX |
Non volatile |
Deve essere salvato dal chiamato |
RBP |
Non volatile |
Può essere utilizzato come puntatore ai frame. Deve essere salvato dal chiamato |
RSP |
Non volatile |
Puntatore dello stack |
XMM0 |
Volatile |
Primo argomento FP |
XMM1 |
Volatile |
Secondo argomento FP |
XMM2 |
Volatile |
Terzo argomento FP |
XMM3 |
Volatile |
Quarto argomento FP |
XMM4:XMM5 |
Volatile |
Deve essere salvato, se necessario, dal chiamante |
XMM6:XMM15 |
Non volatile |
Deve essere salvato, se necessario, dal chiamato |