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


超ローコストPICWRITERの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第321回]



●PIC16アセンブラ(7)BRA部分のプログラムを修正しました

BRA命令はマシン語コードの面から見るとちょいと難しい命令です。
具体的な説明の前に説明の手助けにもなると思いますので修正後のテスト結果をお見せします。
前回と同じようにPIC16アセンブラとMPLABの両方のアセンブル結果を表示して比較しました。
今回はBRA命令にしぼって比較を行ないました。



BRA命令は相対ジャンプ命令です。
GOTO命令はラベルで示されるアドレスにジャンプしますがBRA命令はその命令が存在しているアドレス位置から前方にまたは後方に指定したステップ数分離れたアドレスにジャンプします。
どれだけ離れた位置にジャンプするかは前方に進む場合にはBRA $+n、後方に戻る場合にはBRA $−nと表記します。
下はBRA命令の説明です。


[出典]Microchip Technology Inc. PIC16F1503 Data Sheet

MicrochipのPIC16アセンブラの表記ではBRA labelも使えると説明されていますがそれはgoto labelと全く同じことですから当PIC16アセンブラではBRA labelは使わないことにしてlabelを指定する場合にはgotoを使うことにします。
ここの説明はバイナリデータ(2進数)の理解がないと何を言っているのかわかりません。
kの値は−256〜+255の範囲の数が許されます。
符号を除いたkの表記は十進数ではなくて十六進数で行ないます(説明がし難いです。上のリストの記述を参照してください)。
Descriptionを見るとkは符号付き9ビットの数だと書いてあります。
そういうことなのですがその説明は舌足らずです。
しかしそこを分かり易く説明することは難しいです。
CPUがBRA命令を読み込んだときPC(プログラムカウンタ)はその次のアドレスを示しています。
つまりBRAのアドレスを$で示すとPCの値は$+1になっています。
ここでBRA $+5という命令を考えるとその命令は$のアドレスから5ステップ先にジャンプせよという命令になります。
PCの値は$+1を示していますからkは内部的には5−1=4という値になります(ここのところがややこしいです)。
さらにここが+ではなくて−(マイナス)だともっとややこしくなります。
下はBRAのマシン語コードです。


[出典]Microchip Technology Inc. PIC16F1503 Data Sheet

kは1ビットの値を示します。
前方にジャンプするときkの値の最大値は0 1111 1111(0FF=255)です。
後方にジャンプするときkの値の最大値は負数としての表現で1 0000 0000(100=−256)です。
ここからが分かり難いところです。
この値はPCに加算される数ですから$+nの表記での最大値は255+1=256(100、この場合には+の値としての表記です。ややこしい!)になります。
$−nの場合には−256+1=−255ですから$+の場合にならえば9ビットの負数として計算して100+1=101にしたいところなのですがBRA $−101と書くとエラーになってしまいます。
BRA $−100も駄目です。
正解はBRA $−0FFです。
実際の表記では$+、$−は記号として扱い、それに続いて絶対値として移動距離を十六進数で記述します(わかりますか?)。
つきつめて考えると頭が混乱してしまいます。
要は絶対値で考えて現在の位置から後方へは最大255ステップ、前方へは最大256ステップ移動可能ということです。
BRA $−0FF、BRA $+100が最大値です。
最小値はBRA $−0、BRA $+0でこの場合には無限ループになります。

超ローコストPICWRITERの製作[第321回]
2025.8.15 upload

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