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 , [<Rn>, #<imm>]
Beispiel: LDR X0, [X1, #8]
Erklärung: Lädt den Wert, der sich 8 Bytes nach der Adresse in X1 befindet, in das Register X0.
  • LDRB (Load Register Byte):
Format: LDRB , [<Rn>, #<imm>]
Beispiel: LDRB W0, [X1, #2]
Erklärung: Lädt ein Byte, das sich 2 Bytes nach der Adresse in X1 befindet, in das Register W0.
  • LDRH (Load Register Halfword):
Format: LDRH , [<Rn>, #<imm>]
Beispiel: LDRH W0, [X1, #4]
Erklärung: Lädt ein Halbwort (16 Bit), das sich 4 Bytes nach der Adresse in X1 befindet, in das Register W0.
  • LDP (Load Pair):
Format: LDP , <Rt2>, [<Rn>, #<imm>]
Beispiel: LDP X0, X1, [X2, #16]
Erklärung: Lädt zwei aufeinanderfolgende Register (X0 und X1) aus dem Speicher, beginnend bei der Adresse, die 16 Bytes nach dem Wert in X2 liegt.

Stores (Schreiboperationen)

Hier sind einige der wichtigsten Store-Instruktionen:

  • STR (Store Register):
Format: STR , [<Rn>, #<imm>]
Beispiel: STR X0, [X1, #8]
Erklärung: Speichert den Wert in X0 an die Adresse, die 8 Bytes nach der Adresse in X1 liegt.
  • STRB (Store Register Byte):
Format: STRB , [<Rn>, #<imm>]
Beispiel: STRB W0, [X1, #2]
Erklärung: Speichert ein Byte aus W0 an die Adresse, die sich 2 Bytes nach X1 befindet.
  • STRH (Store Register Halfword):
Format: STRH , [<Rn>, #<imm>]
Beispiel: STRH W0, [X1, #4]
Erklärung: Speichert ein Halbwort aus W0 an die Adresse, die sich 4 Bytes nach X1 befindet.
  • STP (Store Pair):
Format: STP , <Rt2>, [<Rn>, #<imm>]
Beispiel: STP X0, X1, [X2, #16]
Erklärung: Speichert zwei aufeinanderfolgende Register (X0 und X1) in den Speicher, beginnend bei der Adresse, die 16 Bytes nach dem Wert in X2 liegt.

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: LDXR lädt den Wert aus der Adresse X1 in X0. STXR speichert den Wert von X0 an die Adresse X1 und setzt W2 auf 0, wenn der Store erfolgreich war.