PIC中檔單片機匯編指令詳解(3)
語法形式:ADDWF f,d
本文引用地址:http://www.104case.com/article/201611/318558.htm操作數: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,就跳到這條指令
評論