機械語にはPUSH,POPという命令があります。
PUSHはスタックエリア内にデーターを上積みしていくような命令で、POPはその逆で上から取り出していくような命令です。
これは機械語のプログラムを組むときにはとても重宝するものですが、こんな便利なものをBASICで使わないなんてなんとももったいない話しです。
そうは言ってもそんな命令なんてBASIC言語にはありません。
そこでこの働きをシミュレートしてみようというのが今回のテーマです。
こんな感じで使います。
REM /// MAIN ///
GOSUB *INIT
:
A=☆
GOSUB *PUSH
:
A=★
GOSUB *PUSH
:
GOSUB *POP
X=A
:
GOSUB *POP
Y=A
:
END
REM /// SUB ///
*INIT
P=100:DIM S(Pー1)
RETURN
*PUSH
P=P-1:S(P)=A
RETURN
*POP
A=S(P):P=P+1
RETURN
変数Aの値をスタックエリアS(P)にPUSHして蓄えておき、必要な時にスタックエリアS(P)からPOPして取り出します。
実際の話、どんな時に使えるかと言いますと、、、
例えばゲーム。。。
『迷路』などで、今の場所をPUSHして記録をしながら進んで行き、POPをしながら来た道を戻って行く。という使い方があります。
今回は配列変数へ格納しましたが、POKE,PEEKを使用して格納場所をメモリにしても良いでしょうし、文字変数にしても良いと思います。
また、機械語と同様、スタックポインタPを直接操作することも可能です。
この使い方をマスターすれば、機械語を始めた際、すぐに応用が利かせられると思いますからぜひ皆さんも試してみてね!