-1

ビットごとの AND 演算がどのように機能するかを誰かに説明してもらえますか? 私は次のコードを持っています:

CLRF LATC & 0x7F
MOVWF LATC & 0x7F

& 0x7F を使用する目的は何ですか? それは何を変えますか?

更新:一般的なビット単位の操作がどのように機能するかを知っており、「CLRF LATC」が LATC レジスタをゼロにする必要があることを知っています。しかし、「CLRF LATC & 0x7F」から LATC への登録は何を意味するのでしょうか? 最後のビットを除くすべてをゼロにしますか?

4

1 に答える 1

1

この操作はアセンブラによって既に実行されているため、"MOVWF 0x193 & 0x7F" (たとえば) は "MOVWF 0x13" (0x193 & 0x7F = 0x13 であるため) と同じです。

これを行う理由は次のとおりです。

より大きな PIC の場合、メモリはバンクされます。

アドレス 0x193 に書き込むには、バンク #3 (アドレス 0x180 ~ 0x1FF) に切り替えて、アドレス 0x13 (アドレス 0x193 ではなく) に書き込む必要があります。

この「バンク相対」アドレスは、絶対アドレスと数値 0x7F の AND 演算によって計算されます。

「LATC」のようなシンボルは、相対アドレス (0x13) ではなく絶対アドレス (0x193) として定義される場合があるため、この形式の命令が必要です。

于 2013-10-24T16:16:33.777 に答える