xor

xor

Assembleur RISC-V Référence

lyszt.net couvre xor et d'autres instructions RISC-V plus en détail.

Format d'encodage

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

Description

xor est une instruction bit à bit. Comme and et or, elle opère sur les 32 positions d'un registre (la page and couvre les opérations bit à bit). Le nom signifie OU exclusif. À chaque position, le résultat est 1 lorsque les deux bits d'entrée diffèrent, l'un valant 0 et l'autre 1, et 0 lorsqu'ils sont identiques. La forme ci-dessous applique cela à rs1 et rs2 et écrit le résultat dans rd.

xor rd, rs1, rs2

Deux propriétés rendent XOR utile. Une valeur XORée avec elle-même donne 0, puisque chaque bit correspond à lui-même, donc la ligne suivante met un registre à zéro.

xor t0, t0, t0

XOR avec un masque inverse les bits là où le masque contient un 1 et laisse les autres inchangés. Inverser deux fois restaure la valeur d'origine. Le chiffrement simple et les contrôles d'erreur reposent sur ce principe.

XOR permet aussi de tester l'égalité. Après la ligne ci-dessous, t2 vaut zéro lorsque les deux entrées étaient identiques et non nul lorsqu'elles diffèrent, et un branchement peut tester le résultat.

xor t2, t0, t1

Le manuel RISC-V liste xor parmi les opérations registre-registre, qui lisent rs1 et rs2 et écrivent le résultat dans rd. Elle effectue un OU exclusif logique bit à bit.

L'exemple met t0 à 0 quelle que soit sa valeur précédente. L'instruction li (load immediate) avec la constante zéro fait de même.

Exemple

xor t0, t0, t0   # t0 = 0