ADDWF W寄存器內容和f數據寄存器內容相加oop
語法形式:ADDWF f,d變量
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)循環
d爲目的寄存器的低7位地址(0x00~0x7F)語法
當d=f時,結果放在f數據寄存器,W寄存器的內容不變程序
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變數據
執行時間:一個指令週期時間
執行過程:【f】+【W】→d分支
狀態標誌影響:Z DC C
說明:數據寄存器內容和W寄存器內容相加,結果放入d指定的地方
指令範例:
MOVLW 0x55 ;W=0x55,假定Sum=0xAA
ADDWF Sum,f ;W不變,Sum=0xFF
MOVF 傳送f數據寄存器的內容到目的寄存器
語法形式:MOVF f,d
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)
d爲目的寄存器的低7位地址(0x00~0x7F)
當d=f時,把數據寄存器的內容放回本身自己,目的用於判斷數據寄存器的內容是否爲0。
當d=W時,結果放在W寄存器中,將數據寄存器f的內容傳送至W寄存器
執行時間:一個指令週期
執行過程:【f】→d
狀態標誌影響:Z
說明:將數據寄存器的內容傳送至它處,或者對f數據寄存器的內容作判0操做,若是傳送的數據是0,則置位Z標誌。
指令範例:
例1:數據傳送
MOVF Var1,W ;Var1內容傳送至W寄存器
MOVWF Var2 ;W寄存器內容傳送至Var2,此時Var1=Var2
例2:數據判0
MOVF Var3,f ;Var3寄存器內容被送往自身,其餘寄存器內容不變,可是影 響Z標誌
BTFSC STATUS,Z ;若是Var3不等於0,則跳過下一條指令
GOTO Var3Zero ;若是Var3等於0,則轉向其餘操做
COMF f數據寄存器內容取反
語法形式:COMF f,d
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)
d爲目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數據寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變
執行時間:一個指令週期
執行過程:!【f】→d
狀態標誌影響:Z
說明:求數據寄存器內容的反碼,求一個數的補碼能夠使用這個指令完成(按位求反再加一)
指令範例:
COMF num,f ;對num變量取反碼
INCF num,f ;反碼加1就是其補碼
DECFSZ 數據寄存器內容遞減1,並做判0標誌
語法形式:DECFSZ f,d
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)
d爲目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數據寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變
執行時間:一個指令週期或兩個指令週期
執行過程:【f】-1→d
狀態標誌影響:Z
說明:該指令將首先將f數據寄存器的內容作減1運算,結果放到d指定的目的地址內,同時它還會對Z標誌進行判0操做(進行分支跳轉控制);若是f數據寄存器減1後結果非0,那麼Z=0,程序將順序執行下一條指令,本次指令操做耗費一個指令週期;若是結果爲0,那麼Z=1,此時程序將會跳過緊跟其後的第一條指令,去執行緊跟其後的第二條指令,本次指令操做耗費兩個指令週期。該指令經常使用於計數次數或者循環次數的控制。
指令範例:
MOVLW 0x10 ;準備給循環計數器賦初值
MOVWF Count ;此時循環計數器Count=0x10
Loop:DECFSZ Count,f ;Count遞減1,結果放入Count中,並進行Z標誌判 GOTO Loop ;斷,若是遞減後結果不爲0,繼續執行Loop操做, ;總共循環0x10(16進制)次。
NOP ;若是遞減後結果爲0,就跳到這條指令