转移指令
可以修改IP或同时修改CS,IP的系统指令称为转移指令,可分为以下几类:
转移行为:
只修改IP,称为段内转移,如jmp ax
同时修改CS和IP,称为段间转移,如jmp 1000:0
修改范围:
短转移:修改IP范围-128~127
近转移:修改IP范围-32768~32767
转移指令分类:
无条件转移:jmp
条件转移
循环指令
过程
中断
offset操作符
offset是由编译器处理的符号,它能去标号的偏移地址,如:
start:mov ax,offset start
s:mov ax,offset s
这里就是将start和s的偏移地址分别送给ax,也就是0和3
jmp指令
jmp是无条件转移指令,可以只修改IP也可以同时修改CS和IP,只要给出两种信息,要转移的目的地址和专一的距离。
依据位移的jmp指令:jmp short标号(转到标号处执行指令)。这个指令实现的是段内短转移,对IP修改范围是-128~127,指令结束后CS:IP指向标号的地址,如:
0BBD:0000 start:mov ax,0 (B80000)
jmp short s (EB03)
add ax,1
s:inc ax (40)
执行之后ax值为1,因为跳过了add指令。
还应注意的是,jmp short短转移指令并不会在机器码中直接写明需要转移的地址(0BBD:0008),jmp的机器码是EB03并没有包含转移的地址,这里的转移距离是相对计算而出的地址,来看下面的执行过程:
1、(CS)=0BBDH,(IP)=0006H。CS:IP指向EB03(jmp short s)
2、读取指令EB03进入指令缓冲器
3、(IP)=(IP)+指令长度,即(IP)=(IP)+2
原文:https://www.cnblogs.com/Fire-work/p/13939886.html