Register

Aus C und Assembler mit Raspberry
Version vom 11. März 2025, 13:15 Uhr von Satyria (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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.

SIMD- und Gleitkommaregister

Die 32 Register in der SIMD- und Gleitkommaregisterdatei, V0-V31, enthalten Gleitkommaoperanden für die skalaren Gleitkommabefehle und sowohl skalare als auch Vektoroperanden für die erweiterten SIMD-Befehle. Wenn sie in einer bestimmten Befehlsform verwendet werden, müssen die Namen weiter qualifiziert werden, um die Datenform anzugeben, das heißt die Datenelementgröße und die Anzahl der Elemente oder Spuren innerhalb des Registers. Eine ähnliche Anforderung wird an die Allzweckregister gestellt.

Zusätzliche Details über SIMD- und Gleitkommaregister

  • Namenskonventionen:
    • S0-S31: 32-Bit skalare Gleitkommawerte
    • D0-D31: 64-Bit skalare Gleitkommawerte
    • Q0-Q31: 128-Bit SIMD-Register
  • Verwendung in SIMD-Befehlen:
    • In SIMD-Befehlen können V0-V31 für ganzzahlige und Gleitkommaoperationen verwendet werden.
    • Die SIMD-Befehle unterstützen verschiedene Datentypen und -größen, z.B. 8-Bit-, 16-Bit- und 32-Bit-Ganzzahlen sowie 32-Bit- und 64-Bit- Gleitkommazahlen.
  • Verwendung in Gleitkommabefehlen:
    • Die skalaren Gleitkommabefehle verwenden die Register S0-S31 für 32-Bit-Gleitkommazahlen und D0-D31 für 64-Bit-Gleitkommazahlen.
    • Die Gleitkommaregister können auch für Operationen wie Addition, Multiplikation und Division von Gleitkommazahlen genutzt werden.