跳转原理:
修改cs:ip 或 ip的值
指令格式:
指令 标号
跳转分类:
段内跳转
段间跳转(短转移:-128到127、近转移-32768到32767,补码表示)
跳转指令分类:
1、无条件跳转 jmp(段间、段内(短转移、近转移))
2、条件跳转 jcxz(短转移)
3、循环指令 loop(短转移)
4、过程(待补充)
5、中断(待补充)
操作符 offset
mov ax,offset 标号
意为取标号处的偏移地址并放入ax
例:
assume cs : code
code segment
start :mov ax,1e33h
s:mov bx, 1234h
mov bx, offset s;相当于将s处偏移地址放入bx中
code ends
end start
jmp指令(无条件转移):
修改ip
jmp short s(短转移)
jmp near ptr s(近转移)
这两条汇编指令,在机器指令中保存的操作数不是目的地址,而是目的地址与当前位置的下一个地址的差(《汇编语言》王爽-实验8),说明CPU在执行jmp指令时不需要目的地址,只需要位置差
修改cs:ip
jmp far ptr s(段间转移)
该条汇编指令,在机器指令中保存的操作数是目标地址
jmp 16位reg:(ip)=(16位reg)
将寄存器中的值写入ip中
jmp word ptr 内存单元地址(该内存单元存了一个字的偏移地址,段内转移)
从内存单元地址中获取目标偏移地址
jmp dword ptr 内存单元地址(该内存单元存了一个字的段地址与一个字的偏移地址,段间转移)
从内存单元地址中获取目标段地址与偏移(两字节偏移地址在低位,两字节在段地址高位)
jcxz指令(条件转移)
jcxz s
当(cx)=0,进行转移
该条汇编指令,在机器指令中保存的操作数为目的地址与当前位置的下一个地址的差(转移位移)
jcxz s等价于if((cx)==0){jmp short s}
每次循环完毕计数器cx不自动变化,直接进行判断
loop指令(循环)
loop s
当(cx)=0,进行转移
该条汇编指令,在机器指令中保存的操作数为目的地址与当前位置的下一个地址的差(转移位移)
loop s等价于jcxz s等价于if((cx- -)==0){jmp short s}
每次循环完毕计数器cx自减1,然后进行判断
参考资料《汇编语言》王爽