ori

ori

Ensamblador RISC-V Referencia

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

ori realiza una OR bit a bit con una constante. Su relación con or es la misma que la de andi con and. La i significa inmediato, un valor fijo codificado en la instrucción. ori aplica OR a un registro con esa constante en lugar de aplicar OR a dos registros. La regla de OR no cambia. Una posición de bit en el resultado es 1 cuando cualquiera de los bits allí es 1, por lo que la constante establece los bits que elijas. La página de or cubre la operación.

La forma de ori aparece a continuación. Aplica OR al valor en rs1 con la constante imm y escribe el resultado en rd.

ori rd, rs1, imm

OR establece bits y deja el resto como estaban, por lo que ori activa flags específicos cuando sabes cuáles quieres. La siguiente línea activa el tercer bit desde la derecha en t0 y deja todos los demás bits sin cambios. El prefijo 0b marca una constante binaria.

ori t0, t0, 0b100

Los registros de configuración, los flags de permisos y las palabras de estado contienen bits de activado y desactivado independientes, y ori activa los elegidos en una sola instrucción sin registro de máscara.

El manual de RISC-V indica que el inmediato de 12 bits se extiende con signo a 32 bits antes de la operación. Por lo tanto, una constante negativa tiene todos sus bits superiores establecidos, y ori con -1 establece todos los bits del resultado.

La constante está limitada a 12 bits, al igual que con andi y addi. Para establecer bits fuera de ese rango, carga la máscara más amplia en un registro con li y usa or.

Ejemplo

li t0, 0
ori t1, t0, 0xf   # t1 = 0xf