スタックポインター

読み:スタックポインター
外語:stack pointer 英語
品詞:名詞

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

目次

プロセッサーにより、レジスターが専用に用意されているものと、用意されていないものがある。専用レジスターがない場合は汎用レジスターで代用することになる。

例えば、Windowsパソコンで使われているx86は専用レジスターがあるが、スマートフォンで使われている32ビットのARMは専用レジスターがなかった(64ビットARMでは専用レジスターが追加された)。

動作

動作はプロセッサーごとに異なるので一般論になるが、通常、スタックポインターは最後にpushした値の先頭アドレスを指している。ただし実装によっては、次にpushされる先頭アドレスを指していることもある。

また、スタックの延びていく方向、つまりスタックに積む(pushする)場合に、アドレスが減るか増えるかも実装ごとに様々ある。

実装方法

ARMの用語を借りると、スタック制御は次の4種類がある。ストア(push)とロード(pop)で、おのおの選択される。

  • IB Increment Before ‐ 最初にSPを増分
  • IA Increment After ‐ 後でSPを増分
  • DB Decrement Before ‐ 最初にSPを減分
  • DA Decrement After ‐ 後でSPを減分

ストアとロードが4種類を選択するので、理論上は4×4で16通りとなる。しかし実際には、ストアしたものは後でロードする前提なので、SPの動きは相互に補完的でなければならない。

結果として、現実には次の4種類の組み合わせのどれかが使われている(こちらもARMの用語)。

  • FD Full Descending (ロードIA、ストアDB)
  • ED Empty Descending (ロードIB、ストアDA)
  • FA Full Ascending (ロードDA、ストアIB)
  • EA Empty Ascending (ロードDB、ストアIA)

一般的な挙動

x86の場合、ARMの用語を借りればFD(Full Descending)に対応する。次の動作をする。

  • スタックにストアする(pushする)場合は、最初にSPを減分してから、そこに値を書き込む。
  • スタックからロードする(popする)場合は、値を読みこんでから、後でSPを増分する。

ARMの場合は4種類から自由に選択できるが、実際にはx86と同様に、FD(Full Descending)で使われることが多いようである。

用語の所属
SP
関連する用語
スタック
レジスター
汎用レジスター

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club