命令セット・アセンブリ
RISC-Vの標準の呼び出し規約では、関数に入るときのスタックポインタspを16バイトの倍数にそろえることになっている。その理由として最も適切なものはどれか。
- Aスタックの容量が16バイトの倍数でないと、OSが起動しないから
- Bspの下位4ビットに関数の番号を記録するから
- C16バイトまでの大きなデータをスタックに置いても、境界をまたがずに効率よく読み書きできるから
答えと解説を見る
正解:C. 16バイトまでの大きなデータをスタックに置いても、境界をまたがずに効率よく読み書きできるから
データは大きさの倍数の番地に置く(整列する)と、境界をまたがずに1回で読み書きできます。spを常に16の倍数にしておけば、8バイトのdoubleや16バイトのlong doubleなどをスタックに置いても整列が保たれます。そのため関数はフレームの大きさを16の倍数で確保し、保存するレジスタが1つでも「addi sp, sp, -16」とします。
- A. OSの起動とは関係ありません。
- B. spの下位ビットに情報を入れることはありません。
- C. 正しい。倍精度や128ビットのデータの整列のためです。