PIC中檔單片機匯編指令詳解(2)
語法形式:DECF f,d
本文引用地址:http://m.butianyuan.cn/article/201611/318561.htm操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
d為目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數(shù)據(jù)寄存器,f數(shù)據(jù)寄存器自減1
當d=W時,結果放在W寄存器中,W寄存器內容自減1
執(zhí)行時間:一個指令周期
執(zhí)行過程:【f】-1→d
狀態(tài)標志影響:Z
說明:該指令對數(shù)據(jù)寄存器的內容做減1運算。如果減1后的結果為0,則置位0標志寄存器Z
指令范例:
CLRF Count ;Count=0x00
DECF Count,f ;Count=0x00,f=0xFF
DECF f,W ;f=0xFF,W=0xFE
INCF 數(shù)據(jù)寄存器的內容遞增1
語法形式:INCF f,d
操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
d為目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數(shù)據(jù)寄存器,f數(shù)據(jù)寄存器自增1
當d=W時,結果放在W寄存器中,W寄存器內容自增1
執(zhí)行時間:一個指令周期
執(zhí)行過程:【f】+1→d
狀態(tài)標志影響:Z
說明:該指令對數(shù)據(jù)寄存器的內容增加1。如果增加后的結果為0,則置位0標志寄存器Z
指令范例:
CLRF Count ;Count=0x00
INCF Count,f ;Count=0x00,f=0x01
INCF f,W ;f=0x01,W=0x02
IORWF 數(shù)據(jù)寄存器f和W寄存器做邏輯或操作
語法形式:IORWF f,d
操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
d為目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數(shù)據(jù)寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數(shù)據(jù)寄存器的內容不變
執(zhí)行時間:一個指令周期
執(zhí)行過程:【f】|【W】→d
狀態(tài)標志影響:Z
說明:數(shù)據(jù)寄存器內容和W寄存器的內容邏輯或,結果按照d的指定位置存放,按照邏輯或有1出1的規(guī)則,使用該命令可以將任意位設置為1
指令范例:
MOVLW b’00001111’ ;將W寄存器的低4位設置為1
IORWF PORTB,f ;將PORTB的低4位設置為1,不影響高4位
ANDWF 數(shù)據(jù)寄存器f和W寄存器做邏輯與操作
語法形式:ANDWF f,d
操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
d為目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數(shù)據(jù)寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數(shù)據(jù)寄存器的內容不變
執(zhí)行時間:一個指令周期
執(zhí)行過程:【f】&【W】→d
狀態(tài)標志影響:Z
說明:數(shù)據(jù)寄存器內容和W寄存器的內容邏輯與,結果按照d的指定位置存放。按照邏輯與有0出0的規(guī)則,使用該命令可以將任意位設置為0。利用其影響標志Z的特性,可以判斷寄存器任意位的組合是否為全0。
指令范例:
例1:寄存器任意位清零
MOVLW b’00001111’ ;W寄存器高4位清0(取決于0的組合)
ANDWF PORTB,f ;PORTB的高4位清0,低4位保持不變
例2:判斷寄存器任意位組合是否全0
MOVLW b’00001111’ ;W寄存器的低4位置1(取決于1的組合)
ANDWF PORTC,W ;只要PORTC的低4位全0,則Z標志寄存器就置1
;此指令的操作結果放在W寄存器中,不會影響原寄存器的值
XORWF 數(shù)據(jù)寄存器內容和W寄存器內容做邏輯異或操作
語法形式:XORWF f,d
操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
d為目的寄存器的低7位地址(0x00~0x7F)
當d=f時,結果放在f數(shù)據(jù)寄存器,W寄存器的內容不變
當d=W時,結果放在W寄存器中,f數(shù)據(jù)寄存器的內容不變
執(zhí)行時間:一個指令周期
執(zhí)行過程:【f】^【W】→d
狀態(tài)標志影響:Z
說明:數(shù)據(jù)寄存器內容和W寄存器的內容邏輯異或,結果按照d的指定位置存放。按照邏輯異或的規(guī)則,任何數(shù)(0或1)和1異或,結果為反碼;任何數(shù)和其本身異或,結果為0。所以此指令可以把寄存器的任意位數(shù)據(jù)反轉(0變1,1變0),或者判斷寄存器的內容是否為一特定值。
指令范例:
例1:寄存器任意位數(shù)據(jù)反轉
MOVLW b’00000011’ ;W寄存器低2位置1
XORWF PORTB,f ;PORTB的高6位不變,低2位數(shù)據(jù)反轉
例2:判斷寄存器的內容是不是特定值
MOVLW 0xAA ;W=0xAA(可以是任意值)
XORWF PORTC,W ;如果PORTC=0xAA,則Z標志就為1
;此指令的操作結果放在W寄存器中,不會影響原寄存器的值
評論