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


PICBASICコンパイラ

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

[第30回]



●GOSUB文/RETURN文(2)

今回もGOSUB文です。
GOSUB文もGOTO文と同じように行番号の代わりにラベルを使うことができます。
前回のプログラムの行番号のところをラベルに代えただけですからプログラムの動作は前回と同じです。

ラベルを使ったGOSUB文のテストプログラムです。

BASICのテキストプログラムをロードしてコンパイルが完了するところまで前回と同じです。
実は前回の画面と比べるとマシン語コードのところが少し短くなっています。
そのことについては今回の終わりのところで説明をします。

LISTコマンドでプログラムリストを表示しました。

20行にGOSUB文があります。
60行のサブルーチンをCALLしています。
前回は60行をマルチステートメントにしていましたが今回はラベルも命令文も行を変えて書きました。
ここを前回と同じようにマルチステートメントにして
60 *abc:a=1:return
と書くこともできます。
上に書いたマシン語コードが短くなったこととマルチステートメントとは関係ありません。
それは別の理由です。

/RUNコマンドを実行すると前回と同じ実行結果になりました。

PICBASICコンパイラによって作成されたマシン語プログラムリストファイルです。
2000      ;    10 a=0:b=0
2000 000e     movlw D'0'
2002 306e     movwf a
2004 000e     movlw D'0'
2006 316e     movwf b
2008      ;    20 gosub *abc
2008 20ec     call abc
200a 10f0 
200c      ;    30 b=1
200c 010e     movlw D'1'
200e 316e     movwf b
2010      ;    40 print "a=";a,"b=";b
2010 610e     movlw 61
2012 16ec     call 2c
2014 00f0 
2016 3d0e     movlw 3d
2018 16ec     call 2c
201a 00f0 
201c 3050     movf a,w
201e 14ec     call 28
2020 00f0 
2022 28ec     call 50
2024 00f0 
2026 620e     movlw 62
2028 16ec     call 2c
202a 00f0 
202c 3d0e     movlw 3d
202e 16ec     call 2c
2030 00f0 
2032 3150     movf b,w
2034 14ec     call 28
2036 00f0 
2038 26ec     call 4c
203a 00f0 
203c      ;    50 stop
203c 12ec     call 24
203e 00f0 
2040      ;    60 *abc
2040      abc
2040      ;    70 a=1
2040 010e     movlw D'1'
2042 306e     movwf a
2044      ;    80 return
2044 1200     return

上の方に書いたマシン語コードが短くなった理由です。
前回のリストを見ていてPRINT文のところに余計な命令があることに気が付きました。
もとは必要があってそのようにしていたのですがコンパイラプログラムを直すことでその部分を省くことができることに気が付きましたのでそのように直しました。
今回はそこのところを直しましたので前回のリストに比べるとPRINT文のところが少し短くなっています。

PICBASICコンパイラ[第30回]
2023.5.31upload

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