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


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

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