スタックポインター
読み:スタックポインター
外語:stack pointer

 スタックの現在位置を示すレジスター
目次

概要
 プロセッサーにより、レジスターが専用に用意されているものと、用意されていないものがある。専用レジスターがない場合は汎用レジスターで代用することになる。
 例えば、Windowsパソコンで使われているx86は専用レジスターがあるが、スマートフォンで使われている32ビットのARMは専用レジスターがなかった(64ビットARMでは専用レジスターが追加された)。

特徴

動作
 動作はプロセッサーごとに異なるので一般論になるが、通常、スタックポインターは最後にpushした値の先頭アドレスを指している。ただし実装によっては、次にpushされる先頭アドレスを指していることもある。
 また、スタックの延びていく方向、つまりスタックに積む(pushする)場合に、アドレスが減るか増えるかも実装ごとに様々ある。

実装方法
 ARMの用語を借りると、スタック制御は次の4種類がある。ストア(push)とロード(pop)で、おのおの選択される。
 ストアとロードが4種類を選択するので、理論上は4×4で16通りとなる。しかし実際には、ストアしたものは後でロードする前提なので、SPの動きは相互に補完的でなければならない。
 結果として、現実には次の4種類の組み合わせのどれかが使われている(こちらもARMの用語)。

一般的な挙動
 x86の場合、ARMの用語を借りればFD(Full Descending)に対応する。次の動作をする。
 ARMの場合は4種類から自由に選択できるが、実際にはx86と同様に、FD(Full Descending)で使われることが多いようである。

再検索