Grundlegende Befehle: Unterschied zwischen den Versionen
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…“ |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
== Grundlegende Befehle für 64-BitAssembler == | |||
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: | 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 | === Datenverarbeitungsbefehle === | ||
ADD (Addieren) | '''ADD''' (Addieren) | ||
<syntaxhighlight lang="asm"> | |||
ADD X0, X1, X2 ; X0 = X1 + X2 | ADD X0, X1, X2 ; X0 = X1 + X2 | ||
</syntaxhighlight> | |||
'''SUB''' (Subtrahieren) | |||
<syntaxhighlight lang="asm"> | |||
SUB X0, X1, X2 ; X0 = X1 - X2 | SUB X0, X1, X2 ; X0 = X1 - X2 | ||
</syntaxhighlight> | |||
'''MUL''' (Multiplizieren) | |||
<syntaxhighlight lang="asm"> | |||
MUL X0, X1, X2 ; X0 = X1 * X2 | MUL X0, X1, X2 ; X0 = X1 * X2 | ||
</syntaxhighlight> | |||
'''DIV''' (Dividieren) | |||
<syntaxhighlight lang="asm"> | |||
UDIV X0, X1, X2 ; X0 = X1 / X2 (unsigned) | UDIV X0, X1, X2 ; X0 = X1 / X2 (unsigned) | ||
SDIV X0, X1, X2 ; X0 = X1 / X2 (signed) | SDIV X0, X1, X2 ; X0 = X1 / X2 (signed) | ||
</syntaxhighlight> | |||
=== Logische Befehle === | |||
'''AND''' (Bitweises UND) | |||
<syntaxhighlight lang="asm"> | |||
AND X0, X1, X2 ; X0 = X1 & X2 | AND X0, X1, X2 ; X0 = X1 & X2 | ||
</syntaxhighlight> | |||
'''ORR''' (Bitweises ODER) | |||
<syntaxhighlight lang="asm"> | |||
ORR X0, X1, X2 ; X0 = X1 | X2 | ORR X0, X1, X2 ; X0 = X1 | X2 | ||
</syntaxhighlight> | |||
'''EOR''' (Exklusives ODER) | |||
<syntaxhighlight lang="asm"> | |||
EOR X0, X1, X2 ; X0 = X1 ^ X2 | EOR X0, X1, X2 ; X0 = X1 ^ X2 | ||
</syntaxhighlight> | |||
'''LSL''' (Logisches Schieben nach links) | |||
<syntaxhighlight lang="asm"> | |||
LSL X0, X1, #2 ; X0 = X1 << 2 | LSL X0, X1, #2 ; X0 = X1 << 2 | ||
</syntaxhighlight> | |||
'''LSR''' (Logisches Schieben nach rechts) | |||
<syntaxhighlight lang="asm"> | |||
LSR X0, X1, #2 ; X0 = X1 >> 2 | LSR X0, X1, #2 ; X0 = X1 >> 2 | ||
</syntaxhighlight> | |||
=== Speicherzugriffsbefehle === | |||
'''LDR''' (Laden) | |||
<syntaxhighlight lang="asm"> | |||
LDR X0, [X1] ; Lade den Wert aus der Speicheradresse, die in X1 gespeichert ist, in X0 | LDR X0, [X1] ; Lade den Wert aus der Speicheradresse, die in X1 gespeichert ist, in X0 | ||
</syntaxhighlight> | |||
'''STR''' (Speichern) | |||
<syntaxhighlight lang="asm"> | |||
STR X0, [X1] ; Speichere den Wert aus X0 in die Speicheradresse, die in X1 gespeichert ist | STR X0, [X1] ; Speichere den Wert aus X0 in die Speicheradresse, die in X1 gespeichert ist | ||
</syntaxhighlight> | |||
=== Bedingte Befehle === | |||
'''B''' (Bedingungsloser Sprung) | |||
<syntaxhighlight lang="asm"> | |||
B label ; Springe zu einer bestimmten Marke (label) | B label ; Springe zu einer bestimmten Marke (label) | ||
</syntaxhighlight> | |||
'''BL''' (Bedingungsloser Sprung mit Link) | |||
<syntaxhighlight lang="asm"> | |||
BL label ; Springe zu einer bestimmten Marke (label) und speichere die Rücksprungadresse | BL label ; Springe zu einer bestimmten Marke (label) und speichere die Rücksprungadresse | ||
</syntaxhighlight> | |||
'''CBZ''' (Vergleiche und springe, wenn null) | |||
<syntaxhighlight lang="asm"> | |||
CBZ X0, label ; Springe zu einer bestimmten Marke (label), wenn X0 null ist | CBZ X0, label ; Springe zu einer bestimmten Marke (label), wenn X0 null ist | ||
</syntaxhighlight> | |||
'''CBNZ''' (Vergleiche und springe, wenn nicht null) | |||
<syntaxhighlight lang="asm"> | |||
CBNZ X0, label ; Springe zu einer bestimmten Marke (label), wenn X0 nicht null ist | CBNZ X0, label ; Springe zu einer bestimmten Marke (label), wenn X0 nicht null ist | ||
</syntaxhighlight> | |||
=== Vergleichsbefehle === | |||
'''CMP''' (Vergleichen) | |||
<syntaxhighlight lang="asm"> | |||
CMP X0, X1 ; Vergleiche X0 und X1 und setze die Statusflags entsprechend | CMP X0, X1 ; Vergleiche X0 und X1 und setze die Statusflags entsprechend | ||
</syntaxhighlight> | |||
'''CSEL''' (Bedingte Auswahl) | |||
<syntaxhighlight lang="asm"> | |||
CSEL X0, X1, X2, EQ ; Wenn die Bedingung EQ (Equal) erfüllt ist, dann X0 = X1, sonst X0 = X2 | CSEL X0, X1, X2, EQ ; Wenn die Bedingung EQ (Equal) erfüllt ist, dann X0 = X1, sonst X0 = X2 | ||
</syntaxhighlight> | |||
=== Spezielle Befehle === | |||
'''NOP''' (No Operation) | |||
<syntaxhighlight lang="asm"> | |||
NOP ; Führt keine Operation aus, nützlich für Timing oder Platzhalter | NOP ; Führt keine Operation aus, nützlich für Timing oder Platzhalter | ||
</syntaxhighlight> | |||
'''BRK''' (Breakpoint) | |||
<syntaxhighlight lang="asm"> | |||
BRK #0 ; Erzeugt eine Debugging-Breakpoint-Ausnahme | BRK #0 ; Erzeugt eine Debugging-Breakpoint-Ausnahme | ||
Beispielcode | </syntaxhighlight> | ||
=== Beispielcode === | |||
Hier ist ein einfacher ARMv8-A Assembler-Programmcode, der zwei Zahlen addiert und das Ergebnis speichert: | Hier ist ein einfacher ARMv8-A Assembler-Programmcode, der zwei Zahlen addiert und das Ergebnis speichert: | ||
<syntaxhighlight lang="asm"> | |||
.section .data | .section .data | ||
value1: .word 5 | value1: .word 5 | ||
| Zeile 107: | Zeile 125: | ||
STR X4, [X1] ; Speichere das Ergebnis in result | STR X4, [X1] ; Speichere das Ergebnis in result | ||
BRK #0 ; Beende das Programm | BRK #0 ; Beende das Programm | ||
</syntaxhighlight> | |||
Version vom 2. September 2024, 10:04 Uhr
Grundlegende Befehle für 64-BitAssembler
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)
ADD X0, X1, X2 ; X0 = X1 + X2
SUB (Subtrahieren)
SUB X0, X1, X2 ; X0 = X1 - X2
MUL (Multiplizieren)
MUL X0, X1, X2 ; X0 = X1 * X2
DIV (Dividieren)
UDIV X0, X1, X2 ; X0 = X1 / X2 (unsigned)
SDIV X0, X1, X2 ; X0 = X1 / X2 (signed)
Logische Befehle
AND (Bitweises UND)
AND X0, X1, X2 ; X0 = X1 & X2
ORR (Bitweises ODER)
ORR X0, X1, X2 ; X0 = X1 | X2
EOR (Exklusives ODER)
EOR X0, X1, X2 ; X0 = X1 ^ X2
LSL (Logisches Schieben nach links)
LSL X0, X1, #2 ; X0 = X1 << 2
LSR (Logisches Schieben nach rechts)
LSR X0, X1, #2 ; X0 = X1 >> 2
Speicherzugriffsbefehle
LDR (Laden)
LDR X0, [X1] ; Lade den Wert aus der Speicheradresse, die in X1 gespeichert ist, in X0
STR (Speichern)
STR X0, [X1] ; Speichere den Wert aus X0 in die Speicheradresse, die in X1 gespeichert ist
Bedingte Befehle
B (Bedingungsloser Sprung)
B label ; Springe zu einer bestimmten Marke (label)
BL (Bedingungsloser Sprung mit Link)
BL label ; Springe zu einer bestimmten Marke (label) und speichere die Rücksprungadresse
CBZ (Vergleiche und springe, wenn null)
CBZ X0, label ; Springe zu einer bestimmten Marke (label), wenn X0 null ist
CBNZ (Vergleiche und springe, wenn nicht null)
CBNZ X0, label ; Springe zu einer bestimmten Marke (label), wenn X0 nicht null ist
Vergleichsbefehle
CMP (Vergleichen)
CMP X0, X1 ; Vergleiche X0 und X1 und setze die Statusflags entsprechend
CSEL (Bedingte Auswahl)
CSEL X0, X1, X2, EQ ; Wenn die Bedingung EQ (Equal) erfüllt ist, dann X0 = X1, sonst X0 = X2
Spezielle Befehle
NOP (No Operation)
NOP ; Führt keine Operation aus, nützlich für Timing oder Platzhalter
BRK (Breakpoint)
BRK #0 ; Erzeugt eine Debugging-Breakpoint-Ausnahme
Beispielcode
Hier ist ein einfacher ARMv8-A Assembler-Programmcode, der zwei Zahlen addiert und das Ergebnis speichert:
.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