or

or

RISC-V 汇编 参考

lyszt.net 更详细地介绍了 or 和其他 RISC-V 指令。

编码格式

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

描述

or 是按位指令,因此它独立作用于寄存器的 32 个位(and 页面解释了这一点)。在某个位位置上,只要任一输入位为 1 或两者都为 1,结果就是 1。只有当两个输入都为 0 时,结果才为 0。下面的形式将其应用于 rs1 和 rs2 的全部 32 个位置,并将结果写入 rd。

or rd, rs1, rs2

OR 用于置位。要打开某一位而保持其他位不变,可将该值与一个仅在该位置为 1 的掩码进行 OR。打包在一个寄存器中的设置和标志就是这样被打开的。

OR 也可用于合并值。当两个值被移位到互不重叠的位置时,一次 OR 就能将它们合并到一个寄存器中。单独的红色、绿色和蓝色值也以同样的方式合并为一种颜色。

RISC-V 手册将 or 列为寄存器-寄存器运算之一。它读取源寄存器 rs1 和 rs2,执行按位逻辑 OR,并将结果写入目标寄存器 rd。

OR 只能将位设置为 1。清除某一位需要用掩码进行 AND,翻转某一位需要用 XOR。ori 是将寄存器与固定常量进行 OR 的版本。

示例

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