Register

Aus C und Assembler mit Raspberry

Allzweckregister, Nullregister und Stapelzeiger

Die 31 Allzweckregister werden R0-R30 genannt. Das Register R31 zeigt den aktuellen Stapelzeiger oder das Nullregister dar.

Wenn die Register in einer bestimmten Befehlsvariante verwendet werden, müssen sie qualifiziert sein, um die Operandendatengröße, 32 Bit oder 64 Bit, und die Datengröße des Befehls anzugeben.

Wenn die Datengröße 32 Bit beträgt, werden die unteren 32 Bit des Registers verwendet und die oberen 32 Bit beim Lesen ignoriert. Beim schreiben von einer Datengröße von 32 Bit werden die unteren 32 Bit des Registers geschrieben und die oberen 32 Bit mit NULL gelöscht.

Benennung von Allzweckregistern, des Nullregisters und des Stapelzeigers
Name Größe Beschreibung
Wn 32 Bit Allzweckregister 0-30
Xn 64 Bit Allzweckregister 0-30
WZR 32 Bit Nullregister
XZR 64 Bit Nullregister
WSP 32 Bit Aktueller Stackpointer
SP 64 Bit Aktueller Stackpointer

Folgendes ist zu beachten:

  • Die Namen Xn und Wn beziehen sich beide auf dasselbe Allzweckregister, Rn.
  • Es gibt kein Register mit dem Namen W31 oder X31.
  • Der Name SP stellt den Stapelzeiger für 64-Bit-Operanden dar, wobei eine Kodierung des Werts 31 im entsprechenden Registerfeld als Lesen oder Schreiben des aktuellen Stapelzeigers interpretiert wird. Wenn Anweisungen diese Operandenkodierung nicht als Stapelzeiger interpretieren, ist die Verwendung des Namens SP ein Fehler.
  • Der Name WSP stellt den aktuellen Stapelzeiger in einem 32-Bit-Kontext dar.
  • Der Name XZR stellt das Nullregister für 64-Bit-Operanden dar, wobei eine Kodierung des Werts 31 im entsprechenden Registerfeld als Rückgabe von Null beim Lesen oder Verwerfen des Ergebnisses beim Schreiben interpretiert wird.
Wenn Anweisungen diese Operandenkodierung nicht als Nullregister interpretieren, ist die Verwendung des Namens XZR ein Fehler.
  • Der Name WZR stellt das Nullregister in einem 32-Bit-Kontext dar.
  • Die Architektur definiert keinen bestimmten Namen für das Allzweckregister R30, um seine Rolle als Linkregister bei Prozeduraufrufen widerzuspiegeln. Ein A64-Assembler muss jedoch zu diesem Zweck immer W30 und X30 verwenden, und zusätzliche Softwarenamen können als Teil des Prozeduraufrufstandards definiert werden, siehe Prozeduraufrufstandard für die 64-Bit-Arm-Architektur.