PIC雑学 [マクロ命令を活用しましょう]   マイクロチップ社が無料で提供してくれています「MPASM」には  随分便利な「マクロ命令」が使える様になっています。  これを使う事に寄りまして  @間違いが少なくなる。 A記入行数が少なくなる。 等の利点があります。  但しアッセンブルの時に一般命令に翻訳されてしまいますので、プログラムの  使用行数や実効時間は変わらず、短くはなりません。  便利と思われるものより記載してゆきます。  1.キャリーフラグを含めた加算。   上位桁の加算時に、下位桁加算時のオーバー(キャリーフラグ)を加える   時等にとても便利。      一般の書き方 BTFSC STATUS,C ;キャリーフラグの状態を調べ INCF REG,SELF :キャリーガ立っている時は REG を+1する ADDWF REG,W 又は SELF ;上位桁の加算を行う   マクロ命令を使用 ADDCF REG,W 又は SELF ;一行で済んでしまい、間違いが少ない。  2.キャリーフラグを加味した減算。   上位桁の減算時に、下位桁減算時のボロー(キャリーフラグ)を加味する   時等にとても便利。      一般の書き方 BTFSS STATUS,C ;キャリーフラグの状態を調べ DECF REG,SELF :キャリーガ立ってい無い時は REG を−1する SUBWF REG,W 又は SELF ;上位桁の減算を行う   マクロ命令を使用 SUBCF REG,W 又は SELF ;一行で済んでしまい、間違いが少ない。  3.キャリーフラグの状態によるジャンプ   キャリー = 1 の時にジャンプ   一般の書き方 マクロの書き方 BTFSC STATUS,C BC ADDRES GOTO ADDRES   キャリー = 0 の時にジャンプ   一般の書き方 マクロの書き方 BTFSS STATUS,C BNC ADDRES GOTO ADDRES  4.ゼットフラグの状態によるジャンプ   ゼット = 1 の時にジャンプ   一般の書き方 マクロの書き方 BTFSC STATUS,Z BZ ADDRES GOTO ADDRES   ゼット = 0 の時にジャンプ   一般の書き方 マクロの書き方 BTFSS STATUS,Z BNZ ADDRES GOTO ADDRES  5.キャリーフラグの状態による SKIP(次の行の AAAA 命令を    飛び越し BBBB 命令を実効する)   AAAA には GOTO , INCF , DECF 等の一行完結命令が一般的   キャリー = 1 の時に SKIP   一般の書き方 マクロの書き方 BTFSS STATUS,C SKPC AAAA XXXX AAAA XXXX BBBB XXXX BBBB XXXX   キャリー = 0 の時に SKIP   一般の書き方 マクロの書き方 BTFSC STATUS,C SKPNC AAAA XXXX AAAA XXXX BBBB XXXX BBBB XXXX  6.ゼットフラグの状態による SKIP(次の行の AAAA 命令を    飛び越し BBBB 命令を実効する)   AAAA には GOTO , INCF , DECF 等の一行完結命令が一般的   ゼット = 1 の時に SKIP   一般の書き方 マクロの書き方 BTFSS STATUS,Z SKPZ AAAA XXXX AAAA XXXX BBBB XXXX BBBB XXXX   ゼット = 0 の時に SKIP   一般の書き方 マクロの書き方 BTFSC STATUS,Z SKPNZ AAAA XXXX AAAA XXXX BBBB XXXX BBBB XXXX  7.ステータスレジスタのビットの「セット」及び「クリア」   キャリーフラグ   一般の書き方 マクロの書き方 BSF STATUS,C SETC ;セット BCF STATUS,C CLRC ;クリア   ゼットフラグ   一般の書き方 マクロの書き方 BSF STATUS,Z SETZ ;セット BCF STATUS,Z CLRZ ;クリア  8.ページを越えた「サブルーチン」へのジャンプ LCALL SUB ;筆者未確認の為コメント出来ません URL http://int.picfun.net Copyright (c) 2005-2006, Kurosu. All Rights Reseved