关于第十讲控制转移类指令
控制转移类指令PPT课件
微机原理
高于与大于、低于与小于
• 两无符号数比较称 —— 高于、低于 与标志位CF有关 JA/JNBE、 JAE/JNB、 JB/JNAE、 JBE/JNA Above、Below、Not、Equal
• 两有符号数比较称 —— 大于、小于 与标志位OF,SF有关 JG/JNLE、 JGE/JNL 、 JL/JNGE、 JLE/JNG Greater、Less、Not、Equal
条件转移指令的执行流程
微机原理
条件满足 ?
Y,转移
N
顺序执行下一条指令
目标处执行
控制转移类指令
微机原理
有条件转移指令的英文符号
• Zero ——目的操作数减源操作数为0(ZF = 0) • Equal ——目的操作数等于源操作数(ZF = 0) • Above —— 目的操作数高于源操作数(CF = 0) • Below ——目的操作数低于源操作数(CF = 1) • Greater ——目的操作数大于源操作数(OF ⊕ SF = 0) • Less ——目的操作数小于源操作数(OF ⊕ SF = 1) • Carry —— 两无符号运算后有进位(CF = 1) • Overflow ——两有符号运算后有溢出(OF = 1) • Sign —— 两有符号运算后有符号(SF = 1) • Parity —— 奇偶位为偶(PF = 1) • Not —— 不是
控制转移类指令
微机原理
JXX指令与状态标志位 —— ZF、CF
•与ZF有关的条件转移指令
JE/JZ —— 两数相等/两数相减不为零(ZF = 0) JNE/JNZ —— 两数有等/两数相减为零(ZF = 1)
•与CF有关的条件转移指令
JAE/JNB —— 高于或等于/不低于(CF = 0) JNC —— 无进位/无借位(CF = 0) JB/JNAE —— 低于/不高于也不等于(CF = 1) JC —— 有进位/有借位(CF = 1)
控制转移类指令.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 号
控制转移指令
;行号偏移量机器码程序
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
控制转移类
例:比较有符号数
next:
cmp ax,bx jnl next xchg ax,bx ...
;比较ax和bx ;若ax≥bx,转移 ;若ax<bx,交换
6.4 控制转移类
➢无条件转移指令 ➢条件转移指令 ➢循环指令
控制转移类指令通过改变IP(和CS) 值,实现程label;程序转向label标号指定的地址 JMP r16/m16 ;IP←r16/m16
➢ 对标志位的影响:无。 ➢ 只要执行无条件转移指令JMP,就使程序转
例:比较无符号数
next:
cmp ax,bx jnb next xchg ax,bx ...
;比较ax和bx ;若ax≥bx,转移 ;若ax<bx,交换
结果:AX保存较大的无符号数
比较有符号数大小
➢ 有符号数的大(Greater)小(Less)需要 组合OF、SF标志,并利用ZF标志确定相等 (Equal)
jcxz OK NEXT:
… loop NEXT OK:…
例
mov cx,5;CX存放循环次数 mov bx,4 next:mov array[bx],BL dec bx loop next
结果:AX保存较大的有符号数
6.4.3 循环指令
JCXZ label ;CX=0,转移到标号label LOOP label ;CX←CX-1,
;CX≠0,循环到标号label
➢ 循环指令默认利用CX计数器 ➢ 对标志位的影响:无。
LOOP指令功能示意图
控制转移类指令
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由指令中的偏移地址取代
3 5 控制转移类指令与位操作类指令
3 5 控制转移类指令与位操作类指令随着计算机技术的日益发展,指令系统也变得越来越复杂。
在计算机中,控制转移类指令和位操作类指令是非常重要的指令类型。
本文将介绍这两个指令类别的基本概念、功能和应用。
一、控制转移类指令控制转移类指令是用于控制程序流程的指令。
它们可以改变程序的执行顺序,使程序能够按照设计的要求跳转到特定的位置执行指令。
控制转移类指令可以分为无条件转移和有条件转移两种类型。
1. 无条件转移指令无条件转移指令是通过修改程序计数器(PC)的值来实现程序流程的转移。
比如,常见的无条件转移指令包括跳转指令(JMP)和子程序调用指令(CALL)等。
跳转指令可以直接将PC设置为指定的地址,从而实现无条件跳转。
而子程序调用指令则通过将返回地址压入栈中,并将PC设置为子程序的入口地址来实现跳转。
2. 有条件转移指令有条件转移指令是根据特定的条件来判断是否进行转移。
常见的有条件转移指令包括条件跳转指令(JNZ、JZ、JNC等)和循环控制指令(LOOP、LOOPZ、LOOPNZ等)。
条件跳转指令根据标志寄存器(flag register)中的特定标志位进行判断,从而确定跳转与否。
循环控制指令则是在循环过程中判断条件,并根据条件进行转移。
二、位操作类指令位操作类指令是用于对二进制位进行操作的指令。
它们可以用来读取、修改和设置单个或多个位的值。
位操作类指令主要包括位移动指令、逻辑运算指令和位测试指令等。
1. 位移动指令位移动指令可以将一个寄存器或内存单元中的二进制位按照指定的位数进行左移或右移。
左移操作将所有二进制位向左移动,右边补0,而右移操作则将所有二进制位向右移动,左边根据正负值进行填充。
位移动指令常用于实现乘法、除法和移位操作等。
2. 逻辑运算指令逻辑运算指令可以对二进制位进行逻辑与、逻辑或、逻辑异或和逻辑非等操作。
逻辑与操作将两个二进制位按位进行与运算,逻辑或操作将两个二进制位按位进行或运算,逻辑异或操作将两个二进制位按位进行异或运算,逻辑非操作则是对一个二进制位进行取反。
控制转移类指令
控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变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本身不是一条指令,它是条件转移指令的统称。
控制转移类指令
+ [-B]补 =
[A-B]补=
自然丢失
1 0 0 0 1 0 0 0
错误结果
1,0 1 1 1 1 1 0 0
[A-B]补= 01111100B , A-B=+124
Jcc指令为 2个字节,条件不满足时的
顺序执行就是当前指令偏移指针IP加2
第2章
Jcc指令的分类
Jcc
Jcc指令不影响标志,但要利用标
志(表 2.2)。根据利用的标志位 不同,16条指令分成3种情况:
1. 判断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小
第2章
1. 判断单个标志位状态
JMP
JMP
第2章
段间转移、直接寻址
JMP
JMP far ptr label
;IP←label的偏移地址 ;CS←label的段地址
将标号所在段的段地址作为新的 CS 值,
标号在该段内的偏移地址作为新的IP值;这 样,程序跳转到新的代码段执行
jmp far ptr otherseg ;远转移到代码段2的otherseg
第2章
段间转移、间接寻址
JMP
JMP far ptr mem ;IP←[mem],CS←[mem+2] 用一个双字存储单元表示要跳转的目标地 址。这个目标地址存放在主存中连续的两个 字单元中的,低位字送IP 寄存器,高位字送 CS 寄存器
mov word ptr [bx],0 mov word ptr [bx+2],1500h JMP far ptr [bx] ;转移到1500h:0
控制转移类指令
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
控制转移指令
2.条件转移指令 条件转移指令 A判零转移指令(2字节) 判零转移指令( 字节 字节) 判零转移指令 • JZ rel (A)=0,转移;(PC)+2+rel PC ) ,转移; ) (A)≠0,则顺序执行 ) ,则顺序执行;(PC)+2 PC 。 • JNZ rel (A)≠0,转移;(PC)+2+rel PC ) ,转移; ) (A)=0,则顺序执行 ) ,则顺序执行;(PC)+2 PC
变址寻址转移指令: 字节) 变址寻址转移指令: (1字节) 字节 JMP @A+DPTR 根据A中数值的不同 中数值的不同,转向不同的子 根据 中数值的不同 转向不同的子 程序入口. 程序入口
(A)+(DPTR) PC
的值( ),转向相应的处理 例:根据A的值(0~3),转向相应的处理 根据 的值 ), 程序。( 。(LJMP指令 字节) 指令3字节 程序。( 指令 字节) MOV R1,A , RL A ;(A) ;( )*2 ADD A,R1 ;(A) , ;( )*3 MOV DPTR,#TABLE , JMP @A+DPTR TABLE: LJMP LOOP0;转0处理程序 : ; 处理程序 LJMP LOOP1 ; 转1处理程序 处理程序 LJMP LOOP2 ;转2处理程序 处理程序 LJMP LOOP3 ;转3处理程序 处理程序
短转移指令: 字节) 短转移指令: (2字节) 字节 SJMP rel (PC)+2+rel (PC) rel: 8位带符号数补码 位带符号数补码 转移范围: 转移范围 -128(-80H)~+127(7FH)(256B) ( ) ( ) 当前地址(PC)=2000H 例:当前地址 当前地址 执行 SJMP 56H 结果:目标地址 目标地址(PC)=2058H 结果 目标地址
控制转移指令
控制转移指令
控制转移类指令
计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。
控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变
程序运行方向,实现转移。
控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。
下面我们将分类介绍。
1.无条件转移指令(4条)
LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内
转移,称为长转移指令
AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移
SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号。
控制转移指令
控制转移指令通常,程序中的指令都是顺序地逐条进行的,在8086中,指令的执行顺序由CS和IP 决出,每取出一条指令,指令指针IP自动进行调整,一条指令执行完成后,就从该指令之后的下一个存储单元中取出一条指令来执行。
利用控制转移指令可以改变CS和IP的值,从而改变指令的执行顺序。
为满足程序转移的不同要求,8086提供了无条件转移和过程调用、条件转移、循环控制以及中断指令等几类指令。
无条件转移指令和过程调用指令:JMP—无条件转移、CALL—过程调用、RET—过程返回条件转移:JZ\JE等十条指令—直接标志转移、JA\JNBE等8条指令—间接标志转移条件循环控制:LOOP—CX≠0则循环、LOOPE和LOOPZ—CX≠0和ZF=1则循环、LOOPNE 和LOOPNE—CX≠0和ZF=0则循环、JCXZ—CX=0则循环中断:INT—中断、INTO—溢出中断、IRET—中断返回1、无条件转移和过程调用指令1)JMP 无条件转移指令指令格式:JMP 目的指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
第二种类型:段间转移,又被称之为远(FAR)转移,转移指令的目的地址和JMP指令不在同一代码段中,发生转移时,CS和IP 的值都要改变也就是说,程序要转移到另一个代码段中去执行。
不论是段内还是段间转移,就转移地址提供的方式而言,又可分为两种方式:第一种方式:直接转移,在指令码中直接给出转移的目的地址,目的操作数用一个标号来表示,它又分为段内直接转移和段间直接转移。
第二种方式:间接转移,目的地址包含在某个16位寄存器或存储单元中,CPU必须根据寄存器或存储器的寻址方式,间接地求出转移地址。
同样,这类转移也可分为段内间接转移和段间间接转移。
所以无条件转移指令可分为段内直接转移、段内间接转移、段间直接转移、段间间接转移这四种不同类型和方式。
控制转移类指令
;不为0传送内部RAM数 据
INC R0
;修改地址指针
INC R1
SJMP LOOP
;继续循环
3.子程序调用指令(4条)
指令 LCALL addr16
功能
标志位
解释
P OAC VCY
PC ←(PC)+3, SP ←(SP)+1,(SP)
× × × × 长调用指令,可在64kB空间调用子程
←(PC7-0),SP ←(SP)+1,(SP)←(PC15-8), (PC)←addr16
××
×
√
××
×
√
若累加器中的内容不等于直接地址单元的内容, 则转移到偏移量所指向的地址,否则程序顺序执 行
累加器中的内容不等于立即数,则转移到偏移量 所指向的地址,否则程序顺序执行
CJNE Rn,#data,rel
(Rn)≠ #data, PC←(PC)+3+rel
××
×
√
工作寄存器Rn中的内容不等于立即数,则转移到 偏移量所指向的地址,否则程序顺序执行
××
×
×
工作寄存器Rn减1不等于0,则转移到偏移量所指
向的地址,否则程序顺序执行
direct ←(direct) -1,(direct) × ×
×
×
直接地址单元中的内容减1不等于0,则转移到偏
≠0,
移量所指向的地址,否则程序顺序执行
PC←(PC)+3+ rel
【例】:将外部数据RAM中地址单元在256字节范围内的一个数据块传送到内 部数据RAM中,两者的首地址分别为DATA1和TATA2,遇到传送的数据为0时停 止。
SJMP rel 短转移
控制转移指令
试着汇编下列源程序,如某条通过或无法通过汇编, ① 试着汇编下列源程序,如某条通过或无法通过汇编,根 据汇编信息窗口的提示,请逐条说明具体理由: 据汇编信息窗口的提示,请逐条说明具体理由: ORG 1000H LJMP 1900H AJMP 1900H AJMP 1100H SJMP 1100H SJMP $ END 实训要点: 实训要点: 1、观察每条指令在ROM中的存放地址。 、观察每条指令在 中的存放地址。 中的存放地址 2、计算目的地址和当前PC指针之间的距离。 、计算目的地址和当前 指针之间的距离。 指针之间的距离 3、比较三种指令之间的差异。 、比较三种指令之间的差异。
MOV DPTR,#TAB MOV A,COUT RL A JMP @A+DPTR ORG 1000H
TAB:
AJMP ZERO AJMP ONE
2、条件转移 、
反复单步执行下列程序段,结合A的内容 观察JNZ L1的 的内容, ①反复单步执行下列程序段,结合 的内容,观察 的 执行情况,并看该指令的下一条指令执行后, 窗口 窗口P1值的变 执行情况,并看该指令的下一条指令执行后,I/O窗口 值的变 化情况,说明该程序的功能。 化情况,说明该程序的功能。 START: L0: MOV A,#0 , CPL A JNZ L1 MOV P1,#00h SJMP L2 L1: L2: MOV P1,#0FFh SJMP L0 End
ROM地址 ROM地址 目的地址 是否出范围
例如:ORG 1000H AJMP 1900H 当前地址=1000H 当前PC=1002H(AJMP是2字节指令) 目的地址=1900H 1、高5位地址比较法 当前PC高5位=00010B 目的地址高5位=00011B
结论:不一致,因此跳转出范围。 2、范围比较法 当前PC的跳转的2K范围为 PC高5位+地址低11位(0~7FFH) 最小地址=00010 00000000000B=1000H 最大地址=00010 11111111111B=17FFH
关于第十讲控制转移类指令
第九讲控制转移类指令教学方法: 讲授法教学目的:1、了解控制转移类指令的种类2、掌握无条件转移指令的特点及应用3、掌握调用指令的特点及应用教学重点、难点:各类指令操作功能循环、移位指令条件转移指令的特点及应用主要教学内容(提纲):一、控制转移类指令的种类二、无条件转移指令的特点及应用三、调用指令的特点及应用复习:逻辑操作指令,单字节:CLR,CPL,RL,RLC,RR,RRC双字节:ANL,ORL,XRL。
讲授要点§3-5 控制转移类指令作用:改变程序计数器PC的值,从而改变程序执行方向。
分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。
一、无条件转移指令LJMP addr16AJMP addr11SJMP relJMP @A + DPTRLJMP addr16 ;长跳转转移目的地址addr16 (PC);0000H ~ FFFFH,64KBAJMP addr11 ;绝对转移转移目的地址的形成:先(PC)(PC)+ 2;后PC15 ~ 11不变,PC10 ~ 0 addr10 ~ 0 64KB = 216 =25×211 = 32×2KB转移目的地址与(PC)+ 2在同一个2KB范围内。
SJMP rel ;短转移,相对寻址。
转移目的地址= (PC)+ 2 + rel,所以rel = 转移目的地址-(PC)-2但,实际使用中常写成SJMP addr16,汇编时会自动转换出rel。
JMP @A + DPTR ;间接转移,散转移指令。
转移目的地址= (@A)+ (DPTR)本指令不影响标志位,不改变@ A 及DPTR中的内容。
常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。
例1、设A中为键值,试编写按键值处理相应事件的程序段。
解:MOV DPTR,#KYEGMOV B,#03HMUL ABJMP @A + DPTR·KYEG:LJMP KYEG0LJMP KYEG1·画图比较LJMP、AJMP、SJMP、JMP转移的起点和范围。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九讲控制转移类指令
教学方法: 讲授法
教学目的:
1、了解控制转移类指令的种类
2、掌握无条件转移指令的特点及应用
3、掌握调用指令的特点及应用
教学重点、难点:
各类指令操作功能循环、移位指令
条件转移指令的特点及应用
主要教学内容(提纲):
一、控制转移类指令的种类
二、无条件转移指令的特点及应用
三、调用指令的特点及应用
复习:逻辑操作指令,单字节:CLR,CPL,RL,RLC,RR,RRC
双字节:ANL,ORL,XRL。
讲授要点
§3-5 控制转移类指令
作用:改变程序计数器PC的值,从而改变程序执行方向。
分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。
一、无条件转移指令
LJMP addr16
AJMP addr11
SJMP rel
JMP @A + DPTR
LJMP addr16 ;长跳转
转移目的地址addr16 (PC);0000H ~ FFFFH,64KB
AJMP addr11 ;绝对转移
转移目的地址的形成:先(PC)(PC)+ 2;
后PC15 ~ 11不变,PC10 ~ 0 addr10 ~ 0 64KB = 216 =25×211 = 32×2KB
转移目的地址与(PC)+ 2在同一个2KB范围内。
SJMP rel ;短转移,相对寻址。
转移目的地址= (PC)+ 2 + rel,
所以rel = 转移目的地址-(PC)-2
但,实际使用中常写成SJMP addr16,汇编时会自动转换出rel。
JMP @A + DPTR ;间接转移,散转移指令。
转移目的地址= (@A)+ (DPTR)
本指令不影响标志位,不改变@ A 及DPTR中的内容。
常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。
例1、设A中为键值,试编写按键值处理相应事件的程序段。
解:MOV DPTR,#KYEG
MOV B,#03H
MUL AB
JMP @A + DPTR
·
KYEG:LJMP KYEG0
LJMP KYEG1
·
画图比较LJMP、AJMP、SJMP、JMP转移的起点和范围。
二、调用指令
LCALL addr16 ;长调用
ACALL addr11 ;绝对调用
LCALL addr16 ;转移范围64KB,不影响标志位。
执行中自动完成如下过程:(PC)(PC)+ 3
(SP)(SP)+ 1
((SP))(PC7 ~ 0),保护断点地址低字节;
(SP)(SP)+ 2
((SP))(PC15 ~ 8),保存断点地址高字节;
(PC)addr16 ,目的地址送PC,转子程序。
例2、设(SP)= 07H,(PC)= 2100H,子程序首地址为3456H,执行:
LCALL 3456H
MOV A,20H
······
画出执行过程示意图。
执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H,(PC)= 3456H
ACALL addr11 ;转移范围与(PC)+ 2在同一个2KB内。
不影响任何标志位,执行中机器自动完成下列过程:
(PC)(PC)+ 2
(SP)(SP)+ 1
((SP))(PC7 ~ 0)
(SP)(SP)+ 2
((SP))(PC15 ~ 8)
(PC10 ~ 0)addr10 ~ 0
三、返回指令
从子程序返回主程序。
RET ;调用子程序返回;
RETI ;中断子程序返回。
画图比较两种返回指令含义上的异同点,结论:RET返回地址事先已知,而
RETI的返回地址在程序执行中产生的,不固定。
不影响标志位,但PSW不能恢复到中断前的状态。
其机器自动操作过程如下:
(PC15 ~ 8)((SP))
(SP)(SP)-1
(PC7 ~ 0)((SP))
(SP)(SP)-2
例3、设(SP)= 0BH,(0AH)= 23H,(0BH)= 01H
执行:RET
结果;(SP)= 09H,(PC)= 0123H(返回主程序)
空操作指令
NOP ;空操作
不执行任何操作,仅仅使(PC)+ 1,继续执行下条指令,不影响标志位,
在ROM中占一个字节。
用于延时调整。
二、条件转移指令
实现按照一定条件决定转移的方向。
分三类。
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、长转移、短转移及相对转移的跳转范围有什么不同?
3、无条件转移指令共有几条?
4、CJNE指令与DJNZ指令有何区别?。