《第3章.指系统[控制程序转移类指new](下).ppt》由会员分享,可在线阅读,更多相关《第3章.指系统[控制程序转移类指new](下).ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与返回指令调用与返回指令重点、难点:重点、难点:“JMP、CJNE、DJNZ”指令。指令。3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令1.无条件转移指令无条件转移指令 短转移类指令:短转移类指令:AJMP addr11 AJMP addr11;先(先(PCPC)+2+2PCPC,后后addr11 addr11 PC
2、100,(,(PC1511 )不变不变程序转移范围:程序转移范围:2 2KBKB的程序存储器地址空间的程序存储器地址空间。2 2字节指令字节指令 l例:例:1030H:AJMP 0010000 0000B 问:转移的地址是多少?问:转移的地址是多少?解:解:addr=001 00 00 0000 B 先先(PC)+2=1030H+2=1032H=0001 0 000 0011 0010 B 后:后:(PC1511 )不变,不变,PC100=0001 0 001 00 00 0000 B=1100H 即执行该指令后,将转至地址为:即执行该指令后,将转至地址为:1100H处。处。3.3.4 3.3
3、.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令长转移指令长转移指令 LJMP addr16LJMP addr16 ;addr16addr16PCPC。3字节指令字节指令 指令中:第二字节装入指令中:第二字节装入PCPC的高的高8 8位,第三字节装入位,第三字节装入PCPC的低的低8 8位。位。程序转移范围:程序转移范围:6464KBKB的程序存储器地址空间。的程序存储器地址空间。例:例:1023 1023H H:LJMP 212AH LJMP 212AH(PCHPCH)=21H=21H,(,(PCLPCL)=2AH=2AH。机器码为:机器码为:02 21 202
4、 21 2AHAH。3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令相对转移指令相对转移指令 SJMP SJMP relrel ;先(先(PCPC)+2PC+2PC,后(后(PCPC)+rel+rel PC PC ;2字节指令字节指令 程序转移范围程序转移范围:256B.手工编程时,需计算偏移量手工编程时,需计算偏移量rel:rel机器码的相对偏移量,为机器码的相对偏移量,为8位补码。位补码。转移范围:转移范围:-128+127字节。字节。即:即:rel为正数时,范围为:为正数时,范围为:0+127(00H7FH)。)。rel为负数时,范围为:为
5、负数时,范围为:-128-1(80HFFH)。)。相对转移指令相对转移指令“SJMP SJMP relrel”例如:例如:0100H:SJMP rel设转移的地址为设转移的地址为0157H,则:则:rel=0157H-0100H-2=55H。故该指令可写成:。故该指令可写成:0100H:SJMP 55H 其机器码为:其机器码为:80H 55H正向跳转时:正向跳转时:rel目的地址源地址目的地址源地址-2 =地址差地址差-2。0157H反向跳转时:反向跳转时:rel目的地址源地址目的地址源地址-2补补 =-2补补-|地址差地址差|=FEH-|地址差地址差|例如例如:0100H:SJMP rel设
6、程序转移的地址为:设程序转移的地址为:00F8H,则地址偏移量则地址偏移量rel为:为:rel=FEH-|0100H-00F8H|=FEH-0008H=F6H。故该指令可写成:故该指令可写成:0100H:SJMP F6H 其机器码为:其机器码为:80H F6H00F8Hl编程时,可用编程时,可用标号标号代替转移目的地址,代替转移目的地址,rel 交给编译程序计交给编译程序计算。算。l例如:例如:SJMP NEXT NEXT:原地踏步指令的指令原地踏步指令的指令:HERE:SJMP HERE常写成:常写成:SJMP$l总结总结短转移类指令:短转移类指令:AJMP addr11AJMP addr1
7、1 长转移类指令:长转移类指令:LJMP addr16LJMP addr16 相对转移指令:相对转移指令:SJMP SJMP relrel这三条指令,可理解成:这三条指令,可理解成:PCPC值改变,即跳转到一个标号处。值改变,即跳转到一个标号处。它们的区别:它们的区别:v跳转的范围不同(跳转的范围不同(2 2KBKB;64KB 64KB;-128-128+127+127 )。)。v指令构成不同。指令构成不同。AJMPAJMP、LJMPLJMP后跟的是后跟的是绝对地址绝对地址,而而SJMPSJMP后跟的是后跟的是相对地址相对地址。v指令长度不同(指令长度不同(2 2字节;字节;3 3字节;字节;
8、2 2字节)。字节)。v 原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用LJMPLJMP来替代。来替代。均可用标号表示均可用标号表示3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令间接转移指令(散转指令)间接转移指令(散转指令)JMP A+DPTR JMP A+DPTR ;(;(A A)+(DPTRDPTR)PCPC。1字节指令字节指令 使用该指令前,应先给使用该指令前,应先给DPTRDPTR赋值,赋值,A A中的内容为无符号数。中的内容为无符号数。转移范围转移范围:256B.:256B.该指令多用于
9、多分支程序结构中。该指令多用于多分支程序结构中。P75.P75.例例3-113-11 根据累加器根据累加器A A中命令键的键值,设计命令健操作中命令键的键值,设计命令健操作程序入口跳转表。程序入口跳转表。例如:当(例如:当(A A)=2=2时,程序跳转到标号为时,程序跳转到标号为“XX2 2”的程序中。的程序中。3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令2.空操作空操作 NOP ;(;(PC)+1PC。1字节指令字节指令 3.条件转移类指令条件转移类指令条件转移指令是指在满足一定条件转移指令是指在满足一定条件条件时进行时进行相对转移相对转移
10、,否则程序,否则程序继续执行继续执行本指令的本指令的下一条指令。下一条指令。3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令判判A A内容是否为内容是否为0 0转移指令转移指令JZ JZ relrel ;(PCPC)+2+2PCPC。若若A=0A=0,则转移到(则转移到(PCPC)=(PCPC)+rel+rel;否则顺序执行。否则顺序执行。JNZ JNZ relrel ;(;(PCPC)+2PC+2PC。若若A0A0,则转移到(则转移到(PCPC)=(PCPC)+rel+rel ;否则顺序执行。;否则顺序执行。在编写汇编语言源程序时,可以直接写成
11、:在编写汇编语言源程序时,可以直接写成:JZ JZ 标号标号 ;即转移到;即转移到标号标号处。例如:处。例如:JZ LOOPJZ LOOP以上两条指令均为:2字节指令字节指令 判判判判A A A A内容是否为内容是否为内容是否为内容是否为0 0 0 0转移指令转移指令转移指令转移指令l例:例:MOV AMOV A,R0R0 JZ L1JZ L1 MOV R1MOV R1,#00H#00H AJMPAJMP L2L2 L1:L1:MOV R1MOV R1,#0FFH#0FFH L2:L2:SJMPSJMP L2L2 ENDEND 问:如果执行程序前(问:如果执行程序前(R0R0)=0=0,执行上
12、述程序后,(执行上述程序后,(R1R1)=?;?;若执行程若执行程序前(序前(R0R0)0 0,则(则(R1R1)=?。?。解:解:如果如果(R0R0)=0=0,结果结果(R1R1)=0FFH=0FFH;而若而若(R0R0)0 0,则结果是则结果是(R1R1)=00H=00H。3.3.4 3.3.4 控制程序转移类指令控制程序转移类指令控制程序转移类指令控制程序转移类指令比较比较(不相等)(不相等)转移指令转移指令 CJNE CJNE (目的字节),(源字节),目的字节),(源字节),relrel ;3 3字节指令字节指令 CJNE CJNE A A,#data#data,relrel CJN
13、E CJNE A A,directdirect,relrel CJNE CJNE RnRn,#data#data,relrel CJNE CJNE RiRi,#data#data,relrel同样地,使用时,可以将同样地,使用时,可以将relrel理解成标号,即:理解成标号,即:CJNE ACJNE A,#data#data,标号标号CJNE ACJNE A,directdirect,标号标号CJNE CJNE RnRn,#data#data,标号标号CJNE CJNE RiRi,#data#data,标号标号比较比较比较比较(不相等)(不相等)(不相等)(不相等)转移指令转移指令转移指令转移
14、指令 CJNE CJNE A A,#data#data,relrel ;先(先(PCPC)+3+3PCPC 若若(A)#data,A)#data,则则(PC)+relPC)+relPCPC,且且0 0CYCY;若若(A)#data,A)(direct),A)(direct),则则(PC)+relPC)+relPCPC,且且0 0CYCY;若若(A)(direct),A)#data,)#data,则则(PC)+relPC)+relPCPC,且且0 0CYCY;若若(RnRn)#data,)#data,)#data,则则(PC)+relPC)+relPCPC,且且0 0CYCY;若若(RiRi)#
15、data,)10H,10H,10HR010H,则则R1=0AAHR1=0AAH;如果如果R010HR010H,则则R1=0FFHR1=0FFH。;如如R0=10H,R0=10H,则不转移则不转移R1=00HR1=00H;如如CY=1CY=1即即 R010H,R010H,R010H,则转移则转移例:例:例:例:如图所示:如图所示:P3.2P3.2和和P3.3P3.3上各接有一只按键,要求它们分别按上各接有一只按键,要求它们分别按下时下时(P3.2=0P3.2=0或或P3.3=0),P3.3=0),分别使分别使P1P1口为口为0 0或或FFHFFH。试编写程序。试编写程序。思考题:思考题:思考题:思考题:如图所示,开关如图所示,开关K1K1和和K2K2未按下未按下时,两只发光二极管均不亮。当时,两只发光二极管均不亮。当按下按下K1K1时,使发光二极管时,使发光二极管LED1LED1亮亮,而发光二极管,而发光二极管LED2LED2不亮;当不亮;当按下按下K2K2时,时,LED2LED2亮亮而而LED1LED1不亮。不亮。试编写程序实现上述功能。试编写程序实现上述功能。本本 章章 完完
限制150内