バックアップTweet追加された行はこの色です。削除された行はこの色です。[#hbe32611]・後入れ先出し型(一番後に入れるものから先に取り出す)のデータ構造を''スタック''と呼ぶ。Pointer:スタックポインタ)''とはスタック最上段のアドレスを保持している16ビットのレジスタである。スタックの中身ではなく、スタックのどの部分を今処理中かということを指し示すポインタである。・''PR''は次の処理に対応するアドレスを保持している16ビットのレジスタである。[#l9ed342f]・プログラム起動時に十分な容量のスタック領域をメモリに確保する。・スタック領域の最後のアドレスに1を加算した値をSPに設定する。F式表記を見てもらえればわかるが、CALL命令で副プログラムに飛んだとき、スタックの中にCALL命令の次のアドレス(普通はRET命令がある)が代入される。副プログラムから復帰したときどこにジャンプしたらよいかという情報を残すために、スタックにそのアドレスが代入されるのである。COMET�では、GR0からGR7までの8個の汎用レジスタしか使用できない。複雑なプログラムでは汎用レジスタが明らかに足りなくなる。通常、大きなプログラムは複数の副プログラム(サブルーチン)に分割して作られる。副プログラムので、主プログラムが使っている汎用レジスタをそのまま使ってしまうと、副プログラムが終わって主プログラムに戻ってから前に汎用レジスタに代入したものを使おうと思っても、もうデータは上書きされてしまいなくなってしまう。この問題を解決するためには、まず主プログラムで使用した汎用レジスタの値を一旦スタックにすべて記録しておき、その後で副プログラムにジャンプさせればよい。すれば副プログラムで汎用プログラムを思う存分使うことができ、リターンで主プログラムに戻ってきたらスタックから汎用レジスタにまた戻してやればよいのだ。ちなみに、PUSH命令で一番最後にスタックに入れたものからPOP命令で取り出されることを忘れてはならない。PUSH命令でGR0,...,GR7の順でレジスタからスタックへ退避させた場合、POP命令でGR7,...,GR0の順でスタックからレジスタに戻してやる。例:例:トレースしてみればわかる。