ori

ori

RISC-V アセンブリ 参考

lyszt.netはoriおよびその他の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

説明

ori は定数とのビット単位 OR を実行します。or との関係は andi と and の関係と同じです。i は即値(immediate)、つまり命令にエンコードされた固定値を意味します。ori は 2 つのレジスタを OR するのではなく、レジスタとその定数を OR します。OR の規則は変わりません。結果のビット位置は、どちらかのビットが 1 であれば 1 になるため、定数は選んだビットをセットします。演算の詳細は or のページで説明されています。

ori の形式は以下のとおりです。rs1 の値と定数 imm を OR し、結果を rd に書き込みます。

ori rd, rs1, imm

OR はビットをセットし、残りはそのままにするので、ori はどのフラグをオンにしたいか分かっているときに特定のフラグをオンにします。次の行は t0 の右から 3 番目のビットをオンにし、他のすべてのビットは変更しません。0b 接頭辞は 2 進定数を示します。

ori t0, t0, 0b100

構成レジスタ、許可フラグ、ステータスワードは独立したオンとオフのビットを持ち、ori はマスクレジスタなしで 1 つの命令で選んだビットをオンにします。

RISC-V マニュアルには、12 ビットの即値は演算の前に 32 ビットに符号拡張されると記載されています。したがって、負の定数は上位ビットがすべてセットされ、-1 との ori は結果のすべてのビットをセットします。

定数は andi や addi と同様に 12 ビットに制限されます。その範囲外のビットをセットするには、li でより広いマスクをレジスタにロードし、or を使用します。

例

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