单片机信息网:深圳市今科电子有限公司
网站地图 RSS订阅
高级搜索 收藏本站
会员中心 欢迎投稿
首页 | 业界动态 | 解决方案 | 技术文献 | 下载中心 | 单片机学习 | 单片机原理 | 单片机编程 | 单片机设计 | 单片机开发 | 技术专题 | 单片机论坛 |单片机博客| 联系我们
单片机新闻 | 单片机学习 | 单片机编程 | 单片机设计 | 单片机开发 | 单片机原理 | 单片机解密 | 芯片解密 | IC解密 | 单片机方案 | 51单片机 | AVR单片机 | PIC单片机
单片机程序实例大全 | 潜入式系统 | PCB设计 | 单片机资料下载 | 工具/软件下载 | 技术经验分享 | 单片机技术人生 | IC资料下载 | 数字电路 | 模拟电路 | 单片机空间
当前位置:主页>单片机学习>51系列单片机>文章内容
第二十六课:控制转移类指令分析
来源:单片机信息网 作者: 发布时间:2008-03-10 阅读次数: 【大 中 小】【收藏本文】 【打印

第二十六课:控制转移类指令分析


控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。

[1]. 无条件转移指令(4条)
这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。

LJMP  addr16     ;addr16→(PC),给程序计数器赋予新值(16位地址)

AJMP  addr11     ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变

SJMP  rel         ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值

JMP  @A+DPTR   ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值

这几条指令,如果要他细分析的话,区别较大,但初学者时,可以不理会那么多,统统理解成LJMP标号,也就是跳转到一个标号处,但事实上,JMP标号,在前面的例程中我们已接触过,并且也知道如何来使用了,AJMP和SJMP也是一样,那么这几条指令它们的区别何在呢?在于跳转的范围不一样。好比跳远,LJMP一下就能跳64K那么远(当然近了就更没关系了)。而AJMP最多只能跳2K距离,而SJMP则最多只能跳 256这么远,原则上,所有用AJMP或SJMP的地方都可以用LJMP来替代。因此在初学者时,需要跳转时可以全用LJMP。

但是在查表时要注意会出错,因为他们的机器周期不一样,取得的数也不一样。

[2]. 条件转移指令(8条)
条件转移指令是指在满足一定条件时进行相对转移

JZ  rel               ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行

JNZ  rel              ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行

这两条指令是判断A内容是否为0转移指令
第一条指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助机器汇编了,因此这条指令我们可以这样理解:
JB  标号
即转移到标号处,下面举一例说明:
   MOV  A,R0
   JZ   L1
   MOV  R1,#00H
   AJMP L2
L1:MOV  R1,#0FFH
L2:SJMP L2
   END
在执行上面这段程序前,如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值不等于0,则顺序执行,也就是执行MOV  R1,#00H指令。最终的执行结果是R1中的值等于0。
第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。把上面的例子中的JZ改成JNZ试试看,程序执行的结果是怎样的?

CJNE  A, data, rel     ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行

CJNE  A, #data, rel    ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNE  Rn, #data, rel  ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNE  @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就顺序执行(执行程序的下一条指令),如果不相等,就转移,同样的,我们可以将rel理解成标号。即CJNE  A,#data,标号。这样利用这条指令,我们就可以判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较后哪个大,哪个小。本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,否则 CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。
例:
   MOV  A,R0
   CJNE A,#10H,L1
   MOV  R1,#0FFH
   AJMP L3
L1:JC   L2
   MOV  R1,#0AAH
   AJMP L3
L2:MOV  R1,#0FFH
L3:SJMP L3
上面的程序中有一条指令我们还没学过,即JC,这条指令的原型是JC  rel,作用我上面的JZ类似,但是它是判断CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则顺序执行(执行它的下面的一条指令)。
分析一下上面的程序,如果(A)=10H,则顺序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)大于10H,则CY=1,将顺序执行,即MOV  R1,#0AAH指令,而如果(A)小于10H,则将转移到L2处运行,即执行MOV  R1,#0FFH指令。
因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)大于10H,则(R1)=0AAH,如果(R0)小于10H,则(R1)=0FFH。
弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址的中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个相应的例子。
CJNE  A,10H   ;把A中的值和10H中的值比较(注意和前面题目的区别)
CJNE  10H,#35H;把10H中的值和35H中的值比较
CJNE  @R0,#35H;把R0中的值作为地址,从此地址中取数并和35H比较。

DJNZ  Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行

DJNZ  data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行

这两条指令在前面我们已有提到,这里就不多说了。

[3]. 子程序调用指令(1条)
子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。

LCALL  addr16 ; 长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址

ACALL  addr11 ; 绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)

上面这两条指令就是在主程序中调用子程序的。

RET  ; 子程序返回指令。此时(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)

子程序返回指令
子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了,即执行RET。


RETI  ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替

[4]. 空操作指令(1条)
所谓空操作,就是什么也不做,停一个周期,一般用作短时间的延时。

NOP     ; 这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时

上一篇:第二十五课:逻辑运算及移位指令分析   下一篇:第二十七课:布尔变量操作指令分析

标签:控制 转移 指令分析 点此搜索本站更多相关信息...搜索更多相关内容..

您可能还感兴趣的内容: 深圳今科电子单片机解密、IC解密服务 今科电子单解机、IC解密业务是怎样的流程?

此页的访问者还关注了下面这些相关资讯


·第二十七课:布尔变量操作指令分析
·第二十五课:逻辑运算及移位指令分析
·第二十八节:伪指令分析
·第二十四课:算术运算类指令分析
·第二十三课:数据传送类指令分析
·基础实验一:一个外部中断实验
·51单片机的寻址方式
·汇编程序的基本结构
·汇编语言及汇编过程
·汇编语言基础
·51单片机的延时及时序分析
·51单片机执行指令的过程
·51单片机的复位
·51单片机的中断系统
·第十三课:51单片机CPU的内部结构
·第十一课:存储器的存储原理
·第十课:编码及译码器工作原理
·第九课:8051单片机的存储器结构
·第八课:8051单片机I/O引脚工作原理
·第七课:51单片机的引脚
·第六课:51单片机的结构及其组成
·第五课:常用逻辑电路
·第四课:计算机中数的表示及运算
·第三课:单片机相关常用名词解释
·第二课:MCS-51单片机简述
·第一课:初识单片机
·MCS51单片机教程 前 言
·基于KEIL 51的单片机开发系统设计
·AT89C2051单片机与MT8880接口设计
·单片机C语言编程应注意的若干问题
·51单片机的串行口扩展方法
·单片机应用产品的PROTEUS设计与仿真
·8051单片机中DPTR的扩展设计
·51单片机整数二一十进制转换的快速算法
·51单片机模拟SPI总线的方法
·51单片机串行通讯中波特率的自动检测
·单片机RTOS随想曲
·单片机键盘输入编程
·51单片机I/O口使用经验
·在C51中变量的空间分配几个方法


版权声明:
( 更多版权详述 | 隐私政策 )

1、凡本网注明“来源:单片机信息网”或“单片机论坛”的文字、图片和音视频作品,版权均属深圳市今科电子有限公司所有,任何媒体、网站或个人未经本网书面授权不得转载、链接、转贴或以其他方式使用;已经本网书面授权的,在使用时必须注明“来源:单片机信息网”或“单片机论坛””。
2、本网未注明“来源:单片机信息网”或“单片机论坛”的作品均为转载稿,本网转载稿件只为传递更多信息,并不意味着认同其观点或真实性。如其他媒体、网站或个人转载使用,必须保留本网注明的“稿件来源”,并自负法律责任。
3、对于单片机信息网通过单片机论坛发布的作品,本网受著作权人委托禁止任何媒体、网站或个人在未经书面授权的情况下转载使用。
4、为维护自身权益、尊重作者版权,单片机信息网特委托深圳市律师协会为本网站法律顾问。对于违反本声明的,单片机信息网律师将依法追究其责任;对于刊载作品涉及版权等问题的,请作者在两周内与网站管理或张朝阳律师联系。
责任编辑:今科电子
双击复制本文网址,发送给您QQ/MSN上的朋友:
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
§最新评论
今科热门解密系列
·PIC芯片DSP系列单片机解密PIC芯
·Freescale单片机解密飞思卡尔芯
·飞思卡尔(Freescale)单片机解密/
·pic18f系列单片机解密
·三星(Samsung)系列单片机极速解
·飞林Feeling芯片系列MCU单片机/I
·MICROCHIP微芯(PIC)系列单片机/M
·单片机破解的常用方法及应对策略
·IC卡预付费电度表的安全及防范技
·单片机解密 单片机解密方法 单片
·PHILIPS系列单片机解密
·独家STC单片机解密
·我对红外遥控信号的解码思路
·51系列单片机解密(数分钟搞定)
·芯片解密业务流程介绍
·单片机解密后提供什么文件?
·单片机解密后为何要提供厂家的专
·芯片是如何被解密的?
·SST系列MCU单片机/IC/芯片解密
·INTEL系列单片机/IC/芯片解密
·ISSI系列MCU单片机IC破解芯片解
·ZILOG系列MCU单片机IC破解芯片解
·MOTOROLA系列MCU单片机IC破解芯
·LG(HYUNDAI系列MCU单片机/IC破
·MCPLD/EPLD系列MCU单片机IC破解
·新茂系列MCU单片机IC破解芯片解
·PHILIPS系列MCU单片机IC破解芯片
·MXIC系列MCU单片机IC破解芯片解
·(ATMEL)51系列MCU单片机IC破解芯
·华邦芯片系列MCU单片机/IC/芯片
·(MICROCHIP)微芯(PIC)系列MCU单
·CYPRESS系列MCU单片机IC破解芯芯
·Sinowealih系列MCU单片机IC破解
·Tenx系列MCU单片机IC破解芯片解
·松翰(SONIX)系列MCU单片机IC破解
·义隆(EMC)系列MCU单片机IC破解
·合泰(HOLTEK)系列MCU单片机IC破
·麦肯(MDT)系列mcu单片机IC破解芯
·今科单片机解密服务
·单片机程序开发
热点技术文章文献
·51单片机模拟SPI总线的方法
·51单片机汇编指令表
·89S51看门狗功能的使用方法
·单片机键盘输入编程
·P1口八个LED灯做三路流水灯实验
·汇编语言及汇编过程
·C语言中嵌入汇编语言集锦
·用C51实现单片机的中文输入法
·51单片机的寻址方式
·第八课:8051单片机I/O引脚工作原
·用DS18B20构成测温系统
·第五课:常用逻辑电路
·基础实验一:一个外部中断实验
·C8051F与80C51系列单片机的不同
·C51串口输出输入函数
·浅析AT89S51与AT89C51单片机的
·C51中断函数
·51单片机I/O口使用经验
·单片机控制步进电机驱动器工作原
·汇编语言基础
·按键控制灯实验
·dsPIC30F6010单片机的原理及应用
·单片机C语言编程应注意的若干问
·节约单片机端口资源的键盘电路
·51单片机的串行口扩展方法
·c51单片机实用通信协议
·单片机硬件系统设计原则
·51单片机多机同步复位电路
·C51单片机入门教程
·汇编程序的基本结构
今科推荐产品
·51系列单片机解密(数分钟搞定)
·今科单片机解密服务
·单片机程序开发
·小家电(厨卫电器)系列产品
·灯饰控制系列产品
·四键遥控器系列产品
·红外遥控器系列产品
相关技术文献资讯
·第二十七课:布尔变量操作指令分
·第二十五课:逻辑运算及移位指令
·第二十八节:伪指令分析
·第二十四课:算术运算类指令分析
·第二十三课:数据传送类指令分析
·基础实验一:一个外部中断实验
·51单片机的寻址方式
·汇编程序的基本结构
·汇编语言及汇编过程
·汇编语言基础
·51单片机的延时及时序分析
·51单片机执行指令的过程
·51单片机的复位
·51单片机的中断系统
·第十三课:51单片机CPU的内部结构
·第十一课:存储器的存储原理
·第十课:编码及译码器工作原理
·第九课:8051单片机的存储器结构
·第八课:8051单片机I/O引脚工作原
·第七课:51单片机的引脚
·第六课:51单片机的结构及其组成
·第五课:常用逻辑电路
·第四课:计算机中数的表示及运算
·第三课:单片机相关常用名词解释
·第二课:MCS-51单片机简述
论坛最新讨论资讯
芯片解密常见问题
· 什么是单片机?
· 单片机要如何加密?
· 单片机芯片是如何被解密的?
· 单片机解密后提供什么文件?
· 芯片解密为何用专用格式文档?
· 芯片解密是怎样的业务流程?
首页 - 隐私政策 - 版权申明 - 网站地图 - 产品中心 - IC解密中心 - 企业文化 - 代理加盟 - 公司简介 - 人才招聘 - 常见问题 - 我要投稿 - 联系我们 - 返回顶部
[单片机信息网] .© 2006-2009 版权所有,严禁非法复制与建立镜像.运营商:[今科电子] 公司地址:中国.深圳/上海 E-Mail:renbangent#126.com sales#techmcu.com(换#为@)
深圳公司 电话热线:+86 0755-82964200 82964201 82964700 传真:+86 0755-82964432 技术支持:13684994966 业务QQ: 501995683 联系人:黄/陈小姐(工程师) 罗先生(高工)
上海公司 电话热线:+86 021-63062380 15001885509   传真:+86 021-63062380-6   技术支持:15001885509 业务QQ:xxxxxxxx   联系人:郑小姐(业务) 陆工(工程师)
Optimized for 1024x768 to Firefox,Opera and MS-IE6 or higher,Template designed by: Berlin Lee.Web Support[FuAn Network] ICP Record No.:07053756 Webmaster