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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第27回]



●GOTO文(1)

GOTO文については[第1回]の最初のサンプルプログラムから特に説明も無く当たり前のようにして使ってきました。
GOTO 100
と書けばそれだけで何も説明しなくても、「ああ100行へ行くのだな」と普通に理解できてしまいます。
そこがBASICの最も良いところです。
ところがこのGOTO文こそが特にC、C++の信奉者様からは最も激しく排斥されるBASIC命令なのだそうであります。
確認してみますと一応C++にもGOTO文は組み込まれているようなのでありますが(使えないものもあるらしい)、しかしネット上には否定的なコメントが充満しております。
うーん。
言ってることはわからんこともないのですけれど。
巨大なシステムプログラムを書こうなどというのではないのですよ。
たかだかPICのための簡単な制御プログラムを書くのが目的なのですから、便利なものは使ったほうがよいと思いますね。

それで。
もう説明の必要もないようなGOTO文なのですが、やっぱり一通りは説明しておくべきと思います。
たまたま前回もちょっと書きましたようにここ数日間は今まで組み上げてきたPICBASICコンパイラを一度壊してしまって最初から再構築する作業を行なっております。
まだあちこち補正が必要なところが残っていますがなんとかまともに動くところまでできてきました。
いつも同じような文法、機能の説明ばかりでは読んでいただく方も退屈でしょうし、書いているほうもだんだんストレスが溜まってきてしまいます。
そういうことですので、GOTO文のサンプルをお見せするかたわら、現在構築中のPICBASICコンパイラについてもその一端をお見せします。

PICBASICコンパイラは現在ももちろんまだプロトタイプのままですがpicbs4i(exe)までバージョンが進みました。

今までの画面とかなり違っています。
相変わらずデバッグ中のため余計な表示が出ていてわかりにくいとは思いますがそこはしばしご勘弁を願います。
BASICのソースプログラム(テキストプログラム)をロードするとただちにコンバート作業が開始されます。
/LOAD BSGOTOT3
でBSGOTOT3.TXTファイルをロードしました。
BSGOTOT3.TXTの中身はこの次の画面でお見せします。
*convert*
end of convert
でBASICのテキストプログラムから一旦PICアセンブラのアセンブラソースプログラム(BSGOTOT3.ASM)を作成します。
そのあと続いてPIC18Fアセンブラが起動してBSGOTOT3.ASMを再ロードしてそこからPIC18Fのマシン語プログラムが生成されます。
その下に表示されている16進数の表示が生成されたPIC18Fのマシン語コードです。
このコードはPICバイナリオブジェクトファイルBSGOTOT3.OBJとしてセーブされます。
BSGOTOT3.OBJファイルは純粋のバイナリファイルです。
インテルヘキサファイルではありません。
このとき同時にアセンブラリストファイル(BSGOTOT3.LIST)も作成されます。
最初の/LOADコマンドを入力したところから最後のendの表示までは全て自動的に実行されます。

その間、ロードからコンパイルまで一気に終ってしまいますが、もちろんBASICソースプログラム(テキストプログラム)はLISTコマンドでリスト表示可能ですしこの状態でBASICインタプリタと同じようにプログラムの編集や追加変更作業など自由に行なうことができます。

LISTコマンドでロードしたBASICのソースプログラムを表示しました。
そのあと/runコマンドを入力しました。
/runコマンドで今作成されたPICのマシン語プログラムがPICに書き込まれ、続いてそのマシン語プログラムが直ちに実行されます。
書き込み中を示すwriting...のあと
96bytes writtenで書き込みが完了したことを表示、そのあとすぐに
program startedでプログラムの実行が開始されます。
もちろんプログラムはデバッグ動作のためにWindowsパソコンにUSB接続したPICで行なわれます。
プログラムの実行は一瞬で完了してWindows(コマンドプロンプト)に制御が戻ります。
BASICのプログラムはGOTO文の動作をテストするためのごく簡単なものです。
20行のGOTO 100で100行に行きますから30行〜50行は実行されません。

フォルダの様子です。

もとのBASICテキストプログラム(bsgotot3.txt)をメモ帳で開いています。
PICBASICコンパイラの実行によってbsgotot3.asm、bsgotot3.list、bsgotot3.objファイルが作成されています。

bsgotot3.asmはPICBASICコンパイラによってBASICテキストプログラムをコンバートして作り出されたPICアセンブラプログラムファイルです。

もとのBASICプログラムの各行はコメント文でそのままアセンブラプログラムの中に埋め込まれています。
BASICのGOTO 100はPICのアセンブラ命令のgoto _100に置き換えられています。
その目的となる位置の100行のところにはラベルの_100が置かれています。
CALL命令はPRINT文を実行するためのサブルーチンコールです。
各サブルーチンはあらかじめターゲットのPICにシステムサブルーチンとして書き込んであります。

bsgotot3.listは上のPICアセンブラソースプログラムをもとにして作成されたPICマシン語プログラムリストファイルです。

アセンブラですからアセンブラソースプログラムの各行と1対1で対応しています。
BASICソースプログラムからPICアセンブラソースプログラムへのコンバートプログラムもPIC18Fアセンブラも100%手作りです。
MPLABなどからCALLしているところなどはありませんから純粋にPICBASICコンパイラプログラムだけで動作します。

下はPIC18Fアセンブラによって最終的に作成されたPICマシン語オブジェクトプログラムファイル(BSGOTOT3.OBJ)をコマンドプロンプトのDEBUGによって読みこんで内容を16進数表示したところです。

BSGOTOT3.OBJはバイナリファイルですからDEBUGで開くことができます。
右側は表示された内容を確認できるように今回の最初のところでお見せしたPICBASICコンパイラの表示画面を並べて表示しました。

PICはどうやって扱えばよいのかよくわからん、と思ってみえる方も多いと思います。
ましてPICをマシン語で制御するなどとてもとてもとお思いの方も、PICBASICコンパイラならばこんなにも簡単に扱うことができるということを実感していただけたのではないかと思います。

PICBASICコンパイラ[第27回]
2023.5.28upload

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