《控制转移类指令》PPT课件
合集下载
《控制转移类指令》课件
《控制转移类指令》PPT 课件
这个PPT课件将帮助你全面了Байду номын сангаас控制转移类指令,包括指令的作用、分类以及 使用方法。让我们一起探索控制转移类指令的奥秘吧!
什么是控制转移类指令?
控制转移类指令是计算机指令的一种,用于改变程序执行的顺序。通过这些 指令,我们可以实现条件跳转、无条件跳转和子程序的调用与返回。
CALL指令用于调用子程序,类似于函数的调用,在子程序执行完毕后会返回 到调用的位置。
无条件转移指令可以使用JUMP(跳转)指令来实现,将程序的控制转移到指定的地址。
有条件转移指令的使用方法
有条件转移指令可以根据不同的条件(如大于、小于、等于)来判断,并根 据条件的结果执行相应的跳转指令。
JUMP指令的用法
JUMP指令用于无条件跳转,可以直接将程序的执行控制转移到指定的地址。
CALL指令的用法
控制转移指令的作用
控制转移指令可以在程序运行时根据特定条件改变代码的执行路径,从而实 现程序的灵活控制和条件判断。
分类:无条件转移指令
无条件转移指令可以直接改变程序的执行顺序,不受任何条件限制。
有条件转移指令
有条件转移指令可以根据特定的条件判断结果,决定是否执行跳转。
无条件转移指令的使用方法
这个PPT课件将帮助你全面了Байду номын сангаас控制转移类指令,包括指令的作用、分类以及 使用方法。让我们一起探索控制转移类指令的奥秘吧!
什么是控制转移类指令?
控制转移类指令是计算机指令的一种,用于改变程序执行的顺序。通过这些 指令,我们可以实现条件跳转、无条件跳转和子程序的调用与返回。
CALL指令用于调用子程序,类似于函数的调用,在子程序执行完毕后会返回 到调用的位置。
无条件转移指令可以使用JUMP(跳转)指令来实现,将程序的控制转移到指定的地址。
有条件转移指令的使用方法
有条件转移指令可以根据不同的条件(如大于、小于、等于)来判断,并根 据条件的结果执行相应的跳转指令。
JUMP指令的用法
JUMP指令用于无条件跳转,可以直接将程序的执行控制转移到指定的地址。
CALL指令的用法
控制转移指令的作用
控制转移指令可以在程序运行时根据特定条件改变代码的执行路径,从而实 现程序的灵活控制和条件判断。
分类:无条件转移指令
无条件转移指令可以直接改变程序的执行顺序,不受任何条件限制。
有条件转移指令
有条件转移指令可以根据特定的条件判断结果,决定是否执行跳转。
无条件转移指令的使用方法
控制转移类指令.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 号
(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 号
程序控制类指令PPT课件
类指令
转移指令 循环控制 子程序调用 中断控制
3.9 转移指令
通过修改指令的偏移地址或段地址及偏移地 址实现程序的转移
无条件转移指令 无条件转移到目标地址,执行新的指令
有条件转移指令 在具备一定条件的情况下转移到目标地址
无条件转移指令
格式:
JMP OPRD
目标地址
与JMP在 同一代码段
与JMP不在 同一代码段
2)用于无符号数的条件转移指令 ① JA/JNBE ;高于/不低于等于转移,
CF∨ZF=0 ② JNA/JBE ;不高于/低于等于转移,
CF∨ZF=1 ③ JB/JNAE ;低于/不高于等于转移,CF=
1 ④ JNB/JAE ;不低于/高于等于转移,CF=
3)用于带符号数的条件转移指令 ① JG/JNLE 大于/不小于等于转移,(SF ∨OF)∨ ZF=
STRING DB ‘Personal Computer’ …
MOV BX,OFFSET STRING DEC BX MOV CX,17 NEXT: INC BX CMP [BX],BYTE PTR 20H LOOPNE NEXT
…
方法二: MOV DI,OFFSET STRING MOV AL,20H MOV CX,17
段内直接寻址
IP
JMP FAR Label
远地址标号
┇
JMP
代
XXH
码
XXH
段
XXH
1
XXH
Label与
CS
┇
代
JMP之间
Label
码
的位移量
段
┇
2
无条件段间转移
段内间接寻址 JMP DWORD PTR[BX]
转移指令 循环控制 子程序调用 中断控制
3.9 转移指令
通过修改指令的偏移地址或段地址及偏移地 址实现程序的转移
无条件转移指令 无条件转移到目标地址,执行新的指令
有条件转移指令 在具备一定条件的情况下转移到目标地址
无条件转移指令
格式:
JMP OPRD
目标地址
与JMP在 同一代码段
与JMP不在 同一代码段
2)用于无符号数的条件转移指令 ① JA/JNBE ;高于/不低于等于转移,
CF∨ZF=0 ② JNA/JBE ;不高于/低于等于转移,
CF∨ZF=1 ③ JB/JNAE ;低于/不高于等于转移,CF=
1 ④ JNB/JAE ;不低于/高于等于转移,CF=
3)用于带符号数的条件转移指令 ① JG/JNLE 大于/不小于等于转移,(SF ∨OF)∨ ZF=
STRING DB ‘Personal Computer’ …
MOV BX,OFFSET STRING DEC BX MOV CX,17 NEXT: INC BX CMP [BX],BYTE PTR 20H LOOPNE NEXT
…
方法二: MOV DI,OFFSET STRING MOV AL,20H MOV CX,17
段内直接寻址
IP
JMP FAR Label
远地址标号
┇
JMP
代
XXH
码
XXH
段
XXH
1
XXH
Label与
CS
┇
代
JMP之间
Label
码
的位移量
段
┇
2
无条件段间转移
段内间接寻址 JMP DWORD PTR[BX]
《控制转移指令》幻灯片
;低4位清零,DX = ×××0H
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
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
控制传送指令包括四种.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范围内。
C51控制转移类指令及位操作指令参考幻灯片
第三章 80C51单片机指令系统
本讲教学内容: 控制转移类指令
1
控制转移类指令
程序的顺序执行是由PC自动加1来实现的,但在 应用系统中,往往会遇到一些情况,需要强迫改变程 序执行顺序,比如调用子程序,比如根据检测值与设 定值的比较结果要求程序转移到不同的分支入口等。 要改变程序的执行顺序进行分支转向,应通过强迫修 正PC值得方法来实现,这就是控制转移类指令的基本 功能。
例:设(PC)=0123H,标号ADR所指单元地址为 3456H。
执行指令∶ LJMP ADR
执行结果为(PC)=3456H
程序转向3456H单元执行。
12
⒉ 绝对转移指令 AJMP addr11 该指令提供11位地址,目标地址由指令提供的
11位地址去取代当前PC的低11位,形成新的PC值, 即为本绝对转移地址。因此,程序的目标地址必须包 含AJMP指令后第一条指令的第一个字节(即当前PC 地址)在内的2 KB范围内(即高5位地址必须相同)。
其指令格式为: CJNE(操作数1),(操作数2),rel 数值比较转移指令是三字节指令,是80C51单片微机
指令系统中仅有的四条三个操作数的指令,在程序设计中非 常有用。同时具有比较转移和数值大小比较的功能。
5
比如 CJNE Rn,#data,rel指令
这组指令的功能是对指定的两操作数进行比较,即 (操作数1)-(操作数2) ,但比较结果均不改变两个操作数 的值,仅影响标志位CY。 • 若不等,程序转移到(PC)十3加上第三字节带符号 的8 位偏移量(rel)所指向的目标地址;
10
无条件转移指令
指令 SJMP rel AJMP addr11 LJMP addrl6 JMP @A+DPTR 这类指令的功能是程序无条件地转移到各自指定 的目标地址去执行,不同的指令形成的目标地址不同。
本讲教学内容: 控制转移类指令
1
控制转移类指令
程序的顺序执行是由PC自动加1来实现的,但在 应用系统中,往往会遇到一些情况,需要强迫改变程 序执行顺序,比如调用子程序,比如根据检测值与设 定值的比较结果要求程序转移到不同的分支入口等。 要改变程序的执行顺序进行分支转向,应通过强迫修 正PC值得方法来实现,这就是控制转移类指令的基本 功能。
例:设(PC)=0123H,标号ADR所指单元地址为 3456H。
执行指令∶ LJMP ADR
执行结果为(PC)=3456H
程序转向3456H单元执行。
12
⒉ 绝对转移指令 AJMP addr11 该指令提供11位地址,目标地址由指令提供的
11位地址去取代当前PC的低11位,形成新的PC值, 即为本绝对转移地址。因此,程序的目标地址必须包 含AJMP指令后第一条指令的第一个字节(即当前PC 地址)在内的2 KB范围内(即高5位地址必须相同)。
其指令格式为: CJNE(操作数1),(操作数2),rel 数值比较转移指令是三字节指令,是80C51单片微机
指令系统中仅有的四条三个操作数的指令,在程序设计中非 常有用。同时具有比较转移和数值大小比较的功能。
5
比如 CJNE Rn,#data,rel指令
这组指令的功能是对指定的两操作数进行比较,即 (操作数1)-(操作数2) ,但比较结果均不改变两个操作数 的值,仅影响标志位CY。 • 若不等,程序转移到(PC)十3加上第三字节带符号 的8 位偏移量(rel)所指向的目标地址;
10
无条件转移指令
指令 SJMP rel AJMP addr11 LJMP addrl6 JMP @A+DPTR 这类指令的功能是程序无条件地转移到各自指定 的目标地址去执行,不同的指令形成的目标地址不同。
lec10转移控制类指令(2)资料
;累加器清零 ;BX←1 ;CX←循环次数100
AGAIN:
ADD AX,BX INC BX LOOP AGAIN
;AX←(AX)+(BX) ;BX←(BX)+1 ;未循环结束,则继续
MOV SUM,AX
;循环结束,保存结果
循环总结
程序的主体部分分为三段:
(1)循环准备阶段:累加器、计数器、指针赋初值,在循环开始 之前,每条指令只执行一次; (2)循环阶段:包括数据累加、修改指针、循环计数和控制三项 操作。每条指令重复执行CX次。这部分的程序称为“循环体”。 (3)循环结束处理阶段:保存数据的累加和。这条指令在循环结 束后执行,只执行一次。
简写形式
ZEROBYTES:PUSH AX
PUSH CX
XOR AX, AX
; AX寄存器清零
MOV CX, 128
; 计数器CX置初值
ZEROLOOP: MOV [BX], AX; 一个字单元清零
ADD BX, 2
; 修改地址指针,指向下一个字
LOOP ZEROLOOP
; 循环控制
POP CX
POP AX
第 10 讲 转移控制类指令(2)
——循环指令&子程序指令&中断指令
控制转移指令:
• 无条件转移指令
JMP
• 条件转移指令
JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ
• 循环指令
LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE
• 子程序调用和返回指令
第3章6 控制转移指令 .ppt
MOV CX,50
; load the counter(50 words)
MOV DI,OFFSET DATAM ; load the pointer for destination
MOV AX,0AAAAH ; load the pattern
REP STOSW
; repeat until CX=0
综合举例2
编写程序:(1)用STOS指令将0AAH存入100个存储器字节; (2)利用LODS指令测试这些存储器单元的内容是否是
0AAH,如果不是则显示"bad memory"。
DTSEG SEGMENT
DATAM DB 100 DUP(?)
MESG DB 'bad memory', '$'
DTSEG ENDS
LOOP AGAIN
DEC CX JNZ AGAIN
例:
例:求首地址为 ARRAY 的 M 个字之和,
结果存入 TOTAL
MOV MOV MOV AGAIN: ADD ADD LOOP MOV
CX, M AX, 0 SI, AX
AX, ARRAY[SI] SI, 2 AGAIN TOTAL, AX
JG JO JNS NONNEG:
TOO_HIGH: OVERFLOW: EXIT:
MOV AX, X CMP AX, 50
TOO_HIGH SUB AX, Y
OVERFLOW NONNEG NEG AX
MOV RESULT, AX ……
JMP EXIT …… JMP EXIT ……
MOV AX,4C00H INT 21H
; bring in the pattern and test it one by one
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
错误的 rel16
正确的 rel16
IP目的 ← IP当前 + rel16 LABEL IP目的 ← IP源 + rel16 + 3
微机原理
← IP源 ← 05H ← 00H ← IP当前
← IP目的
微机原理
例:设标号偏移地址=1000H,执行完JMP指 令后的当前IP值为0009H,则
位移量=1000H-0009H = 0FF7H
控制转移类指令
微机原理
• 段内近调用过程 —— CALL LABEL
(IP当前)→ SS:SP 保护现场 IP 值入栈 • 段内近调用返回 —— RET
(IP当前)← SS:SP 恢复现场 IP 值出栈 • 段间远调用过程 —— CALL LABEL
(CS当前)→ SS:SP 保护现场 CS 值入栈 (IP当前)→ SS:SP 保护现场 IP 值入栈 • 段间远调用返回 —— RET
LOOPNZ指令
微机原理
控制转移类指令
JMP —— 无条件转移指令 • 段内直接短转移
JMP SHORT LABEL ;IP目的 ← IP当前 + rel8(8 bit 符号数) rel8 在-128 ~ +127之间
• 段内直接近转移
JMP NEAR LABEL ;IP目的 ← IP当前 + rel16 (16 bit 符号数) rel16 在-32768 ~ +32767之间
• 指令特点
仅有段内短转移,IP目的 = IP当前 + rel8 rel8 值在页内,即-128 ~ +127间
• 前导指令
CMP、TEST、DEC CX 等
注:执行 JXX 指令前的指令必须影响 标志位
条件转移指令的执行流程
微机原理
条件满足 ?
微机原理
8088/8086CPU指令系统 寻址方式解决了操作数存放的形式,
本节讲述 8088/8086 CPU基本指令的 助记符表示形式及功能
结合不同的寻址方式,将 133 条基本 指令组合为上千种指令功能
微机原理
8088/8086 CPU 基本指令类
数据传送类指令 算术运算类指令 逻辑运算类指令 串操作类指令 控制转移类指令 处理器控制类指令
• 段间直接远转移
JMP FAR LABEL ; LABEL 为 CS目的:IP目的
• 段间间接远转移
JMP DWORD [BX] ; CS目的:IP目的 在地址 [BX] 中
注:段间转移方式 —— CS变、IP变
当前CS=210×01H6 21000H
微机原理
代码段1
当前IP =1500H
JMP 0C 02 00 65
(IP当前)← SS:SP 恢复现场 IP 值出栈 (CS当前)← SS:SP 恢复现场 CS 值出栈
控制转移类指令
微机原理
近过程的调用时的保持现场
. . MOV AX,BX
CALL MAIN MOV BX,AX
. .
CS 2000H
2002H ← IP源 IP当前 入栈
2005H ← IP当前
微机原理
控制转移类指令
程序转移指令用来控制程序的走向,其 实质是设法改变当前的CS和IP值,以使CPU 转移到一个新的地址处执行程序。
微机原理
控制转移类指令
无条件转移指令 JMP 指令
CALL、RET指令
有条件转移指令 JXX 组指令
中断指令
INT、IRET、INTO指令
循环控制指令
LOOP,LOOPZ,
转移目标的偏移地址 转移目标的段地址
新CS=6500H
×16 65000H
代码段2
新IP = 020CH
转移至此
…
控制转移类指令
微机原理
➢ 段内间接转移与段间间接远转移讨论
• JMP [BX] ;指令错误,未确定[BX]中的数据类型
• JMP WORD [BX] ;段内间接转移,返回 16 位 IP目的 值
2000H
微机原理
控制转移类指令
CALL、RET —— 过程调用与过程返回指令
• 过程调用指令 — CALL LABEL ✓ 段内近调用过程 CS 不变,IP 变;保护现场即将IP当前值入栈 ✓ 段间远调用过程 CS、IP 均变;保护现场即将CS当前、IP当前值入栈
• 过程返回指令 — RET ✓ 定义近过程时 RET 指令恢复现场即将 IP当前值出栈 ✓ 定义远过程时 RET 指令恢复现场即将 IP当前、CS当前值出栈
控制转移类指令
微机原理
JMP —— 无条件转移指令
• 段内间接转移
✓ 寄存器中的值为段内IP目的地址 JMP BX
✓ 存储器中的值为段内IP目的地址 JMP WORD [ BX ] JMP WORD [ 2000H ]
注:段内转移方式 —— CS不变、IP变
控制转移类指令
MP DWORD [BX] ;段间间接远转移,返回 32 位 CS目的:IP目的 值
微机原理
段内间接转移与段间间接远转移例
若(BX)= 2000H • JMP WORD [BX]
CS目的 = CS源 IP目的 = 3C2AH • JMP DWORD [BX]
CS目的 = 3367H IP目的 = 3C2AH
IP目的 = 8030H
微机原理
控制转移类指令
CALL指令中的直接调用与间接调用
➢ 段内近过程调用 ✓ 直接 IP目的 CALL MAIN ✓ 间接 IP目的 CALL BX
➢ 段间远过程调用 ✓ 直接 CS目的:IP目的
CALL MAIN
✓ 间接 CS目的:IP目的
CALL DWORD [ BX ]
段内直接短转移 —— rel8
JMP SHOR LABEL
错误的 rel8
注:rel8 < 80H
正确的 rel8
IP目的 ← IP当前 + rel8 LABEL IP目的 ← IP源 + rel8 + 2
微机原理
← IP源 ← 06H ← IP当前
← IP目的
段内直接近转移 —— rel16 JMP NEAR LABEL
控制转移类指令
➢ CALL、JMP 指令比较
• CALL 指令 先保护现场 CS当前:IP当前 后获得调用过程入口CS目的:IP目的
• JMP 指令 不保护现场 CS当前:IP当前 只获得跳转程序入口CS目的:IP目的
微机原理
控制转移类指令
微机原理
JXX —— 有条件转移指令
• 指令格式
JL、JGE、. . . . . . JNZ 等
正确的 rel16
IP目的 ← IP当前 + rel16 LABEL IP目的 ← IP源 + rel16 + 3
微机原理
← IP源 ← 05H ← 00H ← IP当前
← IP目的
微机原理
例:设标号偏移地址=1000H,执行完JMP指 令后的当前IP值为0009H,则
位移量=1000H-0009H = 0FF7H
控制转移类指令
微机原理
• 段内近调用过程 —— CALL LABEL
(IP当前)→ SS:SP 保护现场 IP 值入栈 • 段内近调用返回 —— RET
(IP当前)← SS:SP 恢复现场 IP 值出栈 • 段间远调用过程 —— CALL LABEL
(CS当前)→ SS:SP 保护现场 CS 值入栈 (IP当前)→ SS:SP 保护现场 IP 值入栈 • 段间远调用返回 —— RET
LOOPNZ指令
微机原理
控制转移类指令
JMP —— 无条件转移指令 • 段内直接短转移
JMP SHORT LABEL ;IP目的 ← IP当前 + rel8(8 bit 符号数) rel8 在-128 ~ +127之间
• 段内直接近转移
JMP NEAR LABEL ;IP目的 ← IP当前 + rel16 (16 bit 符号数) rel16 在-32768 ~ +32767之间
• 指令特点
仅有段内短转移,IP目的 = IP当前 + rel8 rel8 值在页内,即-128 ~ +127间
• 前导指令
CMP、TEST、DEC CX 等
注:执行 JXX 指令前的指令必须影响 标志位
条件转移指令的执行流程
微机原理
条件满足 ?
微机原理
8088/8086CPU指令系统 寻址方式解决了操作数存放的形式,
本节讲述 8088/8086 CPU基本指令的 助记符表示形式及功能
结合不同的寻址方式,将 133 条基本 指令组合为上千种指令功能
微机原理
8088/8086 CPU 基本指令类
数据传送类指令 算术运算类指令 逻辑运算类指令 串操作类指令 控制转移类指令 处理器控制类指令
• 段间直接远转移
JMP FAR LABEL ; LABEL 为 CS目的:IP目的
• 段间间接远转移
JMP DWORD [BX] ; CS目的:IP目的 在地址 [BX] 中
注:段间转移方式 —— CS变、IP变
当前CS=210×01H6 21000H
微机原理
代码段1
当前IP =1500H
JMP 0C 02 00 65
(IP当前)← SS:SP 恢复现场 IP 值出栈 (CS当前)← SS:SP 恢复现场 CS 值出栈
控制转移类指令
微机原理
近过程的调用时的保持现场
. . MOV AX,BX
CALL MAIN MOV BX,AX
. .
CS 2000H
2002H ← IP源 IP当前 入栈
2005H ← IP当前
微机原理
控制转移类指令
程序转移指令用来控制程序的走向,其 实质是设法改变当前的CS和IP值,以使CPU 转移到一个新的地址处执行程序。
微机原理
控制转移类指令
无条件转移指令 JMP 指令
CALL、RET指令
有条件转移指令 JXX 组指令
中断指令
INT、IRET、INTO指令
循环控制指令
LOOP,LOOPZ,
转移目标的偏移地址 转移目标的段地址
新CS=6500H
×16 65000H
代码段2
新IP = 020CH
转移至此
…
控制转移类指令
微机原理
➢ 段内间接转移与段间间接远转移讨论
• JMP [BX] ;指令错误,未确定[BX]中的数据类型
• JMP WORD [BX] ;段内间接转移,返回 16 位 IP目的 值
2000H
微机原理
控制转移类指令
CALL、RET —— 过程调用与过程返回指令
• 过程调用指令 — CALL LABEL ✓ 段内近调用过程 CS 不变,IP 变;保护现场即将IP当前值入栈 ✓ 段间远调用过程 CS、IP 均变;保护现场即将CS当前、IP当前值入栈
• 过程返回指令 — RET ✓ 定义近过程时 RET 指令恢复现场即将 IP当前值出栈 ✓ 定义远过程时 RET 指令恢复现场即将 IP当前、CS当前值出栈
控制转移类指令
微机原理
JMP —— 无条件转移指令
• 段内间接转移
✓ 寄存器中的值为段内IP目的地址 JMP BX
✓ 存储器中的值为段内IP目的地址 JMP WORD [ BX ] JMP WORD [ 2000H ]
注:段内转移方式 —— CS不变、IP变
控制转移类指令
MP DWORD [BX] ;段间间接远转移,返回 32 位 CS目的:IP目的 值
微机原理
段内间接转移与段间间接远转移例
若(BX)= 2000H • JMP WORD [BX]
CS目的 = CS源 IP目的 = 3C2AH • JMP DWORD [BX]
CS目的 = 3367H IP目的 = 3C2AH
IP目的 = 8030H
微机原理
控制转移类指令
CALL指令中的直接调用与间接调用
➢ 段内近过程调用 ✓ 直接 IP目的 CALL MAIN ✓ 间接 IP目的 CALL BX
➢ 段间远过程调用 ✓ 直接 CS目的:IP目的
CALL MAIN
✓ 间接 CS目的:IP目的
CALL DWORD [ BX ]
段内直接短转移 —— rel8
JMP SHOR LABEL
错误的 rel8
注:rel8 < 80H
正确的 rel8
IP目的 ← IP当前 + rel8 LABEL IP目的 ← IP源 + rel8 + 2
微机原理
← IP源 ← 06H ← IP当前
← IP目的
段内直接近转移 —— rel16 JMP NEAR LABEL
控制转移类指令
➢ CALL、JMP 指令比较
• CALL 指令 先保护现场 CS当前:IP当前 后获得调用过程入口CS目的:IP目的
• JMP 指令 不保护现场 CS当前:IP当前 只获得跳转程序入口CS目的:IP目的
微机原理
控制转移类指令
微机原理
JXX —— 有条件转移指令
• 指令格式
JL、JGE、. . . . . . JNZ 等