第9章 转移指令原理

从广义角度讲,凡是能够控制CPU执行内存某处代码的指令都是转移指令。

从狭义角度讲,能修改IP,或者能同时修改CS和IP的指令被称为转移指令。

当转移指令只修改IP时叫做段内转移,同时修改CS和IP时叫做段间转移。

段内转移分为短转移和近转移,这是根据IP修改范围的长度不同而划分的。

短转移中IP的范围是-27~27-1,近转移中IP的范围是-215~215-1。

8086CPU把转移指令分为5种:

1、无条件转移指令。

2、条件转移指令。

3、循环指令

4、过程。

5、中断。

9.1操作符offset

它的功能是取得标号的偏移地址,如下图所示:

第9章 转移指令原理_第1张图片

而且两个偏移地址之间还可以做减法运算:

9.2 jmp指令

无条件转移指令,用于修改IP或者CS和IP。

它需要两个信息——目的地址和转移的距离。

9.3依据位移进行转移的jmp指令

JMP SHORT标号

short说明这是短转移,即,IP范围是-27~27-1字节。

标号:代码段中的标号,它指明了目的地。

它属于段内转移。

JMP NEAR PTR标号

它是段内近转移。

IP变动范围是-215~215-1,实际的跳跃距离为标号处减去JMP指令后的第一字节地址所得的字节数。

9.4转移的目的地址在指令中的jmp指令

JMP FAR PTR标号

段间转移,远转移。

用标号的段地址和偏移地址修改CS和IP。

9.5转移地址在寄存器中的JMP指令

见2.11

9.6转移地址在内存中的jmp指令

JMP WORD PTR内存单元

段内偏移。

该内存单元中存放的字型数据是目的偏移地址。

JMP DWORD PTR内存单元

段间偏移。

内存单元处存放的是双字型,高地址处字存放的是目的端地址,低地址处字存放的是目的偏移地址。

9.7

jcxz指令

Jumpwhen CX is zero

有条件转移指令,都用于短转移,包含是位移,IP范围是-27~27-1。

格式如下:

JCXZ标号

这条指令只在(CX)=0时有效。

实际位移为标号地址减去JCXZ指令后第一字节地址所得字节数。

在(CX)非0时什么也不做。

9.8

loop指令

循环指令,短指令,它控制的是位移而不是目的地址,IP的移动范围是-27~27-1。

用法如下:

loop标号

它首先判断(CX)是否等于0,如果不等于0再进行(CX)-=1操作。

IP的实际范围是标号处的地址减去loop指令后的第一字节的地址所得的字节数。

9.9根据位移进行转移的意义

这样设计使得指令与具体的物理地址无关而只与位移有关,所以指令可以在可行的任意位置执行。

9.10编译器对转移位移超界的检测

越界就报错。

你可能感兴趣的:(第9章 转移指令原理)