资源描述:
《单片机3.5控制转移指令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五节控制转移指令这类指令可使程序转向非顺序单元执行,使程序发生分支或循环。一、无条件转移指令:1.调用与返回指令:P71调用子程序与从子程序返回操作解释:8000MOVA,#05H8250BBD:-----8002-----8252-----8004-----------800AACALLBBDPC800C将800C压入堆栈保存RETPC修改为BBD的地址返回操作从堆栈中弹出断点1(1).绝对调用指令ACALLaddr11调用子程序指令。该指令可改变程序计数器PC的低11位地址,所调子程序首地址必须在2K页内。(2
2、).长调用指令LCALLaddr16调用子程序指令。所调子程序首地址可在64K地址的任何位置。(3).从子程序返回指令RET22.无条件跳转指令:P64(1)绝对跳转指令AJMPaddr11可使程序在2k页内跳转,即可改变低11位地址。(2)长跳转指令LJMPaddr16可使程序跳转到64K程序存储器的任何位置。(3)相对短跳转指令SJMPrel其中rel为偏移量,指令表中用(e)表示。rel的数字指出PC跳转应从现地址向上或向下跳转多少字节。rel为8位有符号二进制数,它的范围是-128~+127,用补码表示。re
3、l为负值时表示从大地址向小地址跳转,为正值时表示从小地址向大地址跳转。例38000MAIN:MOVA,#01H8002ADDA,#02H…8006SJMPMAIN(DIR)PC8008MOVA,@R0…800FDIR:MOVA,R2偏移量rel的计算公式为(e)=目的地址–PC当前值,注意用补码表示。PC当前值为跳转指令下面一条指令的地址,即8008H。上例中跳转到MAIN时:(e)=8000H–8008H=F8H(-8)跳转到DIR时:(e)=800FH–8008H=07H4使用以上调用与转移指令注意:★以上指令均
4、为无条件,执行该类指令时程序计数器PC一定转向非顺序单元执行。★调用与返回指令常成对使用,返回指令RET应出现在每一个子程序的末尾。★调用与返回指令都要有栈操作,使用该类指令前要建立堆栈,以便保护断点。★转移指令与调用子程序指令的异同:相同之处是它们都是改变PC值,使程序转入非顺序单元执行。不同之处是:调用与返回指令在子程序执行结束后一定返回原断点地址,因此一定有栈操作。转移指令转走后不一定回到原断点,因此不必堆栈保存断点地址。5★三种转移指令:AJMPaddr11短跳转地址范围2K字节二字节指令LJMPaddr16
5、长跳转地址范围64K字节三字节指令SJMPrel相对跳转地址范围256字节二字节指令它们就跳转的操作来说没有任何区别,适用于不同的跳转地址范围。6二、有条件转移指令:该类指令是当符合某种条件时,程序转移到另一地址执行,不符合这种条件时,程序按原顺序继续执行。1.判零相对转移指令:以累加器A的内容为0或非0为条件判断转移。P68JZrel;A的内容为0则相对转移,否则顺序执行。JNZrel;A的内容非0则相对转移,否则顺序执行。rel偏移量的定义同前。例MOVA,#56HSUBBA,R0JZ8016H;当减法结果为0时
6、跳到8016H地址执行…否则继续往下执行。72.比较相对转移指令:P68CJNE(目的字节),(源字节),rel操作:将目的字节内容与源字节内容相比较,若不等则相对转移,若相等则顺序执行。若(目的字节)<(源字节)则C=1,否则C=0该指令执行后操作数内容不变。例CJNEA,#04H,MAIN;(A)≠04H则跳转到MAIN标号(A)=04H顺序执行如果(A)<04H则C=1CJNE@R0,#05H,DIR;((R0))≠05H则跳DIR标号CJNEA,30H,STOP;(A)≠(30H)则跳STOP标号83.控制转
7、移指令:P70DJNZ第一操作数,rel操作:第一操作数内容减1,结果非0则相对转移,结果为0则顺序执行。第一操作数可以是DATA或Rn。该指令不影响任何标志位。例DJNZR0,LOOP;(R0)–1结果非0转LOOP标号DJNZ30H,SQ;(30H)–1结果非0转SQ标号94.以位地址的内容为判断条件的转移指令:(1)JCrel;(C)=1跳转;(C)=0顺序向下执行(2)JNCrel;(C)=0跳转;(C)=1顺序向下执行(3)JBbit,rel;(bit)=1跳转;(bit)=0顺序问下执行(4)JNBbit
8、,rel;(bit)=0跳转;(bit)=1顺序问下执行(5)JBCbit,rel;(bit)=1跳转,且将该位内容清0;(bit)=0顺序向下执行三、其它指令1.RETI从中断返回指令。后述。2.NOP空操作指令。执行该指令CPU不作任何操作,只是延时一个机器周期的时间。10四、控制转移指令综合举例:例1判断P1口输入的数据若为负则转DIR,