xor

xor

RISC-V Assembler Referenz

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

Kodierungsformat

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Beschreibung

xor ist eine bitweise Anweisung. Wie and und or arbeitet sie auf den 32 Positionen eines Registers (die Seite and behandelt bitweise Operationen). Der Name steht für exklusives ODER. An jeder Position ist das Ergebnis 1, wenn die beiden Eingabebits unterschiedlich sind, also eines 0 und eines 1, und 0, wenn sie übereinstimmen. Die folgende Form wendet dies auf rs1 und rs2 an und schreibt das Ergebnis nach rd.

xor rd, rs1, rs2

Zwei Eigenschaften machen XOR nützlich. Ein Wert, mit sich selbst XOR-verknüpft, ergibt 0, da jedes Bit mit sich selbst übereinstimmt, sodass die nächste Zeile ein Register auf null setzt.

xor t0, t0, t0

XOR mit einer Maske invertiert die Bits, an denen die Maske eine 1 hat, und lässt die übrigen unverändert. Zweimaliges Invertieren stellt den ursprünglichen Wert wieder her. Einfache Verschlüsselung und Fehlerprüfungen beruhen darauf.

XOR prüft auch auf Gleichheit. Nach der folgenden Zeile ist t2 null, wenn die beiden Eingaben identisch waren, und ungleich null, wenn sie sich unterscheiden, und ein Sprung kann das Ergebnis prüfen.

xor t2, t0, t1

Das RISC-V-Handbuch führt xor unter den Register-Register-Operationen auf, die rs1 und rs2 lesen und das Ergebnis nach rd schreiben. Sie führt ein bitweises logisches exklusives ODER aus.

Das Beispiel setzt t0 auf 0, unabhängig davon, was es zuvor enthielt. Die Anweisung li (load immediate) mit der Konstante null bewirkt dasselbe.

Beispiel

xor t0, t0, t0   # t0 = 0