包含:jmp、call、ret、retf、loop、jcxz
以下为正文内容:
两种转移方式:
1、段内转移(只修改IP)
- 短转移:IP的修改范围为「-128~127」,即8位位移。
- 近转移:IP的修改范围为「-32768~32767」,即16位位移。
2、段间转移(修改CS和IP)
jmp:无条件跳转指令
1、jmp short 标号
段内段转移。即(IP)=(IP)+8位位移。「注:(IP)表示IP寄存器中的值,下同」
2、jmp near 标号
段内近转移。(IP)=(IP)+16位位移。
3、jmp far ptr 标号
段间转移(远转移)。(CS)=标号的段地址,(IP)=标号的偏移地址。
4、jmp 16位的寄存器
(IP)=(16位的寄存器)
5、jmp word ptr 内存地址
(IP)=(内存单元),即用指定的内存单元中的值来填充IP。
6、jmp dword ptr 内存地址
(CS)=(内存地址+2),(IP)=(内存地址)。即用从指定的内存单元开始第2个字填充CS,用第1个字填充IP。
call指令
call指令用于将当前的IP压栈或将CS、IP同时压栈后进行程序的跳转。
1、call 标号
将IP压栈后跳转。



2、call far ptr 标号
将CS和IP压栈后跳转。


3、call 16位寄存器
将IP压栈后跳转。

4、call word ptr 内存地址

ret/ref指令
ret


retf


可通过call与ret、retf搭配使用,实现父、子函数的跳转。
loop指令
当cx寄存器的值不为0时,循环执行标号内指定的指令。
指令格式:

用伪代码来描述:


jcxz指令
Jump while
CX is
Zero(我猜的)
当cx寄存器的值为0时,跳转到标号处执行指令。
指令格式:
jcxz 标号
用伪代码来描述:


The end


以上内容整理自:王爽《汇编语言 第二版》p177-p198
PS1:《汇编语言 第二版》PDF下载:
点击前往某度云,提取码:04e0
PS2:安利一个写x86汇编的IDE:emu8086,
点击前往下载。 安装的时候把例子也装上,里面有很多有趣的例子!