Grundlegende Befehle

Aus C und Assembler mit Raspberry
Version vom 22. August 2024, 13:42 Uhr von Satyria (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ Assembler-Befehle (auch als Instruktionen oder Maschinenbefehle bezeichnet) für ARM-Prozessoren wie die ARM Cortex-A76 oder den Broadcom BCM2712 (der auf ARM-Technologie basiert) basieren auf der ARMv8-A Architektur. Hier sind einige grundlegende Befehle, die in der ARMv8-A Assembler-Programmierung verwendet werden: Datenverarbeitungsbefehle ADD (Addieren) Copy ADD X0, X1, X2 ; X0 = X1 + X2 SUB (Subtrahieren) Copy SUB X0, X1, X2 ; X0 = X1 - X2 M…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)


Assembler-Befehle (auch als Instruktionen oder Maschinenbefehle bezeichnet) für ARM-Prozessoren wie die ARM Cortex-A76 oder den Broadcom BCM2712 (der auf ARM-Technologie basiert) basieren auf der ARMv8-A Architektur. Hier sind einige grundlegende Befehle, die in der ARMv8-A Assembler-Programmierung verwendet werden:

Datenverarbeitungsbefehle ADD (Addieren)

Copy

ADD X0, X1, X2  ; X0 = X1 + X2 SUB (Subtrahieren)

Copy

SUB X0, X1, X2  ; X0 = X1 - X2 MUL (Multiplizieren)

Copy

MUL X0, X1, X2  ; X0 = X1 * X2 DIV (Dividieren)

Copy

UDIV X0, X1, X2  ; X0 = X1 / X2 (unsigned) SDIV X0, X1, X2  ; X0 = X1 / X2 (signed) Logische Befehle AND (Bitweises UND)

Copy

AND X0, X1, X2  ; X0 = X1 & X2 ORR (Bitweises ODER)

Copy

ORR X0, X1, X2  ; X0 = X1 | X2 EOR (Exklusives ODER)

Copy

EOR X0, X1, X2  ; X0 = X1 ^ X2 LSL (Logisches Schieben nach links)

Copy

LSL X0, X1, #2  ; X0 = X1 << 2 LSR (Logisches Schieben nach rechts)

Copy

LSR X0, X1, #2  ; X0 = X1 >> 2 Speicherzugriffsbefehle LDR (Laden)

Copy

LDR X0, [X1]  ; Lade den Wert aus der Speicheradresse, die in X1 gespeichert ist, in X0 STR (Speichern)

Copy

STR X0, [X1]  ; Speichere den Wert aus X0 in die Speicheradresse, die in X1 gespeichert ist Bedingte Befehle B (Bedingungsloser Sprung)

Copy

B label  ; Springe zu einer bestimmten Marke (label) BL (Bedingungsloser Sprung mit Link)

Copy

BL label  ; Springe zu einer bestimmten Marke (label) und speichere die Rücksprungadresse CBZ (Vergleiche und springe, wenn null)

Copy

CBZ X0, label  ; Springe zu einer bestimmten Marke (label), wenn X0 null ist CBNZ (Vergleiche und springe, wenn nicht null)

Copy

CBNZ X0, label  ; Springe zu einer bestimmten Marke (label), wenn X0 nicht null ist Vergleichsbefehle CMP (Vergleichen)

Copy

CMP X0, X1  ; Vergleiche X0 und X1 und setze die Statusflags entsprechend CSEL (Bedingte Auswahl)

Copy

CSEL X0, X1, X2, EQ  ; Wenn die Bedingung EQ (Equal) erfüllt ist, dann X0 = X1, sonst X0 = X2 Spezielle Befehle NOP (No Operation)

Copy

NOP  ; Führt keine Operation aus, nützlich für Timing oder Platzhalter BRK (Breakpoint)

Copy

BRK #0  ; Erzeugt eine Debugging-Breakpoint-Ausnahme Beispielcode Hier ist ein einfacher ARMv8-A Assembler-Programmcode, der zwei Zahlen addiert und das Ergebnis speichert:

Copy

.section .data value1: .word 5 value2: .word 10 result: .word 0

.section .text .global _start

_start:

   LDR X1, =value1  ; Lade die Adresse von value1 in X1
   LDR X2, [X1]     ; Lade den Wert von value1 in X2
   LDR X1, =value2  ; Lade die Adresse von value2 in X1
   LDR X3, [X1]     ; Lade den Wert von value2 in X3
   ADD X4, X2, X3   ; Addiere die Werte und speichere das Ergebnis in X4
   LDR X1, =result  ; Lade die Adresse von result in X1
   STR X4, [X1]     ; Speichere das Ergebnis in result
   BRK #0           ; Beende das Programm