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

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



[第68回]


●EXPR(EXPR1)

今回は式計算プログラムのトップ階層のサブルーチン、EXPRについて説明をします。
EXPRはEXPR2を関係演算子でつないだ構造をしています([第63回]参照)。
実はEXPRのエントリ部分はRST 3になっています。
RST 3は[第11回]でエントリ部分について簡単に説明をしました。
最初にEXPR2をCALLしてその計算結果をスタックに保存したあとEXPR1にジャンプします。
下がEXPR1のプログラムリストです。



HLレジスタにテーブルTAB8のアドレス−1を入れてEXECにジャンプします。
TAB8は[第22回]でそのほかのテーブルと共に簡単に説明をしました。
下にTAB8の部分のみを再掲します。



見ての通りで関係演算子のテーブルです。

EXECは[第20回]で説明をしました。
文字列が一致したときはその次の2バイトが示すアドレス(最上位ビットを0に戻すと得られる)にジャンプします。
不一致のときはその次の文字列との比較を行ないます。
’>=’は0333(XP11)にジャンプします。
’#”は0339(XP12)にジャンプします。
’>’は033F(XP13)にジャンプします。
’=”は034E(XP15)にジャンプします。
’<=’は0346(XP14)にジャンプします。
’<”は0354(XP16)にジャンプします。
上記のいずれとも一致しなかったときは035A(XP17)にジャンプします。
上記のジャンプ先は全て今回の最初のところでお見せしたEXPR1のリスト中のアドレスです。
035A(XP17)では関係式ではなかったということで、最初にスタックに保存したEXPR2の値をHLレジスタに戻してリターンします。

XP17以外ではXP18(アドレス035C)をCALLします。

ところがXP18:ではおかしなことをやっています。
ちょっと見には意味不明なプログラムです。
しかしその意味がわかってくると、やっぱりこれは熟練の技だなあ、と思わずうなってしまいます。

その説明をしようとするとちょっと長くなってしまいそうですので、今回はここまでにして、その説明は次回にすることにいたします。

復活!TINY BASIC[第68回]
2020.8.18upload

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