当前位置:首页 > 单片机 > 单片机
[导读]控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。控制转移类指令的功能就是根据要求修改程序计数器PC的内容

控制转移类指令

计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。

控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。

控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。

1.无条件转移指令(4条)

LJMP   add16           ;add16→PC,无条件跳转到add16地址,可在64KB范围内

转移,称为长转移指令

AJMP   add11          ;add11→PC,无条件转向add11地址,在2KB范围内转移

SJMP   rel           ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号

数,范围-128~127,即可向后跳转128,向前可跳转127

JMP    @A+DPTR         ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容相

加后形成的新地址

例1  执行指令

LJMP   9100H

不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。

例2  程序

2000H   MOV   R0 , #10H  ;10H→PC

2002H   SJMP  03H   ;PC+2+rel=2002H+2+03H=2007H→PC

┇        ┇

2006H     ┇

2007H     ┇

从说明中可见,执行SJMP  03H 指令后,马上跳转到2007H地址执行程序。

2.条件转移指令(8条)

条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序

执行下面的指令。

JZ   rel           ;A=0转向PC+2+rel→PC,A≠0顺序执行

JNZ  rel           ;A≠转向PC+2+rel→PC ,A=0顺序执行

CJNE A, direct, rel     ;A≠ (direct)转向PC+3+rel→PC且当A>(direct),Cy=0

;当A<(direct),Cy=1

;否则A=(direct),PC+3→PC即顺序执行

CJNE A, #data, rel      ;A data P转向PC+3+rel→PC且当A >data,Cy=0

;当A <data,Cy=1,

;A=data,PC+3→PC顺序执行

CJNZ  Rn, #data, rel  ;Rn≠data转向PC+3+rel→PC

;且当Rn>data,Cy=0,当Rn<data,Cy=1

;Rn=data,PC+3→PC顺序执行

CJNE  @Ri,#data, rel  ;(Ri) ≠data ,PC+3+rel→PC

;且当(Ri)>data ,Cy=0,当(Ri)<data,Cy=1

;(Ri)=data, PC+3→PC顺序执行

DJNZ  Rn, rel       ;Rn-1→Rn ,Rn ≠0转向PC+2+rel→PC

;Rn=0,PC+2→PC顺序执行

DJNZ direct, rel      ;(direct)-1→(direct),(direct) ≠0转向 PC+2+rel

→PC

;(direct)=0 ,PC+2→PC顺序执行

注意:

1)CJNE类指令借用进位标志Cy作为比较结果的标志位。从指令中可知,目的操作数内容小于原操作数内容Cy置1,反之Cy清0,该类指令多用于分支程序。

2) DJNZ指令执行时Rn或direct先减1,然后再判断Rn或direct内容是否等于0。不为0则转,为0顺序执行。DJNZ用在循环程序中,控制循环次数很方便。

3) JZ和JNZ的操作数只有一个,是对A的内容的进行判断的指令。

例1 以下程序的循环次数是多少,最后(R0)=?

MOV  R0 , #0

LL:     ┇

DJNZ  R0 , LL

分析:由于DJNZ是减1再判断大小的,因为R0=0,所以第一次执行DJNZ  R0 , LL后R0=FFH=255,则程序要执行的次数为256次,R0最后的值为0。

解:程序要循环的次数为256次,最后R0=0

3.调用、返回、控操作指令

在程序设计中,常常要把具有一定功能的公用程序编制成子程序。当主程序转至子

程序时用调用指令,而在子程序的最后安排一条返回指令,使执行完子程序后再返回到主程序。

(1) LCALL    addr16    ;调用入口地址为addr16的子程序

这是一条长调指令,可调用64KB范围内的子程序,因此,可放在程序的任何位置。

指令的执行过程分两步:第一步把断点(当前执行指令的下一条指令地址)压入堆栈。第二步将调用的子程序的入口地址装入PC。即addr16(16位地址)→PC,转向执行子程序。

(2) ACALL    addr11      ;子程序入口地址为addr11的子程序

这是一条短调指令,只能实现2KB范围内的子程序的调用。其指令执行过程与LCALL

指令一样。但是需要注意的是:ACALL中addr11只占用PC的PC.0~PC.10位。

(3) RET         ;放在子程序最后,使程序准确返回到主程序断点处

执行过程为:(SP)→PC.8~PC.15断点地址高字节送入PC

SP-1→SP,(SP) →PC.0~PC.7断点低字节送入PC,

这时PC中为主程序断点地址,程序准确返回到调用指令的下一条。

例  设SP=62H,(62H)=07H,(61H)=30H,执行指令RET

结果:SP=60H,(PC)=0730H,CPU从0730H开始执行程序。

(4) RETI     ;中断返回指令

该指令用于中断服务程序,使中断程序结束后准确返回到主程序断点处,执行过程同RET,它还能清除优先级状态。

(5) NOP         ;空操作

执行该指令时,CPU只进行取指令、译码,而不进行任何操作,故称为控操作。常用于产生一个机器周期延时。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭