第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中。
控制转移类指令(17条)

C3
2 2 uF
C1 U1
1nF 19 X TA L1 P 0 .0 /A D 0 P 0 .1 /A D 1 P 0 .2 /A D 2 P 0 .3 /A D 3 P 0 .4 /A D 4 P 0 .5 /A D 5 P 0 .6 /A D 6 P 0 .7 /A D 7 P 2 .0 /A 8 P 2 .1 /A 9 P 2 .2 /A 10 P 2 .3 /A 11 P 2 .4 /A 12 P 2 .5 /A 13 P 2 .6 /A 14 P 2 .7 /A 15 P 3 .0 /R X D P 3 .1 /TX D P 3 .2 /IN T0 P 3 .3 /IN T1 P 3 .4 /T0 P 3 .5 /T1 P 3 .6/W R P 3 .7 /R D 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
控制转移类指令(17条 3.4.4 控制转移类指令(17条) 1. 无条件转移 (4 条)
无条件转移指令是当程序执行到该指令时, 无条件转移指令是当程序执行到该指令时,程序无条 件的转移到指令所提供的地址处执行。 件的转移到指令所提供的地址处执行。无条件转移指 令有长转移、短转移、相对转移和间接转移4条指令。 令有长转移、短转移、相对转移和间接转移4条指令。 AJMP LJMP SJMP JMP addr11 addr16 rel @A+DPTR
补:指令系统的寻址方式
相对寻址 设指令SJMP 54H的机器码 的机器码80H 54H存放在 存放在2000H处,当 设指令 的机器码 存放在 处 执行到该指令时,先从2000H和2001H单元取出指令,PC自动 单元取出指令, 自动 执行到该指令时,先从 和 单元取出指令 变为2002H;再把 的内容与操作数 的内容与操作数54H相加,形成目标地址 相加, 变为 ;再把PC的内容与操作数 相加 2056H,再送回 ,使得程序跳转到 单元继续执行。 ,再送回PC,使得程序跳转到2056H单元继续执行。 单元继续执行
控制转移指令

;行号偏移量机器码程序
1 0000 CODE SEGMENT
2 ASSUME CS:CODE
3 0000 0405 PROG_S:ADD AL, 05H
4 0002 90 NOP
5 0003 EBFB JMP SHORT PROG_S
段内间接转移指令
这类指令转向的16位有效地址存放在一个16位寄存器或字存储单元中
用寄存器间接寻址的段内转移指令,要转向的有效地址存放在寄存器中,执行的操作是寄存器的内容送到IP中
例
JMP BX
若该指令执行前BX=4500H,则指令执行时,将当前IP修改成4500H,程序转到段内偏移地址为4500H处执行
返回地址的IP入栈
由于存放CALL指令的内存首地址为CS:IP=2000:1050H,该指令占3个字节,所以返回地址为2000:1053H,即IP=1053H.于是1053H被推入堆栈
根据当前IP值和位移量DISP计算出新的IP值,作为子程序的入口地址,即:
IP=IP+DISP=1053H+1234H=2287H
中断:INT—中断、INTO—溢出中断、IRET—中断返回
1、无条件转移和过程调用指令
1)JMP无条件转移指令
指令格式:JMP目的
指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:
第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
JMP DWORD PTR[SI+0125H]
设指令执行前,CS=1200H,IP=05H,DS=2500H,SI=1300H,内存单元(26425H)=4500H,(26427H)=32F0H.而指令中的位移量DISP=0125H,其中高位部分为DISP_H=01H,低位部分DISP_L=25H
《控制转移指令》幻灯片

MOV BL,AH ;AH→BL
SHL AX,CL ;AX逻辑左移4位,相当于AX低4位
;清零,AX = ×××0H
SHR BL,CL ;BL逻辑右移4位,相当于AH=0×H
OR DL,BL
;现DL的高4位是原来DL的低4位,
;现DL的低4位是原AH的高4位
所以,完成将DX,AX组成的双字逻辑左移4位。
3.6 控制转移类指令
1、无条件转移指令 2、条件转移指令 3、循环控制指令 4、调用和返回指令
5
用于实现分支转移、循环控制、过程调用等
常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET 一般了解: INT n/IRET INTO LOOPZ / LOOPNZ
控制转移类指令通过改变IP〔和CS〕值, 实现程序执行顺序的改变
功能
JS dst JNS dst
结果为负数转移 结果为正数转移
JZ dst JNZ dst
结果为零转移 结果不为零转移
JP dst JNP dst
奇偶校验结果为偶转移 奇偶校验结果为奇转移
JC dst JNC dst
结果有进位(借位)转移 结果无进位(借位)转移
JO dst JNO dst
结果溢出转移 结果不溢出转移
《控制转移指令》幻灯片
本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢!
移位指令小结
指令 逻辑左移指令SHL 逻辑右移指令SHR 算术左移指令SAL 算术右移指令SAR 循环左移指令ROL 循环右移指令ROR 带进位位循环左移指令RCL 带进位位循环右移指令RCR
控制转移类指令

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由指令中的偏移地址取代
控制转移类指令

控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变说明✧只有中断返回指令(IRET)改变控制标志位✧许多转移指令受状态标志位的影响1.无条件转移指令(JMP 操作数;程序转向label标号指定的地址)◆寻址方式:直接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式◆目标地址范围✓段内(注意转移范围是+ -,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负)✡段内转移——近转移(near)⏹转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围)⏹不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。
✡段内转移——短转移(short)⏹转移范围用一个字节表达,在当前代码段256B范围内转移(-128~+127范围),只改变IP的值,由8位带符号数给出。
✓段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。
段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。
注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr或far ptr强制.✌思考:如果转移超过16BIT,怎么办?答:变成段间转移。
JMP 1234H 这个指令对否?JMP 12345678H呢?2、条件转移指令(Jcclable;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行)注意:1.Jcc本身不是一条指令,它是条件转移指令的统称。
控制传送指令包括四种.ppt
助记符 转移条件 助记符 转移条件
JZ/JE JS JO
JP/JPE JC
ZF=1 SF=1 OF=1 PF=1 CF=1
JNZ/JNE JNS JNO
• 根据两个无符号数比较结果转移
JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA) /JNBE(JA)
• 比较两个带符号数,并根据比较结果转移
JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)
• 测试CX的值为零转移
JCXZ
2、 过程(子程序)调用指令
如果有一些程序段在不同地方反复出现,可以将这些程序 段设计成为过程(子程序)供调用。过程结束,返回调用处。
格式:JMP SHORT OPR
OPR—在汇编语言中使用符号地址
在机器语言中存放8位位移量D8
位移量D8 = 符号地址的偏移地址 – 当前IP的值
执行操作:(IP)←(IP)当前+D8 SHORT 短属性标号
8位位移量D8的范围在(-128 ~ 127)之间,占有一个字节。
该指令共占有两个字节。
EB(操作码)
+127
... ... ... ... JMP SHORT next ... ... ..JMP SHORT TAGER …… TAGER:
标号与控制转移指令在 同一段中,后引用的标号可 以不用SHORT,前引用的 标号必须使用SHORT。
段内直接近转移:
指令在内存中是顺序存放的,分控制和非控制转移指令。 8086/8088 中CS和IP的变化规则: reset复位后,( CS ) = FFFFH,( IP ) = 0
故8088从内存FFFF:0000H处取第一条指令执行, 第一条 指令在内存的ROM区。 非控制转移指令
控制转移类指令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
控制转移类指令和位操作指令
控制转移类指令和位操作指令(一).控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。
控制转移类指令的功能就是根据要求修改程序计数器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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十一讲控制转移类指令
教学方法: 讲授法
教学目的:
1、了解控制转移类指令的分类
2、掌握条件转移指令的特点及应用
教学重点:
条件转移指令的特点及应用
教学难点:
条件转移指令的特点及应用
教学环节
组织教学:(2分钟)检查学生人数,强调作业要求。
复习提问:1、控制转移指令是如何分类的?
2、无条件转移指令、调用指令分是哪几个?
引入新课:
二、条件转移指令
实现按照一定条件决定转移的方向。
分三类。
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,W AIT ;P1.0 ~ P1.3不为全1时,返回W AIT
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指令有何区别?作业:作业:P96 3.6 3.7。