[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第51回]
●GOSUB,RETURN(2)
前回はGOSUB文について説明しました。
今回はRETURNについて説明をします。
RETURN文はスタックから「戻り先」のアドレス(GOSUB文の次のアドレス)を得ることで、そのサブルーチンを呼んだGOSUB文の次のアドレスに戻ってそこから続きを実行します。
RETURN:の先頭でCALL ENDCHKを実行しています。
RETURN文はCRで終わらなければなりません。
RETURN文のある行ではRETURNの後ろには何も書くことができません。
RETURNの後ろに何かを書いても実行することができないからです。
ENDCHKはCRコードを確認します。
0DコードではなかったときはWHAT?が表示されます。
ENDCHKについてはいずれ説明をします。
その次のところでSTKGOSの値をHLに読み込んで、SPHLでSPにセットします。
STKGOSが0のときはWHAT?が表示されます。
STKGOSは前回説明をしました。
GOSUB文が実行されたときにそのときのSPの値がSTKGOSにセットされます。
GOSUB文が実行されていないときはSTKGOSには初期値の0が入れられたままです。
そのあと
POP H
SHLD STKGOS
でスタックに退避されていた以前のSTKGOSの値がもとに戻されます。
次の
POP H
SHLD CURRNT
POP D
でこのサブルーチンをCALLしたGOSUB文の行の先頭アドレスがCURRNTに戻され、GOSUB文の次のアドレスがDEに戻されます。
そのあとのPOPAはGOSUB文の先頭で実行したPUSHAで退避したFOR文のパラメータを元に戻すために実行します。
PUSHA、POPAはいずれ説明します。
RST 6は[第12回]で説明しましたが、そこだけではちょっと説明不足です。
RST 6ではFINをCALLしています。
FINは[第23回]で説明をしています。
DEで示されるメモリの値を読んで、それが’;’であればその行内の次の命令文を実行します(DEにはアドレス01F3のPOP DでGOSUB文の次のアドレスが入っています)。
0Dコードであれば次の行が実行されます。
復活!TINY BASIC[第51回]
2020.7.29upload
前へ
次へ
ホームページトップへ戻る