#02:スタックポインタの役割を理解しよう
ここでは、スタックポインタの役割を学習します。スタックポインタは、多くのCPUが持っているレジスタのひとつで、CPUのデータを一時的に退避する、サブプログラムを呼び出すといった用途で使います。
スタック(Stack):データを一時的に退避させる仕組み
- 入ってきた順番に、積み重ねる
- 取り出すときは、最後に入れたものから取り出す
- 後から入れたものを先に出す(LIFO: Last In First Out)、
先に入れたものを後から出す(FILO: First In Last Out)
- Push:スタックにデータを入れる
- Pop :スタックからデータを取り出す
- レジスタ値の一時保存
- サブルーチンの呼び出し
スタックを実現するためのレジスタ
- 16ビットで、メモリアドレスを保持する
- メモリに、スタック領域を確保しておく
最初に、スタックポインタは、スタック領域の最終アドレスの「+1」を保持
- データをPush:
スタックポインタの値を「-1」
現在のスタックポインタのアドレスにデータを格納
- データをPop:
現在のスタックポインタのアドレスからデータを取り出す
スタックポインタの値を「+1」
- PUSH/POP:スタックに値を出し入れする機械語命令。
- CALL/RET:サブルーチンを呼び出す、サブルーチンから戻るための機械語命令
- RPUSH/RPOP:GR1 - GR7の値をスタックに出し入れするマクロ命令。GR0は格納できない。
スタックとは - IT用語辞典 e-Words
http://e-words.jp/w/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF.html
LIFO(FILO)とは - IT用語辞典 e-Words
http://e-words.jp/w/LIFO.html
CASLIIアセンブラ & シミュレータ PyCASL2 & PyCOMET2
http://www.image.med.osaka-u.ac.jp/member/nakamoto/pycasl2/index.html
CASL - Wikipedia
https://ja.wikipedia.org/wiki/CASL
アセンブラ言語CASL2の仕様
https://www.chiba-fjb.ac.jp/fjb_labo/casl/CASL2spec.html#2-3
システムCOMET2の仕様
https://www.chiba-fjb.ac.jp/fjb_labo/casl/COMET2spec.html
CPU - コンピュータの基礎知識 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/computer/CPU.html