Subsections
スタック(stack)を辞書で調べてみると,次のような意味が書かれている.
- (干し草などの)大きな山,積みわら(haystack);(物のきちんとした)積み重ね
- (図書館などの)書棚の列,書架;((the 〜s)) (図書館の)(閉架)書庫
- (屋上の)組み合わせ煙突(chimney stack);煙突,煙出し
- 《コンピューター》スタック:最後に入れたデータを最初に取り出せるようにしたデータ構造
もちろん,情報科学の分野で使われるのは最後の意味で,図
1のようなデータ構造で
ある.データ構造であるから,データを蓄えることと,それを取り出すことができる.ス
タックの特徴は,最後に入れたデータが一番最初に取り出されることにある.取り出され
るデータは,格納されている最新のデータで,最後に入れられたものが最初に取り出され
ることから,LIFO(last in first out, 後入れ先出し)と呼ばれる.スタックの途中のデー
タを取り出すことは許されないのである.
スタックにデータを積むことをプッシュ(push)と,スタックからデータを取り出すことを
ポップ(pup)と呼ぶ.これらの英語の意味は,
- push
- <人・物を>押す,突く
- pop
- ポンという音を立てる,ひょいとやって来る[出て行く],急にはいる[出る],
ひょっこり現れる
である.
図 1:
スタックのイメージ.メモリーへデータの出し入れをする.
|
COMET IIの場合,スタック領域は主記憶(メインメモリー)のどこかに必要量確保されてい
る.確保されているアドレスはプログラマーは気にすることなく,PUSHとPOP
の命令を使うことができる.実際にスタック領域の最上位のアドレスはSP(スタック
ポインター)に格納されており,その操作はOSの仕事である.
スタックは極めて単純なデータ構造なので,それを実際のコンピューターに実装すること
は易しい.単純ではあるが,それはかなり頻繁に使われる.もっとも多く使われるのが,
サブルーチンを呼び出すときに,一時的にデータを避難させる場合である.実際にはコン
パイルした後で出てくるのでプログラマーが直に記述することは少ないが,本当によく使
われている.
CASL IIのプログラムでもっとも多く使われる場面は,サブルーチンを呼び出すときにデー
タを一時的に雛させる場合である.これについては,後ほど,実際のプログラムで学習す
ることになる.
命令語 |
POP |
語源 |
POP (push:押す) |
役割 |
スタック領域にデータを格納する. |
書式 |
[ラベル] PUSH adr[,x] |
動作 |
SPの値を1減らす.そして,スタック領域へアドレスを格納する. |
フラグレジスタ |
変化無し.
|
PUSH DATA ;DATAが示すアドレスをスタック領域に格納
PUSH 23 ;23をスタック領域に格納
PUSH 0,GR1 ;GR1の内容をスタック領域に格納
命令語 |
POP |
語源 |
POP (pop:出る) |
役割 |
スタック領域からデータを取り出す. |
書式 |
[ラベル] POP r |
動作 |
スタックポインターSPが示しているアドレスの内容を取り
出してレジスターに格納する.そして,SPの値を1増やす. |
フラグレジスタ |
変化無し.
|
PUP GR1 ;スタック領域の最上段の値をGR1へ格納
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
2006-02-08