Utilisation des Registres

L'architecture x64 fournit 16 registres généraux (ci-après dénommés « registres d'entiers ») en plus des 16 registres XMM/YMM disponibles pour l'utilisation de nombres à virgule flottante.Les registres volatils sont des registres de travail censés être détruits après un appel.Les registres non volatils doivent conserver leurs valeurs tout au long d'un appel de fonction et être enregistrés par l'appelé s'il les utilise.

Le tableau suivant explique comment chaque registre est utilisé dans les appels de fonction :

Registre

État

Utilisez

RAX

Volatil

Registre des 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é si 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, YMM0

Volatil

Premier argument FP ; premier argument de type vectoriel quand __vectorcall est utilisé

XMM1, YMM1

Volatil

Deuxième argument FP ; deuxième argument de type vectoriel quand __vectorcall est utilisé

XMM2, YMM2

Volatil

Troisième argument FP ; troisième argument de type vectoriel quand __vectorcall est utilisé

XMM3, YMM3

Volatil

Quatrième argument FP ; quatrième argument de type vectoriel quand __vectorcall est utilisé

XMM4, YMM4

Volatil

Doit être conservé si nécessaire par l'appelant ; cinquième argument de type vectoriel quand __vectorcall est utilisé

XMM5, YMM5

Volatil

Doit être conservé si nécessaire par l'appelant ; sixième argument de type vectoriel quand __vectorcall est utilisé

XMM6:XMM15, YMM6:YMM15

Non volatil (XMM), volatil (moitié supérieure de YMM)

Doit être conservé si nécessaire par l'appelé.Les registres YMM doivent être conservés si nécessaire par l'appelant.

Voir aussi

Référence

Conventions des logiciels x64

__vectorcall