第11讲 控制转移类指令(二)教案

合集下载

11第3章7控制转移指令 ppt课件

11第3章7控制转移指令 ppt课件
ቤተ መጻሕፍቲ ባይዱ28
2、循环控制指令
三种:
计数器 循环次数
LOOP
循环体
计数器 计数器-1
N 计数器=0?
Y
LOOPE/LOOPZ
图 4.7 循环结构示意图
LOOPNE/LOOPNZ
29
格式: LOOPxx 符号地址
执行操作 :
①(CX) ← (CX)- 1 此操作不影响标志 ② 检查转移条件xx,满足转向目标地址去执行;
转移条 助记符 转移条件 件
ZF=1 JNZ/JNE ZF=0
JS
SF=1 JNS
SF=0
JO
OF=1 JNO OF=0
JP/JPE PF=1 JNP/JPO PF=0
JC
CF=1 JNC CF=0
27
3)、判CX转移指令
助记符 JCXZ
转移条件 CX=0
➢既是一条转移指令,也可用来控制循环,但循 环控制条件与LOOP相反。
NEXT 5678H:9ABCH
图 4.6
段间转移
2
1)、JMP无条件转移指令
五种格式:
段内直接短转移 段内直接近转移 段内间接转移 段间直接远转移 段间间接转移
5
(1)、段内直接短转移 格式: JMP SHORT 目的地址标号 ;(IP)←当前(IP)+disp8
6
注意:
➢双字节指令,机器码: E8 KK
JLE/JNG
转移条件
(SF⊕OF)∨ZF=0 大于/不小于等于
SF⊕OF=0
大于或等于/不小于
SF⊕OF=1
小于/不大于等于
(SF⊕OF)∨ZF=1 小于或等于/不大于
例: 数据段RESULT开始的30个单元中存放着某班30 个同学的某门课程的考试成绩。要求统计成绩在 80分以上的学生人数,将其存放在BL中。

控制转移类指令和位操作指令

控制转移类指令和位操作指令

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

控制转移类指令的功能就是根据要求修改程序计数器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作为比较结果的标志位。

控制转移类指令.ppt

控制转移类指令.ppt
无条件地转移到其他代码段内标号所指定的目标地址处。 操作: 如果标号为其它代码段内定义的标号,则
(IP)←标号的偏移地址 (CS)←标号的段地址 如果标号为本代码段内定义的标号,则该指令同JMP NEAR PTR lable。 说明: ① 也可直接使用数值表达式来给出目标地址,这时可省略FAR属性说明。 JMP 2000H:0100H ② 机器指令代码直接提供了转向地址的段地址和偏移地址,属于直接转 移方式。 ③ 使用绝对地址来表示转移目标地址,因此属于绝对转移。
(2)条件转移指令分为以下四类。
① 单标志位测试转移指令 通过测试单个标志位的状态来决定是否转移的指令。 例:
ADD AX,BX JC LAB1 ;如果 CF = 1,转至 LAB1
CMP CX,DX JE LAB2 ;如果 ZF = 1,转至 LAB2
② 无符号数比较转移指令
该类指令将参与比较的两个数据看作是无符号数,并根据比较运算后 标志位CF和ZF的状态来判断它们之间的大小关系,从而决定是否转移。 例:
说明:
① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。
② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
例1:
0000H EB 04 0002H B0 01 0004H B3 02 0006H B1 03

例2:
0000H B0 01 0002H B3 02 0004H B1 03 0006H EB F8 0008H B2 04
JBE/JNA 标 CF=1或ZF=1 号
JG/JNLE 标 SF⊕OF=0且

ZF=0
带符号数 比较转移
JGE/JNL 号

第11讲 控制转移类指令(二)

第11讲 控制转移类指令(二)

第十一讲控制转移类指令教学方法: 讲授法教学目的: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操作和判断转移操作。

控制转移类指令

控制转移类指令

13
(2)RET imm16指令
带立即数的返回指令,中的16位立即数称为弹出值,RET指令 在完成返回操作后,还须作SP←SP+imm16,即删除栈中 imm16个字节的内容。
例:下列程序段表示由于在RET指令中规定了弹出值,使控制 从子程序返回后栈顶位置恢复到正常状态。
;主程序 MOV AX,N1 PUSH AX MOV AX,N2 PUSH AX CALL PROG_A MOV SUM,AX
例: JMP EBX
;段内转移,EIP=EBX
JMP FWORD PTR [EBX]
;段间转移,目标地址为[EBX]指向的48位虚拟地址,
;CS=其中的高16位,EIP=其中的低32位
2009年6月2日星期二
4
在64位模式下,指令指针为RIP。JMP指令的执行分为相对转移和绝对 转移两种情况:
若为相对转移,则用RIP寄存器与机器码中的位移量字段相加的和 修改RIP值,此时位移量字段不能超过32位,并将其符号扩展为 64位再相加;
指令格式:RET 或 RETimm16 用以返回到调用这个子程序的断点处,作为子程
序或过程的最后一条指令,。 若是段内返回,则把栈顶的一个字弹出至IP,
恢复调用时断点处的偏移地址; 若为段间返回,则除了弹出IP外,还要从当
前栈顶继续弹出一个字到CS,恢复断点处的 段地址。
2009年6月2日星期二
CALL WORD PTR [BX] ;EA在字存储单元中
2009年6月2日星期二
10
⑶段间直接调用(CALL FAR PTR DST)
操作:PUSH CS
;CS入栈
PUSH IP
;IP入栈
(IP)←偏移地址 ;IP由指令中的偏移地址取代

控制转移类指令ppt课件(全)

控制转移类指令ppt课件(全)

(4)CJNE @Ri,#data,rel 该指令功能:若(( Ri ))≥ data,(CY)=0; 若(( Ri ))<data ,CY=1; 若(( Ri ))≠ data,则PC←(PC)+rel,转移; 若(( Ri ))=data,则程序顺序执行.
例:如果(A) ≠ 00H,转移到CX1;如果(R1) ≠ 10H, 转移到CX2;如果(A) ≠(60H),转移到CX3。程序段 如下:
(2)指令长短不一样。LJMP是3字节指令;AJMP、 SJMP是2字节指令;JMP是1字节指令。
(3)指令机器码构成不同。AJMP、LJMP、JMP后跟 的是绝对地址,而SJMP后跟的是相对地址。
(4)地址特点不同。LJMP、AJMP、SJMP的转移目标 地址是固定的,程序执行过程中不变;JMP的转移目 标地址随程序的执行是动态变化的。
1. 长跳转指令 LJMP (3字节) LJMP addr16 ; PC addr16
•执行该指令时, 将目标语句的16位地址addr16装入 PC, 程序无条件转向指定的目标语句执行。 •由于长跳转指令提供的是16位地址,对应64KB的程 序存储器地址空间,所以可跳转到64KB程序存储器 地址空间的任何地方。 •实际应用中长跳转汇编指令写作“LJMP 目标语句 标号”的形式,如“LJMP LOOP”。
• 指令对A、DPTR和标志位均无影响。
注意:以上四条指令结果均不影响程序状态 字寄存器 PSW 。
5.LJMP、AJMP、SJMP、JMP四条无条件转移指令的 区别:
(1)转移范围不一样。LJMP、JMP转移范围是64KB; AJMP转移范围是与当前PC值同一个2KB区间;SJMP 转移范围是相对当前PC值的-128B~+127B范围内。

控制转移类指令

控制转移类指令

MOV A,R7
RL A ;键值2倍,AJMP指令为双字节指令
MOV DPTR,#KEYG
JMP @A+DPTR
•••
KEYG: AJMP KEY0
KEYG+2: AJMP KEY1
•••
KEYG+30: AJMP KEY15
2.条件转移指令
条件转移指令是当满足给定条件时,程序转移到 目标地址去执行;条件不满足则顺序执行下一条 指令
用在中断服务程序的末尾 RETI与RET指令区别: RETI在返回的同
时同时释放中断逻辑
CJNE @Ri,#data,rel;
(PC)←(PC)+3 若data<((Ri)),(PC)←(PC)+rel且Cy←0; 若data>((Ri)),(PC)←(PC)+rel且Cy←1; 若data=((Ri)),顺序执行且Cy←0
例: MOV A, #40H
MOV R0,#10H
DJNZ direct,rel ;
(PC)←(PC)+3,(direct)←(direct)-1 当(diect)≠0时,(PC)←(PC)+rel; 当(direct)=0时,程序顺序执行。
注:操作数的内容先减1再判零,不等于0时转移
3.子程序调用
本指令完成两项操作:①把PC当前值压入堆栈;② 把子程序入口地址送PC。
⑴长调用指令 LCALL addr16 ;
(PC)←(PC)+3
(SP)←(SP)+1,((SP))←(PC)7~0;
(SP)←(SP)+1,((SP))←(PC)15~8;Biblioteka PC15~0←addr16

控制转移类指令

控制转移类指令

此外,在等待中断或程序结束,常采用使 “程序原地踏步”的办法: HERE: SJMP HERE 或HERE: SJMP $
4、变址寻址转移指令 、 JMP @A+DPTR 该指令主要用于多分支的跳转程序设计。 该指令主要用于多分支的跳转程序设计。跳转的 目标地址是累加器A和数据指针DPTR之和,它可以是 目标地址是累加器A和数据指针DPTR之和, DPTR之和 64KB存储空间的任何地方 存储空间的任何地方。 64KB存储空间的任何地方。 常用于多分支程序结构。 常用于多分支程序结构。 书本例子。 书本例子。 程序设计举例:如果(A)=00H,执行SS子程序; (A)=00H,执行SS子程序 程序设计举例:如果(A)=00H,执行SS子程序;如 果(A)=03H,执行MM子程序;如果(A)=06H,执行XX (A)=03H,执行MM子程序;如果(A)=06H,执行XX MM子程序 (A)=06H 子程序。 子程序。
3、减1条件转移指令组 、 该类指令主要用于循环程序设计。 该类指令主要用于循环程序设计。 DJNZ Rn,目标地址 (Rn),目标地址(rel);如果(Rn)-1≠0, ;如果(Rn) 1≠0, 则程序跳转到目标语句, 则程序跳转到目标语句, 否则顺序执行下一条语句。 否则顺序执行下一条语句。 DJNZ direct,目标地址 目标地址(rel) 目标地址 程序设计举例: 程序设计举例: 将内部RAM 30H~3FH的数依次送到70H~7FH RAM中 3FH的数依次送到 将内部RAM中30H 3FH的数依次送到 单元中。 单元中。
2、绝对转移指令 、 AJMP 目标语句
其格式为: 其格式为: AJMP addr11;PC ←(PC)+2, PC10~ ; ( ) , ~ 0 ← addr11

汇编教程:控制转移(2)

汇编教程:控制转移(2)

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十一讲控制转移类指令
二、条件转移指令
实现按照一定条件决定转移的方向。

分三类。

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指令有何区别?。

相关文档
最新文档