or

or

Ensamblador RISC-V Referencia

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

or es una instrucción bit a bit, por lo que opera sobre los 32 bits de un registro de forma independiente (la página de and lo explica). En una posición de bit, el resultado es 1 si cualquiera de los bits de entrada es 1 o si ambos lo son. El resultado es 0 solo cuando ambas entradas son 0. La forma siguiente aplica esto a las 32 posiciones de rs1 y rs2 y escribe el resultado en rd.

or rd, rs1, rs2

OR establece bits. Para activar un bit y dejar los demás como estaban, se hace OR del valor con una máscara que tenga un 1 solo en esa posición. Los ajustes y las banderas empaquetados en un registro se activan de esta manera.

OR también fusiona valores. Cuando dos valores se desplazan a posiciones que no se solapan, un solo OR los combina en un único registro. Los valores separados de rojo, verde y azul se combinan en un solo color de la misma manera.

El manual de RISC-V incluye or entre las operaciones registro-registro. Lee los registros fuente rs1 y rs2, realiza un OR lógico bit a bit y escribe el resultado en el registro destino rd.

OR solo puede poner bits a 1. Borrar un bit requiere AND con una máscara, e invertir un bit requiere XOR. ori es la versión que hace OR de un registro con una constante fija.

Ejemplo

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