or
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つのビットをオンにして他をそのままにしたい場合は、その位置だけ1を持つマスクと値のORを取ります。1つのレジスタに詰め込まれた設定やフラグは、この方法でオンに切り替えられます。
ORは値のマージも行います。2つの値が重ならない位置にシフトされている場合、1回のORでそれらを1つのレジスタに結合できます。赤、緑、青の別々の値を1つの色に結合するのも同じ方法です。
RISC-Vのマニュアルでは、orはレジスタ間演算の1つとして挙げられています。ソースレジスタrs1とrs2を読み取り、ビット単位の論理ORを実行し、結果をデスティネーションレジスタrdに書き込みます。
ORはビットを1にセットすることしかできません。ビットをクリアするにはマスクとのANDを、ビットを反転するにはXORを使います。oriはレジスタと固定定数のORを取るバージョンです。
例
li t0, 0b1100 li t1, 0b0011 or t2, t0, t1 # t2 = 0b1111
