Logische Operatoren

Aus C und Assembler mit Raspberry

Logische Operatoren werden häufig in der Informatik verwendet, um bitweise Operationen auf Binärdaten durchzuführen. Im ARM64-Bit-Assembler gibt es mehrere wichtige logische Operatoren: and, eor, orr und bic.

Syntax und Beschreibung

AND (and)

Die and-Operation führt eine bitweise UND-Operation aus. Syntax:

and <Zielregister>, <Quellregister1>, <Quellregister2>

Beispiel:

and x0, x1, x2

Setzt x0 auf das Ergebnis der bitweisen UND-Operation von x1 und x2.

Exclusive OR (eor)

Die eor-Operation führt eine bitweise exklusive ODER-Operation durch. Syntax:

eor <Zielregister>, <Quellregister1>, <Quellregister2>

Beispiel:

eor x0, x1, x2

Setzt x0 auf das Ergebnis der bitweisen XOR-Operation von x1 und x2.

OR (orr)

Die orr-Operation führt eine bitweise ODER-Operation durch. Syntax:

orr <Zielregister>, <Quellregister1>, <Quellregister2>

Beispiel:

orr x0, x1, x2

Setzt x0 auf das Ergebnis der bitweisen ODER-Operation von x1 und x2.

Bit Clear (bic)

Die bic-Operation führt eine bitweise Löschoperation durch (bitweise UND mit der Umkehr des zweiten Operanden). Syntax:

bic <Zielregister>, <Quellregister1>, <Quellregister2>

Beispiel:

bic x0, x1, x2

Setzt x0 auf das Ergebnis der bitweisen AND-Operation von x1 und NOT x2.

Überblick über logische Operatoren

AND EOR ORR BIC
Xs 1100 1100 1100 1100
Operand2 1010 1010 1010 1010
Ergebnis 1000 0110 1110 0100
  • AND (and): Die bitweisen AND-Operatoren kombinieren nur dort, wo beide Bits gesetzt sind.
  • Exclusive OR (eor): Nur die Bits, die in einem der Operanden gesetzt sind (aber nicht in beiden), bleiben gesetzt.
  • OR (orr): Die bitweisen OR-Operationen setzen Bits, wenn mindestens eines der korrespondierenden Bits in den Operanden gesetzt ist.
  • Bit Clear (bic): Diese Operatoren löschen die Bits, die im zweiten Operanden gesetzt sind.

Vergleichsbefehle: CMP, CMN und TST

Vergleichsbefehle verwenden logische Operationen, um Ergebnisse zu berechnen und Statusflags zu setzen, die für bedingte Anweisungen verwendet werden können.

CMP (Compare)

Führt eine Subtraktion ohne Speicherung des Ergebnisses durch. Setzt Flags abhängig vom Vergleich. Syntax:

cmp <Register1>, <Register2>

Beispiel:

cmp x0, x1

Vergleicht x0 mit x1.

CMN (Compare Negative)

Führt eine Addition des negierten zweiten Operanden ohne Speicherung des Ergebnisses durch. Setzt Flags abhängig vom Vergleich. Syntax:

cmn <Register1>, <Operand2>

Beispiel:

cmn x0, x1

Vergleicht x0 mit -x1 (d.h., x0 - (-x1)).

TST (Test)

Führt eine AND-Operation durch und speichert das Ergebnis nicht. Setzt Flags basierend auf dem Ergebnis der bitweisen AND-Operation. Syntax:

tst <Register>, <Operand2>

Beispiel:

tst x0, x1

Führt eine AND-Operation zwischen x0 und x1 durch und setzt die Flags basierend auf dem Ergebnis.

Zusammenfassung

Logische Operatoren spielen eine wichtige Rolle in der Bitmanipulation und in der Steuerung von Programmabläufen im ARM64-Bit-Assembler. Sie bieten vielseitige Werkzeuge zur direkten Arbeit mit einzelnen Bits und erlauben die flexible Handhabung von Daten. Vergleichsbefehle wie CMP, CMN und TST bauen auf logischen Operationen auf, um Flags zu setzen, die nützlich für Programmverzweigungen sind.