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
前へ
次へ
ホームページトップへ戻る