命令セット・アセンブリ
RISC-Vの呼び出し規約で、s0〜s11が「呼び出し先保存(callee-saved)」のレジスタとされている意味として正しいものはどれか。
- A呼ばれた関数がこれらを使うなら、元の値を保存しておき、戻る前に元に戻す
- B呼ぶ側の関数が、呼ぶ前に必ずすべて0にしておく
- COSだけが使えるレジスタで、ユーザのプログラムは使えない
答えと解説を見る
正解:A. 呼ばれた関数がこれらを使うなら、元の値を保存しておき、戻る前に元に戻す
呼び出し先保存のレジスタは、関数呼び出しをまたいで値が保たれることが約束されています。呼ばれた関数がs0などを使いたいときは、最初にスタックへ保存し、戻る前に元に戻します。呼ぶ側は、関数を呼んだ後も使い続けたい値をs系のレジスタに置いておけば、自分で保存し直す必要がありません。ループの変数などがよくここに置かれます。
- A. 正しい。呼ぶ側からは値が保たれて見えます。
- B. 0にする決まりはありません。
- C. ユーザのプログラムも普通に使えます。