命令セット・アセンブリ
RISC-Vの関数の先頭で「addi sp, sp, -16」を実行する目的として正しいものはどれか。
- Aスタックを番地の小さい方へ伸ばして、16バイトの作業領域を確保する
- Bスタック上の16バイトを解放する
- Cspに入っている値から16を引いて、戻り値として返す
答えと解説を見る
正解:A. スタックを番地の小さい方へ伸ばして、16バイトの作業領域を確保する
RISC-Vを含む多くのISAの慣習では、スタックは番地の大きい方から小さい方へ伸びます。spを16減らすと、新しいspから元のspまでの16バイトが、この関数のスタックフレームになり、戻り先や保存したレジスタ、局所変数を置けます。関数の終わりに「addi sp, sp, 16」でspを戻すと領域が解放され、呼ぶ前と同じ状態になります。
- A. 正しい。スタックは番地の小さい方へ伸びます。
- B. 解放は最後の「addi sp, sp, 16」です。
- C. 戻り値はa0で返します。