51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > ◆学习MCU > 详细内容
[基础篇]十四、条件转移指令
阅读次数:3035  字体大小: 【】 【】【

作者:平凡单片机

条件转移指令:

条件转移指令是指在满足一定条件时进行相对转移。

  1. 判 A 内容是否为 0 转移指令

    JZ rel

    JNZ rel

    第一指令的功能是:如果 (A)=0 ,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解: JZ 标号。即转移到标号处。下面举一例说明:

    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 试试吧,看看程序执行的结果是什么 ?

  2. 比较转移指令

    CJNE A,#data,rel

    CJNE A,direct,rel

    CJNE Rn,#data,rel

    CJNE @Ri,#data,rel

    第一条指令的功能是将 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 。

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号