第11讲 控制转移类指令(二)教案
11第3章7控制转移指令 ppt课件

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

(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讲 控制转移类指令(二)

第十一讲控制转移类指令教学方法: 讲授法教学目的: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课件(全)

(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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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指令有何区别?。