关于第十讲控制转移类指令
- 格式:doc
- 大小:63.50 KB
- 文档页数: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本身不是一条指令,它是条件转移指令的统称。
控制转移指令
控制转移类指令
计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。
控制转移类指令的功能就是根据要求修改程序计数器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必须根据寄存器或存储器的寻址方式,间接地求出转移地址。
同样,这类转移也可分为段内间接转移和段间间接转移。
所以无条件转移指令可分为段内直接转移、段内间接转移、段间直接转移、段间间接转移这四种不同类型和方式。
第九讲控制转移类指令教学方法: 讲授法教学目的: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、掌握调用指令的特点及应用
教学重点、难点:
各类指令操作功能循环、移位指令
条件转移指令的特点及应用
主要教学内容(提纲):
一、控制转移类指令的种类
二、无条件转移指令的特点及应用
三、调用指令的特点及应用
复习:逻辑操作指令,单字节: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指令有何区别?。