[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第29回]
●MVUPとMVDOWN
前回はFNDLNについて説明しました。
それで今回はメインループの説明の続きを書くつもりだったのですが、そのメインループの後半のところで出てくるサブルーチンMVUP、MVDOWNについて先に説明しておいたほうがよいと思いましたので予定を変更してMVUPとMVDOWNについて書くことにします。
下はMVUPサブルーチンとMVDOWNサブルーチンです。
どちらもメモリブロックの転送を行なうサブルーチンです。
MVUPはDEレジスタが示すメモリアドレスのデータをBCレジスタが示すメモリアドレスにMOVE(正確に言うと移動ではなくてコピー)します。
コピー後はDEレジスタとBCレジスタを+1しながらDE=HLになるまでその動作を続けます。
コピーを開始する前にRST 4を実行します。
RST 4は[第12回]で説明しました。
HLとDEの比較を行なうサブルーチンです。
DE=HLならリターンします。
MVDOWNはDEレジスタが示すメモリアドレスのデータをHLレジスタが示すメモリアドレスにMOVE(コピー)します。
コピーを開始する前にDEとBCの比較を行ないます。
DE=BCならリターンします。
MVUPと違って先にDEレジスタとHLレジスタを−1してからコピーします。
その動作をDE=BCになるまで続けます。
MVUPはDEが示すアドレスからHLが示すアドレスの1バイト前のアドレスまでのデータをBCが示すアドレスにコピーします。
DEとHLの関係はDE<=HLです。
またこのプログラムには明示されていませんがBC<DEでなければなりません。
最後にDE=HLになったとき、そのDEアドレスが示すデータはBCが示すアドレスにはコピーしないでリターンします。
MVUPはメインループでテキストエリアから1行を削除して前に詰めるときに使われます。
MVDOWNはMVUPよりもちょっとわかりにくい動作です。
MVDOWNはDEレジスタが示すアドレス−1からBCレジスタが示すアドレスまでのデータをHLレジスタが示すアドレス−1にコピーします。
先にDEとHLを−1してからコピーしますから、初期値のDE、HLが示すアドレスに対してはコピー動作は行なわれません。
MVUPとは逆にメインループで1行を挿入するために1行分のメモリスペースを空けるために使われます。
言葉で説明しただけではちょっとわかりにくいと思います。
とくにMVDOWNはこうやって説明してても、自分でも「うーむ、わからんなあ」と思ってしまいます。
実際にメインループで使われているところで、できれば図を使って説明することなどをしたいと考えています。
とりあえず今回はここまでで終ります。
復活!TINY BASIC[第29回]
2020.7.1upload
前へ
次へ
ホームページトップへ戻る