命令セット・アセンブリ

RISC-Vの命令「jal ra, func」の動作として正しいものはどれか。

  1. A次の命令の番地をraに保存してから、funcへジャンプする
  2. Bfuncの番地をraに入れるだけで、ジャンプはしない
  3. Craに入っている番地へ戻る
答えと解説を見る

正解:A. 次の命令の番地をraに保存してから、funcへジャンプする

jal(jump and link)は、自分の次の命令の番地(PC+4)を指定したレジスタに書き込み(リンク)、目的の番地へジャンプします。呼び出し規約では戻り先をra(x1)に入れるので、関数の呼び出しは「jal ra, func」、疑似命令では「call func」と書きます。呼ばれた関数は、処理の最後にraの番地へ戻ります。書き込み先をx0にすると、ただのジャンプになります。

  • A. 正しい。関数呼び出しに使う命令です。
  • B. jalはジャンプも行います。
  • C. 戻るのはret(jalr)です。
この分野を解く 分野ページへ

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

  1. RISC-Vの疑似命令「ret」は、実際にはどの命令として実行されるか。
  2. 呼び出し規約(コーリングコンベンション)が決められている主な目的はどれか。
  3. RISC-Vの標準の呼び出し規約で、整数の引数と戻り値の受け渡しに使うレジスタとして正しいものはどれか。
  4. RISC-Vの標準の呼び出し規約で、整数の引数が10個ある関数を呼ぶとき、9個目と10個目の引数はどこで渡されるか。
  5. RISC-Vの呼び出し規約で、s0〜s11が「呼び出し先保存(callee-saved)」のレジスタとされている意味として正しいものはどれか。