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レジスタを経由する