notPseudoelement

not

Pseudoelement
RISC-V Assembler Referenz

lyszt.net behandelt not und andere RISC-V-Befehle ausführlicher.

Beschreibung

not invertiert alle Bits eines Registers. Eine 0 wird zu 1, und eine 1 wird zu 0. Die folgende Form liest das Quellregister rs, invertiert alle 32 Bits und schreibt das Ergebnis in das Zielregister rd. Diese Operation ist das bitweise Komplement.

not rd, rs

not ist eine Pseudoinstruktion: ein lesbarer Name, den der Assembler in eine echte Instruktion umschreibt. Sie wird zur unten stehenden Instruktion, die ein XOR mit einer Maske aus lauter 1en ist.

xori rd, rs, -1

XOR invertiert ein Bit überall dort, wo die Maske eine 1 enthält, also invertiert eine Maske aus lauter 1en alle Bits. Der Wert -1 ist in Bits lauter 1en, weshalb er als Maske funktioniert. RISC-V hat keine eigene Invertierungsinstruktion, weil diese Umschreibung sie abdeckt.

not erzeugt das Gegenteil einer Maske. Wenn ein Muster bestimmte Bits auswählt, liefert not das Muster, das den Rest auswählt. Auf not folgendes and löscht die Bits, die die ursprüngliche Maske benannt hat, was eine Gruppe von Flags ausschaltet.

Das RISC-V-Handbuch definiert not als Assembler-Pseudoinstruktion für xori mit der Konstante -1 und beschreibt dieses xori als bitweise logische Inversion des Registers rs1.

not und neg liefern unterschiedliche Ergebnisse. not invertiert Bits, und neg invertiert das Vorzeichen. not von 5 ist -6, und neg von 5 ist -5. Der Trace des Simulators zeigt das xori, das anstelle von not ausgeführt wird.

Wird erweitert zu

xori rd, rs, -1

Der Assembler ersetzt diese Pseudoanweisung durch die oben aufgeführte(n) echte(n) Anweisung(en).

Beispiel

li t0, 0
not t1, t0       # t1 = -1 (every bit flipped)