第11讲 控制转移类指令(二)教案
- 格式:doc
- 大小:47.50 KB
- 文档页数:2
控制转移类指令和位操作指令(一).控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。
控制转移类指令的功能就是根据要求修改程序计数器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,向前可跳转127JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容相加后形成的新地址例执行指令LJMP 9100H不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。
例程序2000H MOV R0 , #10H ;10H→PC2002H 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作为比较结果的标志位。
第十一讲控制转移类指令教学方法: 讲授法教学目的:1、了解控制转移类指令的分类2、掌握条件转移指令的特点及应用教学重点:条件转移指令的特点及应用教学难点:条件转移指令的特点及应用教学环节组织教学:(2分钟)检查学生人数,强调作业要求。
复习提问:1、控制转移指令是如何分类的?2、无条件转移指令、调用指令分是哪几个?引入新课:二、条件转移指令实现按照一定条件决定转移的方向。
分三类。
1、判零转移JZ relJNZ relJZ rel ;若(A)= 0 ,则转移,否则顺序执行。
JNZ rel ;若(A)≠0,则转移,否则顺序执行。
转移目的地址= (PC)+ 2 + rel不影响任何标志位。
例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。
解:MOV R0,#DATA2MOV DPTR,#DATA1LOOP1:MOVX A,@DPTRJZ LOOP2MOV @R0,AINC R0INC DPTRSJMP LOOP1LOOP2:SJMP LOOP22、比较转移指令功能:比较二个字节中的值,若不等,则转移。
CINE A,#data,relCJNE A,direct,relCJNE @Ri,#data,relCJNE Rn,#data,rel该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。
转移目的地址= (PC)+ 3 + rel若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。
该类指令可产生三分支程序:即,相等分支;大于分支;小于分支。
例2、设P1口的P1.0 ~ P1.3为准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。
解:MOV A,P1ANL A,#0FHCJNE A,#0FH,W AIT ;P1.0 ~ P1.3不为全1时,返回W AITMOV A,R2······3、循环转移指令DJNZ Rn,rel ;(二字节指令)DINZ direct,rel ;(三字节指令)本指令也为双功能指令,即减1操作和判断转移操作。
2.关于实例三的说明有些步骤的实现方法已在前面的实例中做过介绍,下面就任务内无特权级变换的转移和使用局部描述符LDT等作些说明:(1)实模式下初始化LDT演示任务使用了局部描述符表LDT,本实例中该LDT在实模式下初始化(当然,也可以在使用LDT前的保护模式初始化)。
为了简便,LDT中各描述符的界限和属性值在定义时预置,利用一个子程序设置各段的段基地址。
为方便起见,在定义时把各段的段值安排在相应描述符的段基地址低16位字段中。
由于实例中各段在实模式下定位(这是因为程序是从实模式下启动执行的),所以把段值乘以16就是对应的段基地址。
(2)装载LDTR寄存器在使用LDT之前,还要装载局部描述符表寄存器LDTR。
本实例中的如下两条指令用于装载LDTR:mov ax,LDT_SEL lldt axLLDT指令是专门用于装载LDTR的指令。
该指令的操作数是对应LDT段描述符的选择子。
根据该选择子,处理器从GDT中取出相应的LDT段描述符,在进行合法性等检查后,LDT段描述符的基地址和界限等信息被装入LDTR的高速缓冲寄存器中。
由于要引用GDT,所以不能在实模式下装载LDTR。
在“操作系统类指令”一文中将对LLDT指令作详细说明。
(3)利用段间转移指令JMP实现任务内无特权级的转移在本实例中进入保护方式后,特权级是0。
通过如下段间直接转移指令实现从代码段K 到代码段L的转移:JUMP16 CodeL_Sel,Virtual2其中,选择子CodeL_Sel是对应代码段L的描述符的选择子。
该描述符在LDT中,所以选择子中的描述符表指示位TI为1。
描述符特权级是0,表示对应代码段的特权级是0,选择子中的请求特权级RPL也是0。
目标代码段不是一致代码段,所以在CPL=DPL,RPL<=DPL 的情况下,顺利进行相同特权级的转移:目标代码段的选择子CodeL_Sel被装入CS,对应描述符中的信息被装入高速缓冲寄存器中,偏移量Virtual2被装入指令指针寄存器。
教案用纸课题;控制转移类指令教学目标(知识、能力、情感);知识目标:1、掌握控制转移类指令的使用。
2、掌握控制转移类指令的应用。
能力目标:培养学生的单片机汇编语言程序编写的基本能力情感目标:通过本次课培养学生的基本能力,团队协作能力,激发学生的学习兴趣,教学重点与难点;教学重点:1、跳转指令的使用。
2、子程序及子程序调用指令的使用。
教学难点:1、控制转移指令的应用教学方法(教具);讲授法、演示法,举例法,任务驱动法课型;1、理实一体;2、新授课课时;2课时教学步骤与内容(板书计划);组织教学:(5分钟)1、检查学生人数,强调课堂纪律和要求。
2、上节课内容回顾。
课程讲授:(70分钟)内容回顾:1、逻辑运算指令。
2、逻辑运算指令的应用。
课程导入:由循环操作与判断操作引出本次教学内容。
(举例法,讨论法)课程讲授:一、控制转移指令控制转移指令共有 17 条, 不包括按布尔变量控制程序转移指令,其中有 64 KB范围内的长调用、长转移指令; 有 2 KB范围内的绝对调用和绝对转移指令; 有全空间的长相对转移及一页范围内的短相对转移指令; 还有多种条件转移指令。
由于MCS -51 提供了较丰富的控制转移指令, 因此在编程上相当灵活方便。
这类指令用到的助记符共有 10 种: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。
1、无条件转移指令(1)短跳转指令AJMP addr11这是2KB范围内的无条件跳转指令, 执行该指令时, 先将PC+2, 然后将addr11送入PC10~PC0, 而PC15~PC11保持不变。
这样得到跳转的目的地址。
需要注意的是, 目标地址与AJMP后面一条指令的第一个字节必须在同一个 2 KB区域的存储器区内。
(2)相对转移指令SJMP rel执行该指令时, 先将 PC+2, 再把指令中带符号的偏移量加到PC上, 得到跳转的目标地址送入PC。
第十一讲控制转移类指令
二、条件转移指令
实现按照一定条件决定转移的方向。
分三类。
1、判零转移
JZ rel
JNZ rel
JZ rel ;若(A)= 0 ,则转移,否则顺序执行。
JNZ rel ;若(A)≠0,则转移,否则顺序执行。
转移目的地址= (PC)+ 2 + rel
不影响任何标志位。
例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。
解:MOV R0,#DATA2
MOV DPTR,#DATA1
LOOP1:MOVX A,@DPTR
JZ LOOP2
MOV @R0,A
INC R0
INC DPTR
SJMP LOOP1
LOOP2:SJMP LOOP2
2、比较转移指令
功能:比较二个字节中的值,若不等,则转移。
CINE A,#data,rel
CJNE A,direct,rel
CJNE @Ri,#data,rel
CJNE Rn,#data,rel
该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。
转移目的地址= (PC)+ 3 + rel
若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。
该类指令可产生三分支程序:
即,相等分支;大于分支;小于分支。
例2、设P1口的P1.0 ~ P1.3为准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。
解:MOV A,P1
ANL A,#0FH
CJNE A,#0FH,WAIT ;P1.0 ~ P1.3不为全1时,返回WAIT
MOV A,R2
······
3、循环转移指令
DJNZ Rn,rel ;(二字节指令)
DINZ direct,rel ;(三字节指令)
本指令也为双功能指令,即减1操作和判断转移操作。
第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。
转移目的地址= (PC)+ 2或3 + rel
例3、将8031内部RAM的40H ~ 4FH单元置初值#A0H ~ #AFH。
解:MOV R0,#40H
MOV R2,#10H
MOV A,#0A0H
LOOP:MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP
······
小结:1、无条件转移指令共有几条?
2、CJNE指令与DJNZ指令有何区别?。