命令セット・アセンブリ
RISC-Vの命令「jal ra, func」の動作として正しいものはどれか。
- A次の命令の番地をraに保存してから、funcへジャンプする
- Bfuncの番地をraに入れるだけで、ジャンプはしない
- 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)です。