可以修改IP,或同时修改CS和IP的指令统称转移指令
offset:由编译器处理的符号,功能是取得标号的偏移地址
jmp为无条件转移指令,可以只修改IP,也可以同时修改CS和IP
jmp指令要给出两种信息:
(1)转移的目的地址
(2)转移的距离(段间转移。段内短转移,段内近转移)
jmp short 标号:表示段内短转移
CPU执行指令的过程:
(1)从CS:IP指向的内存单元中读取指令,读取的指令放入指令缓冲区
(2)(IP)=(IP)+所读取的指令的长度,从而指向下一条指令的地址
(3)执行指令。转到(1),重复这个过程
在“jmp short 标号”指令所对应的机器码中,并不包含转移的目的地址,
而包含的是转移的位移,实际上,指令“jmp short 标号”的功能为:
(IP)=(IP)+8位位移
8位位移=“标号”处得地址-jmp指令后的第一个字节的地址
jmp near ptr 标号:实现段内近转移,(IP)=(IP)+16位位移
jmp far ptr 标号,实现段间转移,又称远转移
转移地址在内存中的指令的两种格式:
(1)jmp word ptr 内存单元地址(段内地址)
功能:从内存单元地址处开始存放着一个字,是转移的目的的偏移地址
(2)jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,
低地址处是转移的目的偏移地址
所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址
jcxz 标号(如果(cx)=0,转移到标号处执行)
操作:当(cx)=0时,(IP)=(IP)+8位位移
所有循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址
loop 标号 ((cx)=(cx)=1,如果(cx)!=0,转移到标号处执行)
操作:(1)(cx) = (cx) - 1;
(2) 如果(cx)!=0,(IP)=(IP)+8位位移
dec 的功能与inc相反