PIC中档单片机汇编指令详解(3)

ADDWF W寄存器内容和f数据寄存器内容相加

语法形式: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,就跳到这条指令

posted @ 2013-04-15 11:06  黑夜的思索  阅读(528)  评论(0编辑  收藏  举报