Utilisation des Registres
Mise à jour : novembre 2007
L'architecture x64 propose 16 registres à usage général (appelés ci-après registres entiers), ainsi que 16 registres XMM disponibles pour une utilisation à virgule flottante. Les registres volatils sont des registres de travail que l'appelant suppose être détruits au terme d'un appel. Les registres non volatils doivent conserver leurs valeurs tout au long d'un appel de fonction et doivent être enregistrés par l'appelé s'ils sont utilisés.
Le tableau suivant décrit de quelle manière chaque registre est utilisé dans les appels de fonction :
Registre |
État |
Utilisation |
RAX |
Volatil |
Registre de valeurs de retour |
RCX |
Volatil |
Premier argument entier |
RDX |
Volatil |
Deuxième argument entier |
R8 |
Volatil |
Troisième argument entier |
R9 |
Volatil |
Quatrième argument entier |
R10:R11 |
Volatil |
Doit être conservé autant que nécessaire par l'appelant ; utilisé dans les instructions syscall/sysret |
R12:R15 |
Non volatil |
Doit être conservé par l'appelé |
RDI |
Non volatil |
Doit être conservé par l'appelé |
RSI |
Non volatil |
Doit être conservé par l'appelé |
RBX |
Non volatil |
Doit être conservé par l'appelé |
RBP |
Non volatil |
Peut être utilisé comme pointeur de frame ; doit être conservé par l'appelé |
RSP |
Non volatil |
Pointeur de pile |
XMM0 |
Volatil |
Premier argument FP |
XMM1 |
Volatil |
Deuxième argument FP |
XMM2 |
Volatil |
Troisième argument FP |
XMM3 |
Volatil |
Quatrième argument FP |
XMM4:XMM5 |
Volatil |
Doit être conservé le cas échéant par l'appelant |
XMM6:XMM15 |
Non volatil |
Doit être conservé le cas échéant par l'appelé. |