xor

xor

Ensamblador RISC-V Referencia

lyszt.net cubre xor y otras instrucciones RISC-V con más detalle.

Formato de codificación

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

Descripción

xor es una instrucción bit a bit. Al igual que and y or, opera sobre las 32 posiciones de un registro (la página de and cubre las operaciones bit a bit). El nombre significa OR exclusivo. En cada posición, el resultado es 1 cuando los dos bits de entrada difieren, uno 0 y otro 1, y 0 cuando coinciden. La forma siguiente aplica esto a rs1 y rs2 y escribe el resultado en rd.

xor rd, rs1, rs2

Dos propiedades hacen útil a XOR. Un valor al que se le aplica XOR consigo mismo da 0, ya que cada bit coincide consigo mismo, por lo que la siguiente línea pone un registro a cero.

xor t0, t0, t0

XOR con una máscara invierte los bits donde la máscara tiene un 1 y deja los demás sin cambios. Invertir dos veces restaura el valor original. El cifrado simple y las comprobaciones de errores dependen de esto.

XOR también comprueba la igualdad. Después de la línea siguiente, t2 es cero cuando las dos entradas eran idénticas y distinto de cero cuando difieren, y una bifurcación puede comprobar el resultado.

xor t2, t0, t1

El manual de RISC-V incluye xor entre las operaciones registro-registro, que leen rs1 y rs2 y escriben el resultado en rd. Realiza un OR exclusivo lógico bit a bit.

El ejemplo pone t0 a 0 sea cual sea el valor que tuviera antes. La instrucción li (load immediate) con la constante cero hace lo mismo.

Ejemplo

xor t0, t0, t0   # t0 = 0