PA.EXEでは、何故「Bank切り替え」が無いのか

 
本書で用いているアセンブラ「PA.EXE」でのプログラムには、何故「Bank切り替え」
記述が見られないのか、というご質問やご指摘を受けることがしばしばあります。

「こんなプログラムでよくPICマイコンが動くものだ」という言われ方をしたことさえあり
ます。PICマイコン製造元の「マイクロチップテクノロジー社」が提供するアセンブラ
MPASM」でプログラムを書く場合は、「Bank切り替え」が頻繁に現れるからです。

  結論から言うと、「PA.EXE」が非常によくできたアセンブラであるということです。
PICマイコンはプログラムメモリとデータメモリ(RAMとかファイルレジスタとも呼ばれる)
がどちらも複数のブロックからなります(前者がPage0Page3の四個、後者がBank0
Bank3の四個、ただし、デバイスによって両者とも個数が異なる。例えば、16F84Aは前者が
Page0のみで後者がBank0Bank1の二個)。プログラムメモリの方はあまり気にしなくて
済みますが、ファイルレジスタの方は常に意識しなければ
なりません。自分で定義する
レジスタファイル(変数)を全て
Bank0に置いたとしても、肝心なSFR(スペシャル
ファンクションレジスタ=デバイスの特殊な機能を活用するために、
予め用意されている
レジスタファイル)が各
Bankに散在しているからです。 

 例えば、ポートBを全ビット出力用として使いたい場合、「MPASM」では
BSF     STATUS,RP0       ;Bank1
に切り替え
CLRF    TRISB          ; PortB 全ビット出力用に
BCF     STATUS,RP0       ; Bank0に切り替え
 のように記述します。TRISBというSFRBank1にあるからです。Bank1へ行ってTRISB
書き込みをした
あと、PORTB01を出力するにはPORTBが置かれているBank0に戻らねば
なり
ません。

PA.EXE」の場合はどうかというと
mov     !rb,#0                  ; PortB
全ビット出力用に
 
の一行で終わりです。つまり、「mov       !rb,__ 」の命令文の中でBank切り替え
作業を自動的に行っているのです。


 この例のように、命令文の中で、「PA.EXE」が必用なBank切り替えの作業を実行して
くれるので、プログラマは厄介な
Bank切り替えを意識しないでプログラミングすることが
可能になります。今は質問にもあった
Bank切り替えの場合で「PA.EXEの使いやすさを説明
しましたが、他にも、数値の扱い、演算、比較等、都合の良い
命令が数多く用意されており、
PA.EXE」と「MPASM」の両者を使い比べると、PA.EXE」がいかにプログラムを書き
やすいアセンブラであるかが分かります。


  PA.EXE」を使うことの問題点はというと、言うまでもなく、より一般的な「MPASMとの
情報交換がダイレクトには行い難いこと(ただし、両者を理解していれば可能)、
16F84A
以外のフラッシュタイプのデバイスに対応していないこと(ただし、「PA.EXE作製者の
Ochiai
氏のホームページでは、16F877への対応法が示されている⇒本ホームページの
「その他の情報」)です。


  いずれのアセンブラを用いようとも、マイコンに書き込むオブジェクトファイル*.HEX
には違いはありません。ですから、ソースファイル(
*.asm)を公表して評価を得たいという
のでなければ、しかも
16F84Aを活用してというのであれば、プログラムの作成は「PA.EXE
を用いる方が断然有利といえます。


  時として、難解な(というより使い難い)「MPASM」を使いこなすのが「優れ者」のよう
に評価をされがちですが、今では、「BASIC」や「C」で効率よくプログラミングする人
多いのではないでしょうか。


(追)という私自身も、現在は16F8816F819を活用するために、「MPASM」で作成して
います。


                                                                       

inserted by FC2 system