指令系统控制程序转移类指令.ppt

上传人:牧羊曲112 文档编号:5736192 上传时间:2023-08-15 格式:PPT 页数:34 大小:333.50KB
返回 下载 相关 举报
指令系统控制程序转移类指令.ppt_第1页
第1页 / 共34页
指令系统控制程序转移类指令.ppt_第2页
第2页 / 共34页
指令系统控制程序转移类指令.ppt_第3页
第3页 / 共34页
指令系统控制程序转移类指令.ppt_第4页
第4页 / 共34页
指令系统控制程序转移类指令.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《指令系统控制程序转移类指令.ppt》由会员分享,可在线阅读,更多相关《指令系统控制程序转移类指令.ppt(34页珍藏版)》请在三一办公上搜索。

1、3.3.4 控制程序转移类指令,包括以下类型:无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令,重点、难点:“JMP、CJNE、DJNZ”指令。,3.3.4 控制程序转移类指令,1.无条件转移指令 短转移类指令:AJMP addr11;先(PC)+2PC,后addr11 PC100,(PC1511)不变程序转移范围:2KB的程序存储器地址空间。2字节指令,例:1030H:AJMP 0010000 0000B 问:转移的地址是多少?,解:addr=001 00 00 0000 B 先(PC)+2=1030H+2=1032H=0001 0 000 0011 0010 B 后:(P

2、C1511)不变,PC100=0001 0 001 00 00 0000 B=1100H 即执行该指令后,将转至地址为:1100H处。,3.3.4 控制程序转移类指令,长转移指令 LJMP addr16;addr16PC。3字节指令 指令中:第二字节装入PC的高8位,第三字节装入PC的低8位。程序转移范围:64KB的程序存储器地址空间。,例:1023H:LJMP 212AH(PCH)=21H,(PCL)=2AH。机器码为:02 21 2AH。,3.3.4 控制程序转移类指令,相对转移指令 SJMP rel;先(PC)+2PC,后(PC)+rel PC;2字节指令 程序转移范围:256B.,手工

3、编程时,需计算偏移量rel:rel机器码的相对偏移量,为8位补码。转移范围:-128+127字节。,即:rel为正数时,范围为:0+127(00H7FH)。rel为负数时,范围为:-128-1(80HFFH)。,相对转移指令“SJMP rel”,例如:0100H:SJMP rel设转移的地址为0157H,则:rel=0157H-0100H-2=55H。故该指令可写成:0100H:SJMP 55H 其机器码为:80H 55H,正向跳转时:rel目的地址源地址-2=地址差-2。,0157H,反向跳转时:rel目的地址源地址-2补=-2补-|地址差|=FEH-|地址差|,例如:0100H:SJMP

4、rel设程序转移的地址为:00F8H,则地址偏移量rel为:rel=FEH-|0100H-00F8H|=FEH-0008H=F6H。故该指令可写成:0100H:SJMP F6H 其机器码为:80H F6H,00F8H,编程时,可用标号代替转移目的地址,rel 交给编译程序计算。例如:SJMP NEXT NEXT:,原地踏步指令的指令:HERE:SJMP HERE常写成:SJMP$,总结短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel这三条指令,可理解成:PC值改变,即跳转到一个标号处。它们的区别:跳转的范围不同(2KB;64KB;-12

5、8+127)。指令构成不同。AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。指令长度不同(2字节;3字节;2字节)。原则上,所有用SJMP或AJMP的地方都可以用LJMP来替代。,均可用标号表示,3.3.4 控制程序转移类指令,间接转移指令(散转指令)JMP A+DPTR;(A)+(DPTR)PC。1字节指令 使用该指令前,应先给DPTR赋值,A中的内容为无符号数。转移范围:256B.该指令多用于多分支程序结构中。,P75.例3-11根据累加器A中命令键的键值,设计命令健操作程序入口跳转表。,例如:当(A)=2时,程序跳转到标号为“XX2”的程序中。,3.3.4 控制程序转移类

6、指令,2.空操作 NOP;(PC)+1PC。1字节指令,3.条件转移类指令条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。,3.3.4 控制程序转移类指令,判A内容是否为0转移指令JZ rel;(PC)+2PC。若A=0,则转移到(PC)=(PC)+rel;否则顺序执行。JNZ rel;(PC)+2PC。若A0,则转移到(PC)=(PC)+rel;否则顺序执行。在编写汇编语言源程序时,可以直接写成:JZ 标号;即转移到标号处。例如:JZ LOOP,以上两条指令均为:2字节指令,判A内容是否为0转移指令,例:MOV A,R0 JZ L1 MOV R1,#00H

7、AJMP L2 L1:MOV R1,#0FFH L2:SJMP L2 END 问:如果执行程序前(R0)=0,执行上述程序后,(R1)=?;若执行程序前(R0)0,则(R1)=?。,解:如果(R0)=0,结果(R1)=0FFH;而若(R0)0,则结果是(R1)=00H。,3.3.4 控制程序转移类指令,比较(不相等)转移指令 CJNE(目的字节),(源字节),rel;3字节指令 CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,同样地,使用时,可以将rel理解成标号,即:CJNE A,#data,标号C

8、JNE A,direct,标号CJNE Rn,#data,标号CJNE Ri,#data,标号,比较(不相等)转移指令,CJNE A,#data,rel;先(PC)+3PC 若(A)#data,则(PC)+relPC,且0CY;若(A)#data,则(PC)+relPC,且1CY;若(A)=#data,则顺序执行,且0CY。,CJNE A,direct,rel;先(PC)+3PC 若(A)(direct),则(PC)+relPC,且0CY;若(A)(direct),则(PC)+relPC,且1CY;若(A)=(direct),则顺序执行,且0CY。,CJNE Rn,#data,rel;先(PC

9、)+3PC 若(Rn)#data,则(PC)+relPC,且0CY;若(Rn)#data,则(PC)+relPC,且1CY;若(Rn)=#data,则顺序执行,且0CY。,比较(不相等)转移指令,CJNE Ri,#data,rel;先(PC)+3PC 若(Ri)#data,则(PC)+relPC,且0CY;若(Ri)#data,则(PC)+relPC,且1CY;若(Ri)=#data,则顺序执行,且0CY。,比较(不相等)转移指令,利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,

10、哪个数小。如果前面的数大,则CY=0,否则CY=1。因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。,循环转移指令(减1不为0转移指令),DJNZ Rn,rel;先(PC)+2PC,(Rn)-1Rn,若(Rn)0,则(PC)+relPC,若(Rn)=0,则结束循环,程序往下执行。DJNZ direct,rel;先(PC)+3PC,(direct)-1 direct;若(direct)0,则(PC)+relPC;若(direct)=0,则结束循环,程序往下执行。,例:MOV 23H,#0AH CLR ALOOP:ADD A,23H DJNZ 23H,LOOP SJMP$问:上述程序段

11、的执行过程是怎样的?,执行过程是:将23H单元中的数连续相加,保存至A中,每加一次,23H单元中的数值减1,直至减到0,共加0AH次。,调用和返回指令,主程序,A,第1次调用,RET,子程序ADM1,B,返回1,第2次调用,返回2,C,D,主程序调用子程序返回过程示意图,断点,断点,调用和返回指令,短调用指令 ACALL addr11;2字节指令 操作:先:(PC)+2PC,(SP)+1 SP 后:(PC70)(SP)(SP)+1 SP(PC158)(SP)addr 100(PC100)(PC1511)不变,断点值压入堆栈,编程时,可用标号代替转移目的地址,addr11,addr16交给编译程

12、序计算。,长调用指令 LCALL addr16;3字节指令 操作:先:(PC)+3PC,(SP)+1 SP 后:(PC70)(SP)(SP)+1 SP(PC158)(SP)addr 150(PC),断点值压入堆栈,目的地址,目的地址,进栈:先压入低8位地址,后压入高8位地址。,调用和返回指令,子程序返回指令 RET;1字节指令 操作:先:(SP)PC158,弹出断点的高8位。后:(SP)-1 SP(SP)PC70,弹出断点的低8位。(SP)-1 SP。,出栈:先弹出高8位地址,后弹出低8位地址。,中断返回指令 RETI;1字节指令 操作:先:(SP)PC158,弹出断点的高8位。后:(SP)-

13、1 SP(SP)PC70,弹出断点的低8位。(SP)-1 SP。,RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。,例3-12,设(SP)=40H,符号地址“SUBRTN”指向ROM的5678H,执行指令:0123H:LCALL SUBRTNS 执行完指令后(PC)+3=0123H+3=0126H。将该PC的内容压入堆栈:向(SP)+1=40H+1=41H中压入26H,向(SP)+1=41H+1=42H压入01H,此时(SP)=42H。而地址SUBRTN=5678H送入PC,程序转去执行以5678H为首地址的子程序。,3.3.5 位操作(布尔处理)类指令,

14、MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等指令。在进行位处理时,CY用作“位累加器”。在MCS-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH);可以位寻址的特殊功能寄存器:89C51中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除,如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器

15、控制寄存器)、P0P3(I/O端口锁存器)。,位地址表达方式,以PSW中位4(RS1)为例。直接(位)地址方式:如 D4H;点操作符号方式:如 PSW.4,D0H.4;位名称方式:如 RS1;用户定义名方式:如用伪指令 bitSUB.REG bit RS1定义后,可用SUB.REG代替RS1。,1.位传送指令,MOV C,bit;(bit)C。2字节指令 MOV bit,C;(C)bit。2字节指令,例:MOV C,P1.0;将P1.0的状态送给C。MOV P2.0,C;将C中的状态送到P2.0,引脚上去。,2.位修正指令,位清0指令 CLR C;使CY=0。1字节指令 CLR bit;0bi

16、t。2字节指令,例:CLR P1.0;即使P1.0变为0,位置1指令 SETB C;1 CY。1字节指令 SETB bit;1bit。2字节指令,2.位修正指令,位取反指令CPL C;(C)C,1字节指令 CPL bit;(bit)bit。2字节指令,3.位逻辑运算指令位逻辑“与”指令ANL C,bit;(C)(bit)C。2字节指令 ANL C,/bit;(C)(bit)C。2字节指令,注意:指定的位地址中的值本身并不发生变化。,例:ANL C,/P1.0,3.位逻辑运算指令,位逻辑“或”指令ORL C,bit;(C)(bit)C。2字节指令 ORL C,/bit;(C)(bit)C。2字节

17、指令,4.位条件转移类指令判Cy转移指令 JC rel;先(PC)+2PC;后:若(CY)=1,则转移。否则顺序执行JNC rel;先(PC)+2PC;后:若(CY)=0,则转移。否则顺序执行,(PC)+relPC,(PC)+relPC,上面两条指令均为:2字节指令。,4.位条件转移类指令,判位变量转移指令 JB bit,rel;(PC)+3PC;若(bit)=1,则(PC)+rel PC;否则顺序执行。JNB bit,rel;(PC)+3PC;若(bit)=0,则(PC)+rel PC;否则顺序执行。JBC bit,rel;(PC)+3PC;若(bit)=1,则(PC)+rel PC,且0b

18、it;否则顺序执行。,上面三条指令均为:3字节指令。,例:MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 AJMP L3L1:JC L2 MOV R1,#0AAH AJMP L3L2:MOV R1,#0FFHL3:SJMP L3问:本程序执行前,如果R0的内容分别为:=10H,10H,10H,则执行上述程序后,R1的内容是什么?,解:如果R0=10H,则R1=00H;如果R010H,则R1=0AAH;如果R010H,则R1=0FFH。,;如R0=10H,则不转移R1=00H;如CY=1即 R010H,则转移,例:,如图所示:P3.2和P3.3上各接有一只按键,要求它们分别按下时(P3.2=0或P3.3=0),分别使P1口为0或FFH。试编写程序。,思考题:,如图所示,开关K1和K2未按下时,两只发光二极管均不亮。当按下K1时,使发光二极管LED1亮,而发光二极管LED2不亮;当按下K2时,LED2亮而LED1不亮。试编写程序实现上述功能。,本 章 完,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号