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

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



[第56回]


●FORプログラム

今回はFORプログラムについて説明をします。



先頭のPUSHAは[第54回]で説明をしました。
現在アクティブなFORループがあるときはそのFOR変数領域をスタックに保存します。
アクティブなFORループがないときはスタックには0000だけを保存します。
次のSETVALは前回([第55回])説明をしました
変数名=式
を解読して式の値を変数のメモリアドレスに書き込みます。
SETVALの実行によって変数の上位アドレスがHLに入っていますから、DCX Hを実行してHLの値を変数の下位アドレスにした上でその値をLOPVARにセットします。
その次の
LXI H,TAB5−1
JMP EXEC
は文字列’TO’をチェックします。
それと
020C LXI H,TAB6−1
JMP EXEC
は文字列’STEP’をチェックします。
そのための文字テーブルを下に示します。



EXECは[第20回]で説明をしました。
文字列’TO’がみつかったときはアドレス0716、0717の値の最上位ビットを0に戻してそのアドレス(0208)にジャンプします。
0208はFORプログラムリストのFR1:のアドレスです。
文字列’TO’がみつからなかったときはアドレス0718、0719の値の最上位ビットを0に戻してそのアドレス(04C6)にジャンプします。
04C6はそのうち説明するつもりですがWHAT?表示ルーチンです。

文字列’TO’がみつかったときはFR1:からFORプログラムの続きが実行されます。
RST 3は[第11回]で少しだけ説明をしています。
式を計算して結果をHLに入れます。
’TO’で示す値ですからFOR文の限界値です。
その値をLOPLMTに入れます。

その次の
LXI H,TAB6−1
JMP EXEC
は文字列’STEP’をチェックします。
上のテーブルのTAB6:が’STEP’のテーブルです。
’STEP’がみつかったときはアドレス0212(FR2:)にジャンプします。
みつからなかったときは0216(FR3:)にジャンプします。

FR2:でもRST 3が実行されます。
ここで’STEP’の値が計算され、結果はHLに入れられます。
そのあとFR4:にジャンプします。
FR3:は’STEP’がなかったときの処理です。
刻み値として0001をHLに入れます。
FR4:でHLに入れた刻み値をFORINCに入れます。
ここまででFOR文の解読は終わりです。
FOR文のある行の先頭のアドレスがCURRNTに入っています。
それをLOPLNに入れます。
このときDEレジスタにはFOR文の次のアドレスが入っています。
XCHG
SHLD LOPPT
でその値をLOPPTに入れます。

説明が長くなってしまいましたので、途中ですが今回はここまでで終ります。
続きは次回にいたします。

復活!TINY BASIC[第56回]
2020.8.4upload

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