Registerverwendung
Die x64-Architektur ermöglicht den Einsatz von 16 allgemeinen Registern (im Folgenden als Ganzzahl-Register bezeichnet) sowie von 16 XMM/YMM-Registern für die Gleitkommanutzung.Volatile Register sind Scratch-Register, von denen der Aufrufer voraussetzt, dass sie während eines Aufrufs zerstört werden.Nicht volatile Register müssen ihre Werte über einen Funktionsaufruf hinweg bewahren und, sofern sie verwendet werden, vom Aufgerufenen gespeichert werden.
Die folgende Tabelle beschreibt, wie jedes Register bei Funktionsaufrufen verwendet wird:
Register |
Status |
Verwendung |
RAX |
Volatil |
Rückgabewert-Register |
RCX |
Volatil |
Erstes Ganzzahl-Argument |
RDX |
Volatil |
Zweites Ganzzahl-Argument |
R8 |
Volatil |
Drittes Ganzzahl-Argument |
R9 |
Volatil |
Viertes Ganzzahl-Argument |
R10:R11 |
Volatil |
Muss je nach Anforderung des Aufrufers bewahrt werden. Wird in syscall-/sysret-Instruktionen verwendet. |
R12:R15 |
Nicht volatil |
Muss vom Aufgerufenen bewahrt werden |
RDI |
Nicht volatil |
Muss vom Aufgerufenen bewahrt werden |
RSI |
Nicht volatil |
Muss vom Aufgerufenen bewahrt werden |
RBX |
Nicht volatil |
Muss vom Aufgerufenen bewahrt werden |
RBP |
Nicht volatil |
Kann als Frame-Pointer verwendet werden; muss vom Aufgerufenen bewahrt werden |
RSP |
Nicht volatil |
Stack-Pointer |
XMM0, YMM0 |
Volatil |
Erstes FP-Argument; erstes Argument vom Typ Vektor, wenn __vectorcall verwendet wird |
XMM1, YMM1 |
Volatil |
Zweites FP-Argument; zweites Argument vom Typ Vektor, wenn __vectorcall verwendet wird |
XMM2, YMM2 |
Volatil |
Drittes FP-Argument; drittes Argument vom Typ Vektor, wenn __vectorcall verwendet wird |
XMM3, YMM3 |
Volatil |
Viertes FP-Argument; viertes Argument vom Typ Vektor, wenn __vectorcall verwendet wird |
XMM4, YMM4 |
Volatil |
Muss je nach Bedarf vom Aufrufer bewahrt werden; fünftes Argument vom Typ Vektor, wenn __vectorcall verwendet wird |
XMM5, YMM5 |
Volatil |
Muss je nach Bedarf vom Aufrufer bewahrt werden; sechstes Argument vom Typ Vektor, wenn __vectorcall verwendet wird |
XMM6:XMM15, YMM6:YMM15 |
Nicht volatil (XMM), Volatil (obere Hälfte von YMM) |
Muss je nach Bedarf vom Aufgerufenen bewahrt werden.YMM-Register müssen je nach Bedarf vom Aufrufer bewahrt werden. |