博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PIC中档单片机汇编指令详解(4)
阅读量:6640 次
发布时间:2019-06-25

本文共 2016 字,大约阅读时间需要 6 分钟。

hot3.png

INCFSZ f数据寄存器内容递增1,并作判0标志

语法形式:INCFSZ f,d

操作数:f为数据寄存器的低7位地址(0x00~0x7F)

d为目的寄存器的低7位地址(0x00~0x7F)

当d=f时,结果放在f数据寄存器,W寄存器的内容不变

当d=W时,结果放在W寄存器中,f数据寄存器的内容不变

执行时间:一个指令周期或两个指令周期

执行过程:【f】+1→d

状态标志影响:Z

说明:该指令首先对数据寄存器的内容做加1操作,结果按照d的指示保存到相应的地方,然后对Z进行判0操作(分支跳转控制):如果加1之后的结果非0,也就是Z=0,程序将会按照顺序执行下一条指令,使用1个指令周期;如果加1之后结果为0,也就是Z=1,那么程序将会跳过INCFSZ指令之后的第一条指令,开始执行第二条指令,使用2个指令周期。该指令常用于计数次数和循环次数的控制。

指令范例:

   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数据寄存器的内容不变

执行时间:一个指令周期

执行过程:

状态标志影响: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数据寄存器的内容不变

执行时间:一个指令周期

执行过程:

状态标志影响: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寄存器中。

转载于:https://my.oschina.net/u/124452/blog/123305

你可能感兴趣的文章
or ||
查看>>
编辑一次性计划任务
查看>>
MAC下的mysql忘记密码该怎么办??
查看>>
matlab练习程序(立体相关块匹配)
查看>>
DOS中的CD命令详解
查看>>
你应该知道的jQuery技巧
查看>>
消息处理之performSelector
查看>>
hihoCoder 1174 拓扑排序·一
查看>>
Struts2中防止表单重复提交,global-results定义全局结果处理
查看>>
汇编语言第一章基础知识
查看>>
Java 合并两个有序链表
查看>>
ipv6到ipv4隧道6to4(GNS3)
查看>>
NetBeans数据库笔记---三层架构
查看>>
iOS获取设备型号和App版本号等信息(OC+Swift)
查看>>
纯CSS3鼠标滑过按钮动画过滤特效
查看>>
web端 图片上传
查看>>
17代码分离
查看>>
18Lua与C#交互
查看>>
01:UI框架加强版
查看>>
PureMVC 简单案例
查看>>