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,就跳到这条指令