控制传送指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086/8088CPU共有三条中断指令: (1)、INT (Interrupt) (2)、INTO(Interrupt if overflow) (3)、IRET(Interrupt Return)
6
归结控制转移指令分类
指令类型 无条件转移 助记符 JMP
条件转移
JE/JZ, JNE/JNZ, JS, JNS, JP/JPE, JNP /JPO,JO, JNO, JC, JNC, JB/JNAE, JAE/JNB, JA/JNBE, JBE/JNA,JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG ,JCXZ
23
注意几点:
① 所有条件转移指令都是相对转移形式,
范围(-128~+127)。
当需往一个较远地方进行条件转移时, 选用条件转移转到附近一个单元, 然后,再用无条件转移转到较远的目的地。
② 条件转移指令中,相当一部分指令是在比较完二个数大小 后,根据结果而决定是否转移,
③条件转移指令不影响标志位
24
执行操作: (IP)←(EA) (CS)←(EA+2) 例:已知 (BX)=1000H,(SI)=2000H , (DS)=2000H (23000H)=2211H, (23002H)=4433H
JMP DWORD
PTR
[BX][SI]
则: (BX)+(SI)=3000H (IP)=(PA)=(16d(DS)+(BX)+(SI))=(23000H)=2211H (CS)=(PA+2)=4433H
(2)、LOOPE/LOOPZ (Loop if equal / Loop if zero)当相等/为“0”循环
(3)、LOOPNE/LOOPNZ (Loop if not equal/ Loop if not zero) 当不相等/不为“0”循环
5Leabharlann Baidu
4、中断指令 8086/8088CPU 可以在程序中安排一条中断指令引起中断 过程,这种中断称为软中断。
9
在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。
CS和IP两寄存器的内容决定了程序的流程 , 改变CS和IP寄存器的值, 就改变了程序执行的流程。
8086/8088 中CS和IP的变化规则: reset复位后,( CS ) = FFFFH,( IP ) = 0
故8088从内存FFFF:0000H处取第一条指令执行, 第一条指令在内存的ROM区。
用1个字节存放操作码。
19
FAR 远属性标号, 标号与控制转移指令不在同一段中。 在汇编语言中,在机器语言中存放如下:

… E 5 0 0 2 A 0 2 0 0 OP码 新(IP)=0250H 新(CS)=2000H … C2段 … 20000H … 20250H … C1段
例:
C1 SEGMENT
21
( 2)、Jcc 条件转移指令
根据单个条件标志的设置情况转移(10种) JZ(JE)/JNZ(JNE),JP(JPE)/JNP(JPO), JS/JNS, JO/JNO, JB(JNAE、JC)/JNB(JAE、JNC),
根据两个无符号数比较结果转移(4种)
JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA)/JNBE(JA)
CALL调用指令
段内直接调用
段内间接调用 RET返回指令 段内返回
段间直接调用
段间间接调用
(2)、 RET( Reture from procedure)返回
段间返回
段内带立即数返回
段间带立即数返回
4
3、循环控制指令 循环控制指令用于使一些程序段反复执行形成循环程序。
循环控制指令有三种:
(1)、LOOP (Loop) 循环指令
LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ CALL, RET
循环控制 过程调用
中断指令
INT, INTO, IRET
7
(二).控制传送指令(Control transfer instructions)
1、转移指令
转移指令将程序控制从一处转换到另一处的最直接方法。 在CPU内部,转移是通过将目标地址传送给IP来实现的。 注意:CS—段地址 转移地址
JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)
• 测试CX的值为零转移
3
JCXZ
2、 过程调用指令
如果有一些程序段在不同地方反复出现,可以将这些程 序段设计成为过程(子程序)供调用。过程结束,返回调用处。 过程调用指令包括:过程调用指令和返回指令
(1)、 CALL( Call a procedure)调用
… JMP FAR PTR next_prog
JMP指令

C1 ENDS

C2
SEGMINT

next_prog:
next_prog: 2000:0250H C2


ENDS

20
段间间接转移:(CS) 、 (IP)都改变 格式:JMP DWORD PTR OPR OPR —可以使用存储器
(除立即数和寄存器以外的任何一种寻址方式)
段内直接短转移
段内直接近转移 段内间接转移 段间直接远转移 段间间接转移
JMP指令的操作:无条件地将控制转移到指令中规定的目的地。 目标地址可以是:直接方式/间接方式给出。 JMP指令不影响标志位。
2
(2)、Jcc 条件转移指令
汇编程序设计中常利用条件转移指令来实现分支。 “cc”-表示条件。
占有两个字节。
16
段内间接转移: (CS)不变,只改变(IP)
格式:JMP WORD PTR OPR OPR —为16位寄存器、
或存储器(除立即数以外的任何一种寻址方式)
执行操作: (IP) (EA) 或(IP) (reg16) 指令格式举例: JMP AX JMP TABLE [BX] JMP ALPHA_WORD JMP SI ; 操作数已定义为16位存储器 ;操作数已定义为16位存储器
操作数必须是短标号。转移范围为:-128~+127
具体条件转移指令分四种情况讨论: • 根据单个条件标志的设置情况转移
JZ(JE)/JNZ(JNE),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO), JB(JNAE、JC)/JNB(JAE、JNC),
• 根据两个无符号数比较结果转移
JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA)/JNBE(JA) • 比较两个带符号数,并根据比较结果转移
内存
... 源程序 : 条件转移指令:JMP SHORT next ... ... ... next: MOV AL,03H OP
(IP)当前 3000:1000H
50H ... ...
D8=50H=1050H-1000H
3000:1050H
OP 03H
(IP)=(IP)当前+D8
...
14
8位位移量D8的范围在(-128 ~ 127)之间,否则出错。
17
JMP
WORD PTR [BP][DI]
例:
(DS)=1000H, (BX)=1000H, (CX)=5000H, (CS)=3000H
(11000H)=1234H, ( 11002H)=5678H
JMP CX
; (IP)=5000H
JMP WORD PTR [BX]
;(CS)=3000H , (IP)=1234H
IP—偏移量
调用地址寻址
8

先介召控制和非控制转移指令的概念
• 非控制转移指令:指令本身对CS和IP均无操作,形成顺序执行结构。 顺序执行结构: 顺序存放,顺序执行
• 控制转移指令: 以CS和IP为主要操作对象, 改变CS和IP寄存器的值, 就改变了程序执行的流程。
◢ 程序是指令的集合
◢ 指令在内存中顺序存放
指在同一段的范围之内进行转移
即用新的转移目标地址代替原有的IP值。 段间转移:要修改IP、 CS寄存器的内容 转到另一段去执行程序。 即转移目标地址= 新的段地址和偏移地址两部分组成。
12

段内直接短转移:
OPR—在汇编语言中使用符号地址。 在机器语言中存放位移量D8 位移量D8 = 符号地址的偏移地址 - 当前IP的值
源程序 :
如:tager:
next : -128 条件转移指令: ... ... ... ... JMP SHORT next ... ... ... ... MOV AL,03H
…… JMP tager
+127
JMP SHORT tager …… tager:
next:
标号与控制转移指令在同一段中, 后引用的标号可以不用SHORT,
② 以CX的值为0作为转移条件
助记符 转移条件
JCXZ
CX=0
25
③以两个无符号数比较的结果作为转移条件
助记符 转移条件
JA/JNBE
JAE/JNB/JNC JB/JNAE/JC JBE/JNA
非控制转移指令
CPU取来一条指令后, 自动将IP的值加上该指令的字节数, 使IP顺序指向下一条指令, CPU取来紧接着的指令执行。 (此时IP的变化由CPU内部的硬件自动完成)
10
控制转移指令以CS和IP为主要操作对象
控制转移指令改变CS和IP的值, 使程序产生分支、调用结构。
分支结构、调用结构: 顺序存放,非顺序执行
比较两个带符号数,并根据比较结果转移(4种)
JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)
22
指令格式:J cc OPR
操作:根据上一条指令所设置的条件码来判别测试条件转移。
每一种条件转移指令都有它的测试条件。
满足条件时 : (IP)←(IP)当前+ 符号扩展到16位后的位移量D8, 使用相对寻址方式,范围-128~+127个字节 不满足条件时:(IP)不变,顺序执行下一条指令
(PA)=(16d(DS)+(BX))=(11000H)=1234H
18

段间直接(远)转移: (CS) 、 (IP)都改变
OPR—在汇编语言中使用符号地址。 符号地址与指令不在同一个段里。 在机器语言中则要指定转向地址的偏移地址和段地址
格式:JMP FAR PTR OPR;
执行操作: (IP)←OPR所在的段内偏移地址。 (CS)←OPR所在的段的段址。 而指令本身占有5个字节: 用2个字分别存放符号地址的段值、偏移值,
按转移条件不同,条件转移指令可以分为四大类: ① 以单个状态标志作为转移条件助记符 转移条件
助记符 JZ/JE JS JO JP/JPE JC 转移条件 ZF=1 SF=1 OF=1 PF=1 CF=1 助记符 JNZ/JNE JNS JNO JNP/JPO JNC 转移条件 ZF=0 SF=0 OF=0 PF=0 CF=0
前引用的标号必须使用SHORT
15
段内直接近转移:
格式:JMP NEAR PTR OPR OPR—在汇编语言中使用符号地址。
在机器语言中存放位移量D16
位移量D16 = 符号地址的偏移地址 - 当前IP的值 执行操作: (IP)←(IP)当前+D16 NEAR近属性标号 位移量为D16范围:-32768~+32767H,占有两个字节。 而指令本身占有三个字节。可以转移到段内的任一位置。 过程:如同SHORT,只是位移量为D16范围-32768~+32767H,
五.控制传送指令(Control transfer instructions)
(一)、控制传送指令概述
控制传送指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。
1、转移指令
转移指令包括两种: (1)、JMP(Jump) 无条件转移指令 (2)、Jcc 条件转移指令
1
(1)、 JMP(Jump)无条件转移指令 转移分成两类:段内或段间转移。 无条件转移指令有五种格式:
例:比较(AX)、(BX)的大小,将大数存于( max )单元。 CMP AX, BX
JGE
great
XCHG AX, BX great: MOV [max], AX
11
(1)、JMP(Jump)无条件转移指令
JMP(jmp)跳转指令。 JMP指令必须指定转移的目标地址(或转向地址)。 转移分成两类:段内或段间转移。 段内转移:只要改变IP寄存器的内容
格式:JMP SHORT OPR
执行操作:(IP)←(IP)当前+D8
SHORT 短属性标号 8位位移量D8的范围在(-128 ~ 127)之间,占有一个字节。 而指令本身占有两个字节。
13
例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。 JMP SHORT NEXT指令执行过程: NEXT—在汇编语言中使用符号地址 (IP)←(IP)当前+D8
相关文档
最新文档