<<汇编语言>>第9~10章笔记

转移指令

jmp指令

jmp 为无条件转移指令,可以只修改IP,也可以同时修改CS和IP
jmp指令要给出的两种信息:

  1. 转移的目的地址
  2. 转移的距离(段间距离、段内短距离、段内近距离)

根据位移转移的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指令时,进行两步操作:

  1. 将当前IP或CS和IP压入栈中;
  2. 转移
# 使用格式   
call 标号 # 实现段内近转移
call far ptr 标号 # 是实现段间远转移
## 转移地址在内存中的call指令
call word ptr 内存单元地址 # 实现段内近转移
call dword ptr 内存单元地址 # 实现段间远转移

这里是我的博客


你可能感兴趣的:(<<汇编语言>>第9~10章笔记)