8086CPU的转移指令分为以下几类:
无条件转移指令(如:jmp)
条件转移指令
循环指令(如:loop)
过程
中断
1、操作符offset
offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。
例: mov si,offset s
含义:将标号s处的偏移地址送入si中。
2、jmp指令
为无条件转移指令,可以只修改ip也可以同时修改cs和ip
jmp指令要给出两种信息:
- 转移的目的地址
- 转移的距离(段间转移、段内短转移、段内近转移)
3、依据位移进行转移的jmp指令
jmp short 标号
实现的是段内短转移,它对ip的修改,范围为-128~127
assume cs:codesg
codesg segment
start: mov ax,0
jmp short s
add ax,1
s:inc ax
codesg ends
end start
实际jmp short 标号 的功能为(ip)=(ip)+8位位移
- 8位位移:“标号”处地址-jmp指令后的第一个字节地址
- short 指明此处的位移为8位位移
- 8位位移的范围为-128~127 用补码表示
- 8位位移由编译程序在编译时算出
jmp near ptr 标号
实现的是段内近转移。
(ip)=(ip)+16位位移。范围为-32768~21727
4、转移目的地址在指令中的jmp指令
jmp far ptr 标号
实现的是段间转移,又称远转移。
功能:far ptr指明了指令用标号的段地址和偏移地址修改cs和ip。
assume cs:codesg
codesg segment
start: mov ax,0
mov bx,0
jmp far ptr s
db 256 dup (0)
s:add ax,1
inc ax
codesg ends
end start
5、转移地址在寄存器中的jmp指令
格式:jmp 16位寄存器
功能: IP=(16位寄存器)
6、转移地址在内存中的jmp指令
格式:
jmp word ptr 内存单元地址(段内转移)
功能:从内存单元地址处存放着一个字,是转移的目的偏移地址。
jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处存放两个字,高地址处的字是转移目的段地址,低地址处是转移的目的偏移地址。
7、jcxz指令
为条件转移指令,所有的有条件转移指令都是短地址,对应机器码中包含转移的位移,对ip的修改范围为-128~127
格式:
jcxz 标号
(如果(cx=0),则转移到标号处执行)
(cx不等于0,程序向下执行)
8、loop指令
9、根据位移进行转移的意义
目的:方便了程序段在内存中的浮动装配
10、编译器对转移位移超界的检测