PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第29回]
●GOSUB文/RETURN文
今回はGOSUB文です。
GOTO文に比べるとGOSUB文はほんの少しですが上級者向きです。
使わなくても済んでしまいますし使い方を間違えると困ったことになります。
ですけれどこれを使うと便利なことも多くあります。
GOTO文とよく似ていますが根本的に異なっているのはGOTO文が「行ったきり」なのに対してGOSUB文は必ず元のところに戻ってくる(戻ってこなければならない)という点です。
そのためGOSUB文で呼ばれたプログラム(これをサブルーチンと言います)の最後は必ずRETURN文で終ります。
GOSUB文はアセンブラや他の言語では大抵はCALLという名前の命令に相当します。
GOSUB文のテストプログラムです。
BASICのテキストプログラムをロードしてコンパイルが完了するところまでは前回と同じです。
LISTコマンドでプログラムリストを表示しました。
20行にGOSUB文があります。
60行のサブルーチンをCALLしています。
20行をGOTO 60と書いた場合でも次に60行が実行されるところまではGOTO文でもGOSUB文でも変わりません。
GOTO文のプログラムと違うのはその先にRETURN文があることです。
GOSUB文とRETURN文はこのように対になって使われます。
このプログラム例では60行がマルチステートメントになっていて、すぐ同じ行にRETURN文があります。
これはテストプログラムなのでそのように簡単に書いています。
普通はサブルーチンによってはもっと長いことも多く何行も何十行ものこともあります。
その場合でも最後は必ずRETURN文で終るようにします。
/RUNコマンドを実行するとコンパイルされて出来ていたマシン語プログラムコードがPICに書き込まれたあとそのマシン語プログラムがただちに実行されます。
プログラムの動作としては60行を実行したあと20行の次の行(30行)に戻ってそこからプログラムの続きが実行されます。
プログラムの流れは10→20→60→30→40→50と進んで最後のSTOP文でブレークしてBASICシステムに戻ってきます。
break[2046]はPICのマシン語プログラムを実行した結果アドレス2046でブレークしたことを示しています。
その下のbreak before line#=60はもとのBASICプログラムの60行の直前の位置でブレークしたことを示しています。
このようにちゃんともとのBASICプログラムとの関係をしっかり維持しています。
簡単ですけれど意外とかしこいコンパイラなのです。
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 60 2008 23ec call _60 200a 10f0 200c ; 30 b=1 200c 010e movlw D'1' 200e 316e movwf b 2010 ; 40 print "a=";a,"b=";b 2010 2380 bsf R23,0 2012 610e movlw 61 2014 16ec call 2c 2016 00f0 2018 3d0e movlw 3d 201a 16ec call 2c 201c 00f0 201e 236a clrf R23 2020 3050 movf a,w 2022 14ec call 28 2024 00f0 2026 28ec call 50 2028 00f0 202a 620e movlw 62 202c 16ec call 2c 202e 00f0 2030 3d0e movlw 3d 2032 16ec call 2c 2034 00f0 2036 236a clrf R23 2038 3150 movf b,w 203a 14ec call 28 203c 00f0 203e 26ec call 4c 2040 00f0 2042 ; 50 stop 2042 12ec call 24 2044 00f0 2046 ; 60 a=1:return 2046 _60 2046 010e movlw D'1' 2048 306e movwf a 204a 1200 return |
PICBASICコンパイラ[第29回]
2023.5.30upload
前へ
次へ
ホームページトップへ戻る