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


PICBASICコンパイラ

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

[第57回]



●R++,R−−

前回のサンプルプログラムを書いていて突然思い出しました。
PORTC=PORTC+1
という計算式なのですが。
a=a+1
でも同じです。
BASICのごく一般的な数式の表現です。
BASICでは変数に何かを加算するときにはそのように書く決まりになっています。
前回のプログラム例にもあるようにその「何かを加算する」場合にそれが+1であることがよくあります。
それで。
ある変数に1を加算する場合にCでしたら皆様よくご存知の通り
R++
と書きます(Rは変数)。
R=R+1
の省略形のようなものです。
R=R−1
の場合にはR−−
と書きます。
私はC(C++)は嫌いです。
C++で書かなければどうしようもない場合が多いので仕方なく使っています。
しかし唯一このR++(およびR−−)だけは気に入っています。
簡便でよいですね。

で。
四則の計算のところを組み込むときに([第17回]参照)これもあると便利だからと思いついてR++、R−−も組み込みました。
前回のためのサンプルプログラムを書いていてそのことを思い出したのです。
確かどこかで書いたはず、と思って過去記事を確認したのですが出てきません。
あれこれ書くことが多すぎてつい書くのを忘れてしまったのかもしれません。
[追記]やっぱり書いておりました。[第10回]参照。

せっかく思い出しましたので今回はR++について書きます。
R−−も同様ですが冗長になるので省略します。

実際のプログラム例で示します。
   10 TRISC=0
   20 *bsloop
   30 PORTC++
   40 goto *bsloop

前回のプログラムはもともと簡単なものでしたがこのように書くとさらに簡単になってしまいます。
で。
このプログラムをコンパイルしますとこのようなファイルが生成されます。
2040      ;    10 TRISC=0
2040 000e     movlw D'0'
2042 946e     movwf TRISC
2044      ;    20 *bsloop
2044      bsloop
2044      ;    30 PORTC++
2044 822a     incf PORTC
2046      ;    40 goto *bsloop
2046 22ef     goto bsloop
2048 10f0 

BASIC命令のPORTC++が翻訳されてincf PORTCになっています。
R++はPICアセンブラ命令のincf Rに1対1で翻訳されます。
リストの左側に表示されているPICマシン語コードに注目してください。
実は[第55回]で作成した「アセンブラ in BASIC」のサンプルプログラムのマシン語コードとそっくり同じです。
下に再掲します。
2040      ;    10 'asmtest
2040      ;    20 TRISC=0
2040 000e     movlw D'0'
2042 946e     movwf TRISC
2044      ;    30 asm
2044      ;    40 *loop
2044      loop
2044      ;    50 incf PORTC
2044 822a     incf PORTC
2046      ;    60 goto loop
2046 22ef     goto loop
2048 10f0 
204a      ;    70 endasm

ということは。
当然のこととして今回作成されたPORTC++のサンプルプログラム(をコンパイルしてできたマシン語のプログラム)を実行すると[第55回]と全く同じように高速でプログラムが実行されます。
下が今回の出力波形です。
[第55回]と同じ波形になっています。


時間軸を拡大しました。


あれ。
BASICでは速度が間に合わないような場合に「アセンブラ in BASIC」の機能を使うとより高速でプログラムが実行できます、ということをアピールするつもりだったのですが、こと今回のR++命令に限っては逆にPICBASICコンパイラがこんなに便利、というアピールになってしまいました。

PICBASICコンパイラ[第57回]
2023.7.26upload

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