转移指令
jmp指令
jmp 为无条件转移指令,可以只修改IP,也可以同时修改CS和IP
jmp指令要给出的两种信息:
- 转移的目的地址
- 转移的距离(段间距离、段内短距离、段内近距离)
根据位移转移的jmp指令
jmp short 标号(转到标号处执行指令)
这种格式实现的是段内短转移,位移范围为8位(-128~127)
jmp near ptr 标号
与jmp short 标号
相似,实现段内近转移,位移范围为16位(-32768~32767)
note : 以上两种格式的jmp指令CPU在执行时并不需要转移的目的地址,只需要由编译器计算出两点的位移量
转移的目的地址在指令中的jmp指令
jmp far ptr 标号
实现的是段间转移,又称远转移。同时修改CS和IP。
转移地址在内存中的jmp指令
jmp word ptr 内存单元(段内转移)
jmp dword ptr 内存单元(段间转移)
jcxz指令
条件转移指令,所有条件转移指令都是短转移,在对应机器码包含转移地址,而不是目的地址。对IP修改范围都为:-128~127
# 示例
#指令格式
jcxz 标号 #(如果cx = 0, 转到标号处执行)
note :
jcxz 标号
相当于if((cx) == 0) jmp short 标号;
loop指令
loop指令为循环指令,所有讯号指令都是短转移
call和ret指令
两个都是转移指令,它们都修改IP,或同时修改CS和IP,经常被共同用来实现子程序的设计
ret和retf
ret指令使用栈中的数据,修改IP的内容,实现近转移。
retf指令使用栈中的数据,修改CS和IP的内容,实现远转移
CPU执行ret指令时,相当于pop IP
CPU执行retf指令时,相当于pop IP pop CS
call指令
CPU执行call指令时,进行两步操作:
- 将当前IP或CS和IP压入栈中;
- 转移
# 使用格式
call 标号 # 实现段内近转移
call far ptr 标号 # 是实现段间远转移
## 转移地址在内存中的call指令
call word ptr 内存单元地址 # 实现段内近转移
call dword ptr 内存单元地址 # 实现段间远转移
这里是我的博客