Subsections

2 スタック操作

2.1 スタックとは

スタック(stack)を辞書で調べてみると,次のような意味が書かれている.
  1. (干し草などの)大きな山,積みわら(haystack);(物のきちんとした)積み重ね
  2. (図書館などの)書棚の列,書架;((the 〜s)) (図書館の)(閉架)書庫
  3. (屋上の)組み合わせ煙突(chimney stack);煙突,煙出し
  4. 《コンピューター》スタック:最後に入れたデータを最初に取り出せるようにしたデータ構造
もちろん,情報科学の分野で使われるのは最後の意味で,図1のようなデータ構造で ある.データ構造であるから,データを蓄えることと,それを取り出すことができる.ス タックの特徴は,最後に入れたデータが一番最初に取り出されることにある.取り出され るデータは,格納されている最新のデータで,最後に入れられたものが最初に取り出され ることから,LIFO(last in first out, 後入れ先出し)と呼ばれる.スタックの途中のデー タを取り出すことは許されないのである.

スタックにデータを積むことをプッシュ(push)と,スタックからデータを取り出すことを ポップ(pup)と呼ぶ.これらの英語の意味は,

push
<人・物を>押す,突く
pop
ポンという音を立てる,ひょいとやって来る[出て行く],急にはいる[出る], ひょっこり現れる
である.
図 1: スタックのイメージ.メモリーへデータの出し入れをする.
\includegraphics[keepaspectratio,scale=1.0]{figure/stack.eps}

COMET IIの場合,スタック領域は主記憶(メインメモリー)のどこかに必要量確保されてい る.確保されているアドレスはプログラマーは気にすることなく,PUSHPOP の命令を使うことができる.実際にスタック領域の最上位のアドレスはSP(スタック ポインター)に格納されており,その操作はOSの仕事である.

2.2 スタックの利用方法

スタックは極めて単純なデータ構造なので,それを実際のコンピューターに実装すること は易しい.単純ではあるが,それはかなり頻繁に使われる.もっとも多く使われるのが, サブルーチンを呼び出すときに,一時的にデータを避難させる場合である.実際にはコン パイルした後で出てくるのでプログラマーが直に記述することは少ないが,本当によく使 われている.

CASL IIのプログラムでもっとも多く使われる場面は,サブルーチンを呼び出すときにデー タを一時的に雛させる場合である.これについては,後ほど,実際のプログラムで学習す ることになる.

2.3 スタックを操作する命令

2.3.1 プッシュ(PUSH)

2.3.1.1 内容

命令語 POP
語源 POP (push:押す)
役割 スタック領域にデータを格納する.
書式 [ラベル] PUSH adr[,x]
動作 SPの値を1減らす.そして,スタック領域へアドレスを格納する.
フラグレジスタ 変化無し.

2.3.1.2 使用例

      PUSH   DATA         ;DATAが示すアドレスをスタック領域に格納
      PUSH   23           ;23をスタック領域に格納
      PUSH   0,GR1        ;GR1の内容をスタック領域に格納

2.3.2 ポップ(POP)

2.3.2.1 内容

命令語 POP
語源 POP (pop:出る)
役割 スタック領域からデータを取り出す.
書式 [ラベル] POP r
動作 スタックポインターSPが示しているアドレスの内容を取り 出してレジスターに格納する.そして,SPの値を1増やす.
フラグレジスタ 変化無し.

2.3.2.2 使用例

      PUP    GR1        ;スタック領域の最上段の値をGR1へ格納

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
2006-02-08


no counter