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命令を使います。
レジスタ同士の演算の場合は、演算後の値の負値を計算するか、計算の順序を見直します。