jmp、call和ret指令

jmp指令

jmp指令为无条件转移指令,可以只修改IP,也可以同时修改CS和IP

jmp指令的主要应用格式:

1
2
3
4
5
只改变IP————段内转移
jmp short 标号(转到标号处执行指令)——短转移,8位位移
jmp near ptr 标号 ——近转移,16位位移
jmp 16位reg
jmp word ptr 内存单元地址
1
2
3
同时改变CS和IP————段间转移
jmp far ptr 标号 ——远转移
jmp dword ptr 内存单元地址

call指令

CPU执行call指令时,进行两步操作:

  1. 将当前的IP或CS和IP压入栈中;
  2. 转移。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
只改变IP————段内转移

call 标号(将当前的IP压入栈后,转到标号处执行指令)
相当于操作:
push IP
jmp near ptr 标号

call 16位reg
相当于操作:
push IP
jmp 16位reg

call word ptr 内存地址单元
相当于操作:
push IP
jmp word ptr 内存地址单元

1
2
3
4
5
6
7
8
9
10
11
12
13
同时改变CS和IP————段间转移

call far ptr 标号
相当于操作:
push CS
push IP
jmp far ptr 标号

call dword ptr 内存单元地址
相当于操作:
push CS
push IP
jmp dword ptr 内存单元地址

ret指令

ret指令调用栈中的数据,修改IP的内容,从而实现近转移;

retf指令调用栈中的数据,修改CS和IP的内容,从而实现远转移。

ret指令

相当于操作:pop IP

retf指令

相当于操作:pop IP pop CS