xori
lyszt.net behandelt xori und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
xori führt ein bitweises XOR mit einer Konstante aus. Zusammen mit andi und ori vervollständigt es die Logikbefehle mit unmittelbarem Operanden. Das i steht für immediate: ein fester, im Befehl kodierter Wert, sodass ein zweites Register unnötig ist. XOR ergibt 1 an einer Bitposition, wenn die beiden Bits unterschiedlich sind (siehe die Seite xor). Bei einer konstanten Maske invertiert eine 1 in der Maske das entsprechende Bit und eine 0 lässt dieses Bit unverändert.
Die Syntax von xori ist unten dargestellt. Es verknüpft den Wert in rs1 per XOR mit der Konstante imm und schreibt das Ergebnis nach rd.
xori rd, rs1, imm
andi löscht ausgewählte Bits, ori setzt sie, und xori invertiert sie. Zweimaliges Invertieren liefert den ursprünglichen Wert zurück.
xori stellt auch den Befehl not bereit. Alle Bits eines Werts zu invertieren bedeutet XOR mit einer Maske aus lauter 1en, und not ist eine Kurzform für die folgende Zeile, weil -1 in Bits aus lauter 1en besteht. RISC-V hat keinen eigenen Befehl, der jedes Bit invertiert.
xori rd, rs, -1
Das RISC-V-Handbuch gibt an, dass der 12-Bit-Immediate vor der Operation auf 32 Bit vorzeichenerweitert wird, sodass die Konstante -1 zu einer Maske aus lauter 1en wird. Es führt xori mit der Konstante -1 als bitweise logische Inversion eines Registers auf, was der Pseudo-Befehl not ist.
Ein häufiger kleiner Anwendungsfall schaltet einen Ja-oder-Nein-Wert um, der als 0 oder 1 gehalten wird. Die nächste Zeile schaltet ihn bei jeder Ausführung in den anderen Zustand um.
xori t0, t0, 1
Die Konstante ist auf 12 Bit beschränkt. Für breitere Muster laden Sie die Maske in ein Register und verwenden xor.
Beispiel
li t0, 0 xori t1, t0, -1 # t1 = -1 (every bit flipped)
