Register und Speicher: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
== Vorstellung der ARM64-Register (x0 - x30, SP, PC) == | == Vorstellung der ARM64-Register (x0 - x30, SP, PC, usw.) == | ||
=== CPU-Register === | |||
Ein 64-Bit-Programm auf einem ARM-Prozessor im Benutzermodus hat Zugriff auf: | |||
* | |||
* | * 31 Allzweckregister (x0 bis x30) | ||
* | * Einen Stack-Pointer (SP) | ||
* Ein Nullregister (XZR) | |||
* Einen Programmzähler (PC) | |||
-> Zusätzliche Register Gleitkommaoperationen, Neon-Coprozessor, später | -> Zusätzliche Register Gleitkommaoperationen, Neon-Coprozessor, später | ||
== Unterschiede zwischen allgemeinen und speziellen Registern == | |||
== Speicherorganisation und -adressierung == | <br> | ||
Diese Register sind 64 Bit breit und können verschiedene Arten von Daten speichern, darunter Ganzzahlen, Speicheradressen und andere Werte. | |||
=== Allgemeine Register === | |||
* x0 - x30: Die 31 allgemeinen Register, die für verschiedene Zwecke verwendet werden können. | |||
* SP (Stack Pointer): Der Stack-Pointer, der typischerweise den Anfang des aktuellen Stack-Frames zeigt. | |||
* XZR (Zero Register): Dieses Register ist immer null. Wenn Sie in XZR schreiben, wird der Wert verworfen; ein Lesen von XZR gibt immer null zurück. | |||
* LR (Link Register, x30): Das Link-Register speichert die Rücksprungadresse bei Funktionsaufrufen und Rückkehrungen. Es wird in ARM64 auch als x30 bezeichnet. | |||
* PC (Program Counter): Der Programmzähler hält die Adresse der nächsten auszuführenden Anweisung. In der Programmierung mit Assembly müssen Sie sich normalerweise keine Sorgen um das direkte Bearbeiten des Program Counters machen, da dies von der CPU automatisch verwaltet wird. | |||
* W-Register: Die Register w0 bis w30 sind die 32-Bit-Versionen der 64-Bit-Register x0 bis x30. Sie verwenden die unteren 32 Bits der jeweiligen x-Register. Lesen und Schreiben der w-Register betrifft nur die unteren 32 Bits. | |||
: <syntaxhighlight lang="asm"> mov w0, #42 // Laden des Werts 42 in die unteren 32 Bits von Register x0</syntaxhighlight> | |||
=== Unterschiede zwischen allgemeinen und speziellen Registern === | |||
* Allgemeine Register (x0 - x30): | |||
: Diese Register sind vielseitig und können für alle möglichen Daten verwendet werden: Funktionsparameter, Rückgabewerte, Berechnungen und mehr. | |||
: Sie sind 64 Bit breit und können Ganzzahlen, Adressen und andere Daten speichern. | |||
* Spezielle Register (SP, XZR, PC, LR): | |||
:SP (Stack Pointer): Verwaltet den Stack. Der Stack wird häufig bei Funktionsaufrufen verwendet, um lokale Variablen und Rücksprungadressen zu speichern. | |||
: XZR (Zero Register): Kann als Quelle in Berechnungen verwendet werden, wird jedoch immer als null gelesen und Ignoriert beim schreiben. | |||
: PC (Program Counter): Hält die Adresse der nächsten Programmanweisung. | |||
: LR (Link Register): Speichert die Rücksprungadresse bei Funktionsaufrufen. | |||
=== Speicherorganisation und -adressierung === | |||
Der Speicher ist in ARM64-Systemen in Adressen gegliedert, die als Zahlenwerte dargestellt werden. Jedes Register kann eine Speicheradresse enthalten, und verschiedene Befehle ermöglichen den Zugriff auf und die Manipulation von Speicherinhalten. | |||
==== Speicherorganisation ==== | |||
Stack-Speicher: Zweck für lokale Variablen und Funktionsrücksprungadressen. | |||
Heap-Speicher: Dynamisch zugewiesener Speicher, typischerweise mit malloc und free verwaltet in C-Programmen. | |||
Statischer Speicher: Zum Speichern von globalen und statischen Variablen, deren Lebensdauer über die gesamte Programmlaufzeit gilt. | |||
Version vom 26. November 2024, 10:42 Uhr
Vorstellung der ARM64-Register (x0 - x30, SP, PC, usw.)
CPU-Register
Ein 64-Bit-Programm auf einem ARM-Prozessor im Benutzermodus hat Zugriff auf:
- 31 Allzweckregister (x0 bis x30)
- Einen Stack-Pointer (SP)
- Ein Nullregister (XZR)
- Einen Programmzähler (PC)
-> Zusätzliche Register Gleitkommaoperationen, Neon-Coprozessor, später
Diese Register sind 64 Bit breit und können verschiedene Arten von Daten speichern, darunter Ganzzahlen, Speicheradressen und andere Werte.
Allgemeine Register
- x0 - x30: Die 31 allgemeinen Register, die für verschiedene Zwecke verwendet werden können.
- SP (Stack Pointer): Der Stack-Pointer, der typischerweise den Anfang des aktuellen Stack-Frames zeigt.
- XZR (Zero Register): Dieses Register ist immer null. Wenn Sie in XZR schreiben, wird der Wert verworfen; ein Lesen von XZR gibt immer null zurück.
- LR (Link Register, x30): Das Link-Register speichert die Rücksprungadresse bei Funktionsaufrufen und Rückkehrungen. Es wird in ARM64 auch als x30 bezeichnet.
- PC (Program Counter): Der Programmzähler hält die Adresse der nächsten auszuführenden Anweisung. In der Programmierung mit Assembly müssen Sie sich normalerweise keine Sorgen um das direkte Bearbeiten des Program Counters machen, da dies von der CPU automatisch verwaltet wird.
- W-Register: Die Register w0 bis w30 sind die 32-Bit-Versionen der 64-Bit-Register x0 bis x30. Sie verwenden die unteren 32 Bits der jeweiligen x-Register. Lesen und Schreiben der w-Register betrifft nur die unteren 32 Bits.
mov w0, #42 // Laden des Werts 42 in die unteren 32 Bits von Register x0
Unterschiede zwischen allgemeinen und speziellen Registern
- Allgemeine Register (x0 - x30):
- Diese Register sind vielseitig und können für alle möglichen Daten verwendet werden: Funktionsparameter, Rückgabewerte, Berechnungen und mehr.
- Sie sind 64 Bit breit und können Ganzzahlen, Adressen und andere Daten speichern.
- Spezielle Register (SP, XZR, PC, LR):
- SP (Stack Pointer): Verwaltet den Stack. Der Stack wird häufig bei Funktionsaufrufen verwendet, um lokale Variablen und Rücksprungadressen zu speichern.
- XZR (Zero Register): Kann als Quelle in Berechnungen verwendet werden, wird jedoch immer als null gelesen und Ignoriert beim schreiben.
- PC (Program Counter): Hält die Adresse der nächsten Programmanweisung.
- LR (Link Register): Speichert die Rücksprungadresse bei Funktionsaufrufen.
Speicherorganisation und -adressierung
Der Speicher ist in ARM64-Systemen in Adressen gegliedert, die als Zahlenwerte dargestellt werden. Jedes Register kann eine Speicheradresse enthalten, und verschiedene Befehle ermöglichen den Zugriff auf und die Manipulation von Speicherinhalten.
Speicherorganisation
Stack-Speicher: Zweck für lokale Variablen und Funktionsrücksprungadressen. Heap-Speicher: Dynamisch zugewiesener Speicher, typischerweise mit malloc und free verwaltet in C-Programmen. Statischer Speicher: Zum Speichern von globalen und statischen Variablen, deren Lebensdauer über die gesamte Programmlaufzeit gilt.