Lade- und Speicheranweisungen
Aus C und Assembler mit Raspberry
Die "Lade- und Speicheranweisungen" im ARMv8 sind essenziell für den Zugriff auf den Speicher, sowohl um Daten zu lesen (Load) als auch zu schreiben (Store). Diese Anweisungen sind entscheidend für jede Art von Datenverarbeitung.
Grundlegendes
In der ARMv8-Architektur bedeutet "Load" das Laden von Daten aus dem Speicher in Register, während "Store" das Schreiben von Daten aus Register in den Speicher bedeutet. Dabei unterstützen "Loads and Stores" verschiedene Datenformate und Adressierungsmodi.
Loads (Leseoperationen)
Hier sind einige der wichtigsten Load-Instruktionen:
- LDR (Load Register):
- Format:
LDR - Beispiel:
LDR X0, [X1, #8] - Erklärung: Lädt den Wert, der sich 8 Bytes nach der Adresse in
X1befindet, in das RegisterX0.
- LDRB (Load Register Byte):
- Format:
LDRB - Beispiel:
LDRB W0, [X1, #2] - Erklärung: Lädt ein Byte, das sich 2 Bytes nach der Adresse in
X1befindet, in das RegisterW0.
- LDRH (Load Register Halfword):
- Format:
LDRH - Beispiel:
LDRH W0, [X1, #4] - Erklärung: Lädt ein Halbwort (16 Bit), das sich 4 Bytes nach der Adresse in
X1befindet, in das RegisterW0.
- LDP (Load Pair):
- Format:
LDP - Beispiel:
LDP X0, X1, [X2, #16] - Erklärung: Lädt zwei aufeinanderfolgende Register (
X0undX1) aus dem Speicher, beginnend bei der Adresse, die 16 Bytes nach dem Wert inX2liegt.
Stores (Schreiboperationen)
Hier sind einige der wichtigsten Store-Instruktionen:
- STR (Store Register):
- Format:
STR - Beispiel:
STR X0, [X1, #8] - Erklärung: Speichert den Wert in
X0an die Adresse, die 8 Bytes nach der Adresse inX1liegt.
- STRB (Store Register Byte):
- Format:
STRB - Beispiel:
STRB W0, [X1, #2] - Erklärung: Speichert ein Byte aus
W0an die Adresse, die sich 2 Bytes nachX1befindet.
- STRH (Store Register Halfword):
- Format:
STRH - Beispiel:
STRH W0, [X1, #4] - Erklärung: Speichert ein Halbwort aus
W0an die Adresse, die sich 4 Bytes nachX1befindet.
- STP (Store Pair):
- Format:
STP - Beispiel:
STP X0, X1, [X2, #16] - Erklärung: Speichert zwei aufeinanderfolgende Register (
X0undX1) in den Speicher, beginnend bei der Adresse, die 16 Bytes nach dem Wert inX2liegt.
Atomare Operationen
ARMv8 unterstützt auch atomare Lade- und Speicherinstruktionen, die bei der Implementierung von Synchronisationsmechanismen wichtig sind:
- LDXR/STXR (Exclusive Load/Store Register):
- Format (LDXR):
LDXR <Rt>, [<Rn>] - Format (STXR):
STXR <Ws>, <Rt>, [<Rn>] - Beispiel:
LDXR X0, [X1] STXR W2, X0, [X1]
- Erklärung:
LDXRlädt den Wert aus der AdresseX1inX0.STXRspeichert den Wert vonX0an die AdresseX1und setztW2auf 0, wenn der Store erfolgreich war.