在8086CPU中,转移指令分为以下几类
无条件转移指令(jmp)
条件转移指令
循环指令
过程
中断
操作符offset
操作符offset在汇编与语言中由编译器处理的符号,他的功能是取得标号的偏移地址
assume cs:code
code:segment
start:mov ax,offset start //(ax) = 0
s:mov ax,offset s //(ax) = 3
code ends
end start
nop
nop的机器码占一个字节,例如
s:nop
jmp指令
jmp指令为无条件转移指令 可以用来修改ip,也可以同时修改cs和ip
jmp指令要给出两种信息
转移的目的地
转移的距离
1)依据位移进行转移的jmp
jmp short 标识 的功能为 (ip) = (IP)+8位位移
8位位移 = 标识处的地址-jmp指令后的第一个字节的地址
short此处指明位移为8位位移
8位位移的范围-128–127,使用补码标识
8位位移由编译器在编译时计算
jmp near ptr 标识 的功能为 (ip) = (IP)+16位位移
2)转移地址在内存中的jmp指令
jmp word ptr 内存单元地址(段内转移)
在内存单元地址处开始存放着一个字
jmp dword ptr 内存单元地址(段间转移)
在内存中存放2个字,高地址处的字是转移目标段地址,低地址是转移目标的偏移地址
(CS) = (内存单元地址+2)
(IP) = (内存单元地址)
jcxz指令
jcxz指令是有条件转移指令,所有有条件转移指令都是短转移,在对应的机器中包含转移的位移,而不是目的地址,
指令格式:jcxz 标号(如果(cx) = 0,转移到标号处执行)
操作:当(cx) = 0时,(IP)= (IP)+8位位移
当(CX)!= 0 时,什么都不操作
loop指令
指令格式:loop 标识((cx) = (cx)-1,如果(cx) != 0 转移到标号处执行
操作:
(1) (cx) = (cx) -1
(2) 如果(cx) != 0 (ip) = (ip) +8位位移
如果(cx) = 0,什么都不做,继续执行 这个就和上面的jcxz指令相反