INCFSZ f數據寄存器內容遞增1,並做判0標誌oop
語法形式:INCFSZ f,d.net
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)ip
d爲目的寄存器的低7位地址(0x00~0x7F)get
當d=f時,結果放在f數據寄存器,W寄存器的內容不變it
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變cli
執行時間:一個指令週期或兩個指令週期循環
執行過程:【f】+1→d語法
狀態標誌影響:Z程序
說明:該指令首先對數據寄存器的內容作加1操做,結果按照d的指示保存到相應的地方,而後對Z進行判0操做(分支跳轉控制):若是加1以後的結果非0,也就是Z=0,程序將會按照順序執行下一條指令,使用1個指令週期;若是加1以後結果爲0,也就是Z=1,那麼程序將會跳過INCFSZ指令以後的第一條指令,開始執行第二條指令,使用2個指令週期。該指令經常使用於計數次數和循環次數的控制。im
指令範例:
MOVLW 0xC0 ;循環計數數據賦初值
MOVWF Count ;此時循環計數器初值Count=0xC0
Loop:INCFSZ Count,f ;Count內容加1,放回Count中,並進行Z標誌判斷
GOTO Loop ;若是加1以後的結果不爲0,則循環執行Loop的內 容,總共循環次數爲0x00-0xC0=0x40次
NOP ;結果爲0,則跳到這條指令
RRF 數據寄存器內容帶進位的循環右移
語法形式:RRF f,d
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)
d爲目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數據寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變
執行時間:一個指令週期
執行過程:
狀態標誌影響:C
說明:該指令把C進位寄存器(借位寄存器)和數據寄存器的8位數據結合在一塊兒作9位的循環右移1位的操做。操做的結果是把C移到數據寄存器的最高位,原數據寄存器的最低位放到C中。
指令範例:
例1:實現數據寄存器自身8位的循環右移
RRF Data,W ;數據寄存器Data的內容右移1位,結果放入W寄存器,Data自己 的內容不變,可是最低位已經移到C中
RRF Data,f ;再次進行右移,結果寫入Data自身。這時上一條指令移入C中的最低位如今已經變成Data的最高位,實現了最低位變最高位,最高位變成第二高位的目的
例2:實現數據寄存器算數右移(除2操做)
BCF STATUS,C ;確保C=0
RRF Data,f ;數據寄存器右移1位,最高位如今爲0,結果放入自身
RLF 數據寄存器內容進行帶進位的循環左移操做
語法形式:RLF f,d
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)
d爲目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數據寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變
執行時間:一個指令週期
執行過程:
狀態標誌影響:C
說明:該指令將C和8位數據寄存器的數據結合起來進行9位的循環左移操做,結果放入d指定的位置。操做結果是把C移到數據寄存器的最低位,將原數據寄存器的最高位移入C中。
指令範例:
例1:實現數據寄存器的8位內容循環左移
RLF Data,W ;Data的內容左移1位放入W寄存器中,Data的內容不變,Data的 最高位放入C中
RLF Data,f ;Data的內容經操做後放回自身,C的內容(經上步操做後變成了原Data的最高位)放入Data的最低位。
例2:實現數據寄存器的算數左移(結果乘以2)
BCF STATUS,C ;確保C=0
RLF Data,f ;數據寄存器Data左移1位,最低位補充爲0,實現乘以2
SWAPF 數據寄存器高低半字節內容進行交換
語法形式:SWAPF f,d
操做數:f爲數據寄存器的低7位地址(0x00~0x7F)
d爲目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數據寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數據寄存器的內容不變
執行時間:一個指令週期
執行過程:【f<3:0>】←→【f<7:4>】
狀態標誌影響:無
說明:該指令實現把數據寄存器的高低半字節的內容進行交換,結果放入d指定的地址。該指令在中斷服務程序退出前恢復W寄存器的內容的過程當中起着不可或缺的做用。不影響狀態寄存器。
指令範例:
SWAPF w_temp,f ;w_temp的高低半字節內容交換,結果放回w_temp自己
SWAPF w_temp,W ;w_temp的高低半字節內容再次交換,可是結果放入W寄存器中,在不影響狀態寄存器的前提下,實現了把w_temp的原內容複製到W寄存器中。