jmp位无条件转移指令,即可以修改IP或者同时修改CS和IP。
(1)、依据位移进行转移的jmp指令
这种格式的jmp指令实现的是段内转移,它对IP的修改范围是-128-127,也就说,它向前转移时最多越过128个字节,向后转移可以最多越过127个字节。jmp指令中的short符号,说明指令进行的是短转移。jmp指令中的标号是代码段中的标号,它指明了指令转移的目的地,转移结束后,CS:IP应指向标号处的命令,例如:
assume cs:codesg
codesg segment
start:mov ax,0
jmp short s
add ax,1
s: inc ax
codesg ends
end start
CPU在指向jmp指令的时候,并不需要转移的目的地址,而是告诉了cpu要转移的位移。
(2)、转移的目的地址在指令中的jmp指令。
jmp far ptr,实现的是段间转移,又称为远转移,功能如下:
CS=标号所在段的段地址,IP=标号所在段中的偏移地址。
far ptr指明了指令用标号的段地址和偏移地址修改CS和IP;
如下:
view plaincopy to clipboardprint?
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 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 (3)、转移地址在寄存器中的jmp指令
指令格式:jmp 16位reg
功能: IP=(16位reg)
(4)、转移地址在内存中的jmp指令
有两种格式:
1、jmp word ptr 内存单元地址(段内转移)
功能:从内存单元地址处开始存放一个字,是转移的目的偏移地址
比如如下指令:
mov ax,0123h
mov ds:[0],ax
jmp word ptr ds:[0]
执行后:IP=0123h
2、jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址
CS=内存单元地址+2
IP=内存单元地址
例如:
mov ax,0123h
mov ds:[0],ax
mov word ptr ds:[2],0
jmp dword ptr ds:[0]
执行后,CS=0,IP=0123H,CP:IP指向0000:0123
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/w_shun/archive/2010/05/09/5572662.aspx
|
|