PIC講習/Wレジスタと複写
概要
本章では、Wレジスタという、PICのプログラムで最も頻繁に操作するレジスタを解説します。
また、値を複写して、他のレジスタに保存する命令を解説します。
重要語
Wレジスタ
値の転送や演算結果の保存に用いるレジスタ
即値
引数のうち演算や転送に直接使う値
必要語
レジスタ
数値を一時記憶する回路
Wレジスタ
Wレジスタは、値の転送や、演算結果の保存などに用いる基幹レジスタです。
アドレスは$09で、全バンクからアクセス可能です。
Wレジスタの用途
今回のPICでは、オペコードの1ワードが14ビットです。
そして、レジスタの指定には7ビットを使います。
つまり、レジスタを2つ指定すると、命令のスペースはなくなってしまいます。
Wレジスタは、このような場合に、暗黙の引数として機能します。
値の複写
レジスタに保存された値は、別のレジスタに複写することができます。
この動作について、データシートなどにはmove移動という名称が記載されています。
命令名もこれによるものですが、動作後における複写元のレジスタの値について誤解を生むので、本講習では複写と呼びます。
MOV命令
値の複写を行う命令は、MOV
命令です。
引数の数によって動作が異なりますが、まずは2つの場合を説明します。
このとき、1つめの引数にはレジスタのアドレスを指定します。
2つめの引数が方向を示し、W
であれば、そのレジスタの値をWレジスタに複写します。
F
であれば、Wレジスタの値をそのレジスタに複写します。
2つめの引数は、書き込み先を示すと覚えましょう。
MOV命令の例
COL.L.$2C #バンク0とする
COL.R.$3F #バンク1とする
MOV.L.W #WレジスタにレジスタLの値を複写
MBS.1
MOV.R.F #レジスタRにWレジスタの値を複写
MBS.0
即値
即値そくち/Immediate Valueとは、引数のうち、計算や転送にそのまま使う値です。
引数が2つのMOV
命令の引数は、両方ともレジスタの指定であり、転送元や先を示すだけです。
このように、間接的な指定に用いる引数は、即値と呼びません。
しかし、MBS
命令の引数は、BSRレジスタに複写する値そのものなので、即値です。
この値は後で間接的な指定に用いますが、即値と呼ぶかはその命令のみで判断します。
即値を用いるMOV命令
MOV
命令には、引数が1つのときの動作もあります。
この引数は即値で、Wレジスタに複写する、8ビットの値を指定します。
MOV命令
COL.R.$20
MOV.$E0 #Wレジスタに即値$E0を書き込む
MOV.123 #Wレジスタ以外のレジスタに即値を書き込むには
MOV.R.F #一度Wレジスタを経由する