安全・環境活動に役立つLEDイルミネーションの製作 Q&A


008. 2つの値の大小を比較するには?

 減算命令「SUBWF」を利用して差をとり、「STATUS(ステータス)レジスタ」のCフラグ、Zフラグで正負、ゼロを調べます。以下に例を示します。

※UA, UBはユーザエリアに確保され、値(符号なし0〜255)が入っているものとします。

COMP01
        MOVWF   UA              ;UAの値をWレジスタに格納(W=UA)
        SUBWF   UB,0      ;減算UB-W (UB-UA)の結果をWレジスタに格納し、正負,ゼロの状態をSTATUSレジスタにセット
        BTFSC   STATUS,0    ;STATUSレジスタのCフラグ(ビット0)を調べ、クリア(0)ならば次の命令をスキップ
    GOTO    PULUS           ;PULUSへジャンプ(UB-UA=0またはUB-UA>0のとき、Cフラグは1となりスキップされない)

MINUS
   ;  ( UB - UA < 0 の処理を行う )

    GOTO    COMP0E

PULUS
        BTFSC   STATUS,2        ;STATUSレジスタのZフラグ(ビット2)を調べ、クリア(0)ならば次の命令をスキップ
    GOTO    ZERO            ;ZEROへジャンプ(Zフラグは1となり、スキップされない)
    
   ;  ( UB - UA > 0 の処理を行う  )
     
        GOTO    COMP0E

ZERO
   ;  ( UB - UA = 0 の処理を行う )

COMP0E


<Index>

Last Up Date: 2009/1/13