PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第195回]
●PIC16F1827(8)BANKSEL
前回を書いていてふとBANKSELが気になりました。
いずれそのうち自前のPICアセンブラも書いてしまおうと思っているのでそのためにもアセンブラ(実質的にはマシン語レベル)関係の情報については極力興味をもって確認しておきたいと思っています。
なにしろあのCONFIGの書き方については毎度いらいらさせられて精神衛生上極めて良くありません。
なにあんなものはHEXファイルに落としてしまえばたかだか4バイトていどのデータです。
CONFIGのビット情報はプログラムを書く時点でビットごとに確認しなければなりません。
どうせその時点でDataSheetを見ながらビット0が1、ビット1が0という具合にビット列を決定していくことになります。
それならいっそのこと
CONFIG0=5A
なんて書けたら簡単でよいじゃありませんか。
ま、それは余談です。
本題に戻ってBANKSELについてです。
PIC16FのDataSheetの命令一覧を見てもBANKSELなんて命令はありません。
多分PICアセンブラの擬似命令ではないかということを前回書きました。
本来のアセンブラの命令ならば勿論のこと擬似命令であっても最終的にはマシン語コードに翻訳されるはずです。
ではBANKSELはどのようなマシン語に翻訳されるのか。
それを確認するのに一番適した方法はMPLABでアセンブルしたときに出されるLSTファイルを見ることです。
下は16F1827TESTF.ASMをMPLABでアセンブルしたときに出力された16F1827TESTF.LSTファイルの該当箇所のみを取り出したものです。
0005 0023 00025 banksel ANSELA;BANK3 0008 0021 00029 banksel TRISA;BANK1 000D 0022 00035 banksel LATA;BANK2 |
左端はプログラムエリアのアドレスです(0005)。
その次がマシン語コードです(0023)。
その次はリストの行番号です。
最後がソースプログラムのアセンブラ命令です。
マシン語コードを見ると全部上位バイトが00です。
下位バイトは23、21、22でそれぞれBANK3、BANK1、BANK2に対応しています。
おお分かりやすいじゃありませんか。
つうことはBANKSELは恐らくマシン語コードの002Xに変換されると考えられます。
ここでXはBANKナンバー(00〜1F、5ビットの数)と解されます。
やるべき作業は命令一覧の命令コードの中からそのようなマシン語コードの命令を探し出すことです。
なんだか宝探しのようでちょっとわくわくしてきますね。
下がPIC16Fの命令一覧です。
PICは命令数が少ないことがウリです。
上から順に14−Bit Opecodeのところを見ていきます。
[出典]Microchip Technology Inc.PIC16F1827DataSheet
ありました!
MOVLB k(Move literal to BSR)です。
どうもそれっぽいですね。
念のため残りの表も見てみましょう。
[出典]Microchip Technology Inc.PIC16F1827DataSheet
近いものが並んでいますが探すべきビット列は
00 0000 001k kkkk
ですからそれに該当するものはありません。
決定です。
BANKSEL X は MOVLB X と同じだったのでした(XはBANKナンバー00〜1F)。
MOVLBはBSRに定数値を設定する命令です。
しからば。
そもBSRとは何ものぞ。
面白いですねえ。
下にBSRの図解があります。
[出典]Microchip Technology Inc.PIC16F1827DataSheet
ということからしますと。
前回お見せしましたSFRの表を見ながらアクセスすべきBANKを確認して
banksel ANSELA;BANK3
banksel TRISA;BANK1
banksel LATA;BANK2
と書く代わりに
MOVLB 3
MOVLB 1
MOVLB 2
と書くことができるはずです。
私としては後者のほうがマシン語的で好きです。
はずと書きましたがそう考えただけで終ってしまってはいけません。
何でもやっぱり実際に確認しておくべきです。
それほど手間なことではありませんから確認してみました。
ソースプログラムのその部分だけ変更しました。
MPLABでアセンブルして出されたLSTファイルの一部です。
なんだかごちゃごちゃいっぱい出ていますが。
アドレスを手がかりにして確認してみると同じマシン語コードが出されていることがわかります。
念のために作成されたHEXファイルを前回のものとWinMergeで比較してみました。
PICBASICコンパイラ[第195回]
2025.1.8 upload
前へ
ホームページトップへ戻る