PIC講習/加減算
概要
本章では、PICにおける加減算と、負値の表現について解説します。
重要語
インクリメント
1を足すこと
デクリメント
1を引くこと
カウント
ループなどの回数を数えること
必要語
今回の必要語はありません。
1の加減算
はじめに、加減算のうちで最も簡単な演算であふ、1の加算を解説します。
この演算は、特にインクリメントIncrementと呼ばれます。
INC命令
INC
命令は、インクリメントを行う命令です。
1つ目の引数に計算する値が入っているレジスタを、2つ目には結果の保存先を指定します。
ここで、Wを保存先に指定すると、Wレジスタは計算に影響しませんが、上書きされてしまいます。
DEC命令
DEC
命令は、1を引く命令です。
このことを、デクリメントDecrementと呼びます。
インクリメントと対称の動作で、$FF
を足す命令と言い換えることもできます。
符号反転
COM
命令とINC
命令を使うと、値の符号を反転させることができます。
ただし、-128
は符号を反転すると8ビットに収まらなくなるので、気をつけてください。
符号反転の例
COL.R.$20
MOV.5
MOV.R #$05
COM.R #$FA
INC.R.F #$FB
#$FBは-5と解釈できる
カウント
ある回数だけループ内の命令を繰り返したい場合、実行回数を数えなくてはなりません。
このことをカウント、回数を保存するレジスタをカウンタといいます。
INS/DES命令
INS
命令は、INC
命令の動作をしたあと、計算結果が0
であれば、次の命令をスキップします。
BCS
命令などと同様、スキップすると2サイクルを要します。
また、計算結果はスキップに関係なく保存されます。
DES
命令も同様に、DEC
命令に対応する条件分岐命令です。
カウントの例
COL.C.$20
MOV.10 #10回ループ
MOV.C #カウンタに代入
COL.LOOP
#実行内容
DES.C.F #10回引くと終わり
GOT.LOOP
8ビットの加減算
PICには、8ビットの値の加減算を行う命令もあります。
インクリメントなども含め、引数の1ビットが結果の複数ビットに影響する計算を、ビット演算に対して算術演算といいます。
ADD/SUB命令
ADD
命令が加算、SUB
命令が減算です。
引数はAND
命令などと同じで、レジスタ同士と即値を使えます。
ただし、SUB
命令は、Wレジスタの値を、引数のレジスタや即値から引きます。
逆の動作を行う命令はありませんが、代替手段があります。
Wレジスタから即値を引きたい場合は、その値の負値を引数にADD
命令を使います。
レジスタ同士の演算の場合は、演算後の値の負値を計算するか、計算の順序を見直します。