pentiun之控制转移

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

2020/5/17
13
JMP DWORD PTR [SI]的机器码
4000 DS +) 1212 SI
11111111 11101100
41212
41212
00
41213
10
41214
00
41215
4A
DS:[SI]
1000 IP 4A00 CS
段间间接转移操作示意图
2020/5/17
14
(2)条件转移指令 - JXX 条件转移指令可实现程序的条件分支。
④ 段间间接转移
MEM中给出的16位的段和16位的偏移地址送到CS和IP。
2020/5/17
5
① 段内直接转移
转移的目标地址由指令直接给出。
段内转移,故转移后CS内容保持不变,只改变 IP的值。
汇编语言中格式
位移量 转移范围
JMP (SHORT) OPRD
8位 -128~+127
JMP (NEAR PTR)OPRD 16位 -32768~+32767
五 控制控制转移指令
控制转移指令分为:
–转移指令 –子程序调用和返回指令 –循环控制指令 –中断指令 –处理器控制指令
2020/5/17
1
程序顺序执行和非顺序执行的概念
◢ 程序是指令的集合◢ 指令代码在内存中顺序存放,但指令的执行 不一定是顺序的 在Pentiun系列中,指令的地址由CS中的选择子和EIP两个寄存器 决定。 CS和EIP两寄存器的内容决定了程序的流程
1 顺序执行 CPU取来一条指令后,自动将IP的值加上该指令的字节数, 使IP顺序指向下一条指令, CPU取来紧接着的指令执行。 (此时IP的变化由CPU内部的硬件自动完成)
2020/5/17
2
2 非顺序执行
通过控制转移指令改变CS和IP的值,使程序产 生分支、调用结构。
例:比较(AX)、(BX)的大小,将大数存于 ( max )单元。
本指令无条件转移到指定的目标地址,以执行 从该地址开始的程序段。根据设置CS、IP的方 法,JMP指令分成4种情况。
① 段内直接转移:
指令中给出的8/16位的位移量加到IP。CS保持不变。
② 段内间接转移:
REG/MEM中的16位偏移地址送IP。CS保持不变。
③ 段间直接转移
指令中给出的16位的段和16位的偏移地址送到CS和IP。
JMP NEAR PTR OPR
指令本身占有三个字节,
位移量为D16,占有两个字节,范围:-32768~+32767H。可 以转移到段内的任一位置。
源程序 :
2020/5/17
next : -128
条件转移指令:
+127
... ... ... ... JMP SHORT next ... ... ... ...
OPR-在汇编语言中使用符号地址。
在机器语言中是一个相对于当前IP的位移量:
例:JMP LPI
;转向LPI
JMP BBB ;转向BBB
2020/5/17
6
例:代码段内有一条无条件转移指令
JMP NEXT
指令本身占有两个字节 操作码占一个字节;8位位移量占有一个字节
内存
...
源程序 : 条件转移指令:JMP
助记符 转移条件 助记符 转移条件
JZ/JE
ZF=1 JNZ/JNE ZF=0
在汇编语言中,段内间接寻址通常写成:
JMP WORD PTR[BX+DI]
表示所取得的目标地址是一个字。(只改变 IP)
2020/5/17
10
③段间直接转移 在指令中直接给出要转移到的目的段地址和 偏移地址。
例:JMP 2000:1000H 执行时,(IP)←1000H,(CS)←2000H
注:直接地址为符号地址时,段间直接转移 指令中的符号地址前应加操作符FAR PTR。
CMP AX, BX
JG great
XCHG AX, BX
great:
MOV [max], AX
2020/5/17
3
关于转Βιβλιοθήκη Baidu指令和调用指令的寻址
1.转移指令
➢转移指令的实质:改变IP(或CS)的内容。 ➢所有转移指令不会影响标志位。 ➢分为无条件转移和条件转移两种。
2020/5/17
4
(1) 无条件转移指令 - JMP
qqq: ...
...
next
next: MOV AL,03H
E9
50H
(IP)当前 3000:1000H
...
...
3000:1050H B0
03H
(IP)=(IP)当前+D8 ...
执行操202作0/5/1:7 (IP)←(IP)当前+D8
D8=50H=1050H-1000H
7
JMP SHORT OPR 8位位移量D8的范围在(-128 ~ 127) 之间,否则出错
例:JMP FAR PTR far_label 其中的far_label为远类型的标号。
2020/5/17
11
FAR 远属性标号, 标号与控制转移指令不在同一代码段中。 例:
C1 SEGMENT …
JMP FAR PTR next_prog …
C1 ENDS
C2 SEGMINT
… next_prog: …

C2
ENDS
2020/5/17
12
④段间间接转移
转移的目的地址(段和偏移)在两个相邻的 字存储单元中。例如:
JMP DWORD PTR[SI] 设指令执行前:(DS)=4000H,(SI)=1212H,
(41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。 例中的DWORD PTR表示转移地址是一个双字 。
next:
MOV AL,03H
8
②段内间接转移
转移的目标地址由寄存器或存储单元的内容 给出。
例1:JMP SI
若指令执行前(SI)=1200H,则指令执行后 ,(IP)=1200H,于是转向代码段的偏移地址 1200H处执行。
2020/5/17
9
例2:JMP [BX+DI] 设指令执行前:
(DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H
条件转移指令根据标志位的状态或比较的 结果来决定是否进行分支转移。 格式:
JXX label ;xx为条件名称缩写 8086指令的转移范围为-128~+127字节。 Pentiun最大到-32768~+32767
2020/5/17
15
按转移条件不同,条件转移指令可以分为四大类 :
① 以单个状态标志作为转移条件助记符 转移条件
相关文档
最新文档