• PIC中档单片机汇编指令详解(7)完


    GOTO 程序无条件跳转到指定的地址

    语法形式:GOTO m

    操作数:m为11位立即数指定的目标地址

    执行时间:2个指令周期

    执行过程:

    m→PC【10:0】

    PCLATH【4:3】→PC【12:11】

    状态标志影响:无

    说明:程序无条件立即强行跳转到目的地址处继续执行。目的地址由本指令内含的11位地址码和特殊寄存器PCLATH中的【4:3】一起构成完整的13位地址。

    指令范例:

    ORG 0x000 ;伪指令指定程序的起始地址

    GOTO Main ;程序跳转到标号指定的位置处继续执行

    MOVLW W寄存器赋立即数

    语法形式:MOVLW k

    操作数:k为8位立即数

    执行时间:一个指令周期

    执行过程:k→W

    状态标志影响:无

    说明:该指令对W寄存器赋一个初值。任何其他数据寄存器如果要赋一个立即数值,必须通过W寄存器传送。

    指令范例:

    MOVLW 0x55 ;【W】=0x55

    MOVWF Tmp ;【Tmp】=【W】=0x55

    ADDLW W寄存器和8位立即数相加

    语法形式:ADDLW k

    操作数:k为8位立即数

    执行时间:一个指令周期

    执行过程:【W】+k→W

    状态标志影响:Z DC C

    说明:W寄存器的值和8位立即数相加,结果放入W寄存器内

    指令范例:

    MOVLW 0xAA ;W=0xAA

    ADDLW 0x11 ;W=0xAA+0x11=0xBB

    SUBLW 立即数减去W寄存器

    语法形式:SUBLW k

    操作数:k为8位立即数

    执行时间:一个指令周期

    执行过程:k-【W】→W

    状态标志影响:Z DC C

    说明:必须注意W寄存器在这条指令中是减数

    如果k=W,相减结果为0,则Z=1

    如果k>W,没有借位发生,则C=1

    如果k<W,有借位发生,则C=0

    在PIC单片机内部这条减法指令的执行是先对W寄存器求补码,然后和被减数k相加,所以在判断是否有借位标志时要千万小心

    指令范例:

    MOVLW 0x23 ;W=0x23

    SUBLW 0x32 ;W=0x32-0x23=0x0f,k>W所以C=1

    IORLW W寄存器和立即数做逻辑或操作

    语法形式:IORLW k

    操作数:k为8位立即数

    执行时间:一个指令周期

    执行过程:【W】|k→W

    状态标志影响:Z

    说明:W寄存器和8位立即数相或,结果放入W寄存器内。按照逻辑或有1出1的法则,此指令可以把W寄存器的任意位设置成数据1

    指令范例:

    IORLW b‘00001111’ ;W寄存器低4位置1

    ANDLW W寄存器和立即数做逻辑与操作

    语法形式:ANDLW k

    操作数:k为8位立即数

    执行时间:一个指令周期

    执行过程:【W】&k→W

    状态标志影响:Z

    说明:W寄存器和8位立即数相与,结果放入W寄存器内。按照逻辑与有0出0的法则,可以把W寄存器的任意位置清0

    指令范例:

    ANDLW b‘00001111’ ;W寄存器高4位清0

    XORLW W寄存器和立即数做逻辑异或操作

    语法形式:XORLW k

    操作数:k为8位立即数

    执行时间:一个指令周期

    执行过程:【W】^k→W

    状态标志影响:Z

    说明:W寄存器和8位立即数异或,结果放入W寄存器内。按照逻辑异或的法则,任何数和1异或,结果为其反码;任何数和其自身异或,结果为0。所以该指令可以把W寄存器的任意位数反转,或者判断W寄存器的内容是否为特定值

    指令范例:

    例1:任意数据按位取反

    XORLW b‘11111111’ ;取W寄存器8位反码

    例2:判断W寄存器内容是否为特定值

    XORLW 0x34 ;判断W=0x34?

    BTFSC STATUS,Z ;W不等于0x34,则跳过下条指令

    GOTO W34 ;W等于0x34,转去执行相关操作

  • 相关阅读:
    Redis Streams 学习资料整理
    js检测数据类型四种办法
    vue通信、传值的多种方式(详细)
    解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). hint: Please,
    C#策略模式运用,多角色折扣计算程序
    MYSQL8.0JSON函数
    Mybatis Plus 链式编程
    本地微服务调试——优化方案
    MYSQL8.0WINDOW函数
    Map集合基础03TreeMap
  • 原文地址:https://www.cnblogs.com/wangluojisuan/p/3041973.html
Copyright © 2020-2023  润新知