xor

xor

Assembly RISC-V Referência

lyszt.net aborda xor e outras instruções RISC-V com mais detalhes.

Formato de codificação

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

Descrição

xor é uma instrução bit a bit. Assim como and e or, ela opera sobre as 32 posições de um registrador (a página and cobre operações bit a bit). O nome significa OR exclusivo. Em cada posição, o resultado é 1 quando os dois bits de entrada diferem, um 0 e um 1, e 0 quando são iguais. A forma abaixo aplica isso a rs1 e rs2 e escreve o resultado em rd.

xor rd, rs1, rs2

Duas propriedades tornam o XOR útil. Um valor submetido a XOR consigo mesmo resulta em 0, já que cada bit corresponde a si próprio, então a linha seguinte zera um registrador.

xor t0, t0, t0

XOR com uma máscara inverte os bits onde a máscara tem um 1 e deixa os demais inalterados. Inverter duas vezes restaura o valor original. Criptografia simples e verificações de erro dependem disso.

XOR também testa igualdade. Após a linha abaixo, t2 é zero quando as duas entradas eram idênticas e diferente de zero quando diferem, e um desvio pode testar o resultado.

xor t2, t0, t1

O manual do RISC-V lista xor entre as operações registrador-registrador, que leem rs1 e rs2 e escrevem o resultado em rd. Ela realiza um OR exclusivo lógico bit a bit.

O exemplo zera t0 para 0, independentemente do que ele continha antes. A instrução li (load immediate) com a constante zero faz o mesmo.

Exemplo

xor t0, t0, t0   # t0 = 0