加算と減算について簡単に説明します。 <PICデバイス=18F1320> 数値を扱う用途では当然ながら使用頻度の高い命令です。 「データ・メモリーf」を単に f と書くことがあります。
ADDWF f , d , a ; データ・メモリー f の値に W の値を加えて W または f に記録
ADDLW k ; W の値に、値 k を加えて W に記録
ADDWFC f , d , a ; f の値に W の値とキャリーを加えて W または f に記録
SUBWF f , d , a ; データ・メモリー f の値から W の値を減じて W または f に記録
SUBLW k ; 値 k から W の値を減じて W に記録
SUBWFB f , d , a ; f の値から W の値とボローを減じて W または f に記録
SUBFWB f , d , a ; W の値から f の値とボローを減じて W または f に記録
ボローはキャリーの反転
キャリーやボローは8bit長を超えるデータを扱う時に使います。
簡単な例で試してみます。 main2.asm の一部を書き換えます。
上図で、48行目追加、51行目コメントアウト、52,53行目を追加しています。
ラベル hot2 で始まるループでデータを転送する際に、転送元の値に30Hを加えて転送先に書いています。
間接アドレッシングからダウンロードした main2.asm をビルドして、データ・メモリーの0番地(reg0)の値を08Hに変更し、 Run & Halt してから上の変更を行って再度ビルドして Run & Halt した結果( File Registers ウィンドウ )を下図に示します。
転送先に加える値を変えて試す場合は、先のソース48行目の値を変更してビルドです。 53行目、ADDWFの代わりにADDLWを使ってみるのも面白そうです。
8bit 長を超える値の加算・減算は「13bit 加算・減算」を参考にして下さい。
加減算の他に次のような論理演算もありますが、実際に使う場面で説明した方が良いように思います。 ここではニーモニックだけ列記します。
ANDWF , COMF , IORWF , NEGF , XORWF , ANDLW , IORLW , XORLW
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
ADDWF f , d , a ; データ・メモリー f の値に W の値を加えて W または f に記録
ADDLW k ; W の値に、値 k を加えて W に記録
ADDWFC f , d , a ; f の値に W の値とキャリーを加えて W または f に記録
SUBWF f , d , a ; データ・メモリー f の値から W の値を減じて W または f に記録
SUBLW k ; 値 k から W の値を減じて W に記録
SUBWFB f , d , a ; f の値から W の値とボローを減じて W または f に記録
SUBFWB f , d , a ; W の値から f の値とボローを減じて W または f に記録
ボローはキャリーの反転
キャリーやボローは8bit長を超えるデータを扱う時に使います。
簡単な例で試してみます。 main2.asm の一部を書き換えます。
上図で、48行目追加、51行目コメントアウト、52,53行目を追加しています。
ラベル hot2 で始まるループでデータを転送する際に、転送元の値に30Hを加えて転送先に書いています。
間接アドレッシングからダウンロードした main2.asm をビルドして、データ・メモリーの0番地(reg0)の値を08Hに変更し、 Run & Halt してから上の変更を行って再度ビルドして Run & Halt した結果( File Registers ウィンドウ )を下図に示します。
転送先に加える値を変えて試す場合は、先のソース48行目の値を変更してビルドです。 53行目、ADDWFの代わりにADDLWを使ってみるのも面白そうです。
8bit 長を超える値の加算・減算は「13bit 加算・減算」を参考にして下さい。
加減算の他に次のような論理演算もありますが、実際に使う場面で説明した方が良いように思います。 ここではニーモニックだけ列記します。
ANDWF , COMF , IORWF , NEGF , XORWF , ANDLW , IORLW , XORLW
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。