命令セット・アセンブリ
RISC-Vで定数0x12345FFFをluiとaddiの2命令で作るとき、正しい組み合わせはどれか。
- Alui t0, 0x12346 の後に addi t0, t0, -1
- Blui t0, 0x12345 の後に addi t0, t0, 0xFFF
- Clui t0, 0x12345 の後に addi t0, t0, -1
答えと解説を見る
正解:A. lui t0, 0x12346 の後に addi t0, t0, -1
addiの即値は符号拡張されるので、下位12ビットが0xFFF(最上位ビットが1)のときは-1として足されます。そこでluiで作る上位を1つ大きい0x12346にしておき、0x12346000に-1を足して0x12345FFFを得ます。下位12ビットのビット11が1のときは上位に1を足しておく、というこの補正は、アセンブラやリンカが自動で行います。
- A. 正しい。0x12346000-1=0x12345FFFです。
- B. 12ビットの0xFFFは符号拡張されて-1として足されます。
- C. 0x12345000-1=0x12344FFFになってしまいます。