PIC中檔單片機彙編指令詳解(4)

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數據寄存器的內容不變

執行時間:一個指令週期

執行過程:

wps_clip_image-15027

狀態標誌影響: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數據寄存器的內容不變

執行時間:一個指令週期

執行過程:

wps_clip_image-26905

狀態標誌影響: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寄存器中。

相關文章
相關標籤/搜索