命令セット・アセンブリ

上のRISC-Vのコードを実行し終えたとき、t0の値はいくらか。

      li   t0, 0
      li   t1, 4
loop: add  t0, t0, t1
      addi t1, t1, -1
      bnez t1, loop
  1. A4
  2. B10
  3. C6
答えと解説を見る

正解:B. 10

t1を4から1つずつ減らしながら、t0にt1を足していきます。t0は4、7、9、10と増え、t1が0になったところでbnez(0でなければ分岐)が分岐しなくなり、ループを抜けます。結果は4+3+2+1=10です。bnezは「bne t1, zero, loop」の疑似命令です。カウンタを減らして0と比べる形は、比較用の定数が要らないのでよく使われます。

  • A. ループは1回では終わりません。
  • B. 正しい。4+3+2+1=10です。
  • C. t1=1のときの加算も含めます。
この分野を解く 分野ページへ

命令セット・アセンブリのほかの問題

  1. RISC-Vの条件分岐命令(B形式)は、分岐先までの距離を13ビットの符号付きのバイト数で表し、その最下位ビットは常に0として命令に入れない。分岐命令が直接届く範囲としておよそ正しいものはどれか。
  2. RISC-Vの命令「jal ra, func」の動作として正しいものはどれか。
  3. RISC-Vの疑似命令「ret」は、実際にはどの命令として実行されるか。
  4. 呼び出し規約(コーリングコンベンション)が決められている主な目的はどれか。
  5. RISC-Vの標準の呼び出し規約で、整数の引数と戻り値の受け渡しに使うレジスタとして正しいものはどれか。