or

or

Assembly RISC-V Referência

lyszt.net aborda or 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

or é uma instrução bit a bit, então ela opera nos 32 bits de um registrador de forma independente (a página and explica isso). Em uma posição de bit, o resultado é 1 se qualquer bit de entrada for 1 ou se ambos forem. O resultado é 0 apenas quando ambas as entradas são 0. A forma abaixo aplica isso a todas as 32 posições de rs1 e rs2 e escreve o resultado em rd.

or rd, rs1, rs2

OR define bits. Para ligar um bit e deixar os outros como estavam, faça OR do valor com uma máscara que tenha 1 apenas naquela posição. Configurações e flags empacotadas em um único registrador são ligadas dessa forma.

OR também mescla valores. Quando dois valores são deslocados para posições que não se sobrepõem, um único OR os combina em um único registrador. Valores separados de vermelho, verde e azul se combinam em uma única cor da mesma forma.

O manual do RISC-V lista or entre as operações registrador-registrador. Ela lê os registradores de origem rs1 e rs2, realiza um OR lógico bit a bit e escreve o resultado no registrador de destino rd.

OR só pode definir bits para 1. Limpar um bit requer AND com uma máscara, e inverter um bit requer XOR. ori é a versão que faz OR de um registrador com uma constante fixa.

Exemplo

li t0, 0b1100
li t1, 0b0011
or t2, t0, t1   # t2 = 0b1111