命令セット・アセンブリ
RISC-Vの疑似命令「ret」は、実際にはどの命令として実行されるか。
- Ajal ra, 0
- Bjalr x0, 0(ra)
- Clw ra, 0(sp)
答えと解説を見る
正解:B. jalr x0, 0(ra)
jalr(jump and link register)は、レジスタの値にオフセットを足した番地へジャンプし、次の命令の番地を書き込み先に入れます。retは「jalr x0, 0(ra)」で、raの番地へ飛び、リンクはx0に捨てます。jalrは関数ポインタや仮想関数の呼び出しのように、行き先が実行時に決まるジャンプにも使われます。raを復元する「lw ra, …」はretの前に行う準備です。
- A. raを上書きしてしまい、戻れません。
- B. 正しい。raの番地へ飛び、戻り先は捨てます。
- C. raをメモリから読むだけで、戻りません。