jmp short 标号
jmp near ptr 标号
jmp far ptr 标号
jmp 16位reg,如jmp ax
jmp word ptr 内存单元地址
jmp dword ptr 内存单元地址
详情百度https://www.jianshu.com/p/c685c1c033ff
若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?
若要指向第一条指令,则要使IP的值为0000H即可,而jmp word ptr为段内转移指令,相当于把IP值赋值为后面内存单元的值,故只需要[0001]处的字是0即可。
即[0001]和[0002]处的字节都是0。
使用t单步执行,可以发现程序进入死循环。
assume cs:code
data segment
? //db 'x',0,0,'x'
data ends
code segment
s:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1]
mov ax,4c00h
int 21h
code ends
end s
(2)补全程序,使得jmp指令执行后,CS:IP指向第一条指令
由于执行jmp指令后指向第一条指令,CS段没有改变,只需要改变IP值为0000H。而段间转移相当于把内存地址开始的前两个字节赋值给IP,后面的两字节赋值给CS,按顺序填入0和CS值即可。
assume cs:code
data segment
dd 12345678h
data ends
code segment
s:mov ax,data
mov ds,ax
mov bx,0
mov [bx],? //bx
mov [bx+2],? //cs
jmp dword ptr ds:[0]
mov ax,4c00h
int 21h
code ends
end s
来源:CSDN
作者:Hoto Kokoa
链接:https://blog.csdn.net/weixin_43292547/article/details/104222101