2020.8.9
前へ
次へ
ホームページトップへ戻る

[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第60回]


●NEXTプログラム

前回まではFORプログラムについて説明をしてきました。
今回はFORループの終わりに置くNEXT命令のプログラムの説明です。



先頭のRST 7は[第13回]で説明をしました。
RST 7は変数名または配列名(以下「変数名」と表記します)を検出してそのアドレスをHLに入れてリターンします。
変数名がみつからなかったときはキャリーフラグがセットされます。
TINY BASICではNEXT命令には必ずFOR命令で定義したのと同じ変数名をつけます。
NEXT 変数名 の形です。
変数名は省略できません。
RST 7を実行してキャリーフラグが立ったときはWHAT?表示ルーチンにジャンプします。
変数名がみつかったときはそのアドレスをVARNXTに入れます。

NX0:PUSH D
はNEXT命令の次の位置のアドレスを保存するためです。
XCHGで変数名をDEレジスタに移動します。
次の
LHLD LOPVAR
MOV A,H
ORA L
JZ AWHAT
ではLOPVARから値をHLに読み込みます。
LOPVARにはFOR変数のアドレスが入っています。
その値が0ならFOR文が実行されていないことになりますから、WHAT?表示ルーチンにジャンプします。

次のRST 4は[第12回]で説明をしました。
RST 4はHLとDEを比較します。
HL=DEならFOR変数とNEXT変数が一致したことになりますからNX3:にジャンプして続きの処理を行ないます。
一致しなかった場合は
026C POP D
以下が実行されます。
026DのPOPAは[第55回]で説明をしました。
スタックからもうひとつ前のFOR変数領域の値を各変数に戻します。
その後NX0:に戻ってNEXT変数とFOR変数の比較チェックを続けます。
この部分の処理については[第53回]に書きました。
私はNEXT変数とFOR変数が不一致だったときはアドレス026CですぐにWHAT?表示を行なって処理を打ち切ってしまうほうがよいのではと思います。

説明の途中ですが、この先の説明がちょっと長くなりそうなので、今回はここまでにします。
次回に続きます。

復活!TINY BASIC[第60回]
2020.8.9upload

前へ
次へ
ホームページトップへ戻る