jmp指令用法總結(jié):
1.直接用法(只能在Debug下使用的匯編指令):
jmp 段地址:偏移地址
功能:修改CS、IP的內(nèi)容
例子:jmp 55BA:8
執(zhí)行后:(CS)=55EAH, (IP)=0008H
2.根據(jù)標號進行轉(zhuǎn)移的用法:
(1).轉(zhuǎn)移的目的地址不在指令中,依據(jù)位移進行轉(zhuǎn)移(段內(nèi)轉(zhuǎn)移)
a.jmp short 標號(IP的修改范圍為-128至127)
功能:(IP)=(IP)+8位位移
b.jmp near ptr 標號(IP的修改范圍為-32768至32767)
功能:(IP)=(IP)+16位位移
注:依據(jù)位移進行的轉(zhuǎn)移是段內(nèi)轉(zhuǎn)移,位移=標號處的地址-jmp指令后的第一個字節(jié)的地址。
(2).轉(zhuǎn)移的目的地址在指令中(段間轉(zhuǎn)移)
jmp far ptr 標號
功能:用標號的段地址和偏移地址修改CS和IP
(CS)=標號所在段的段地址;(IP)=標號所在段的偏移地址
例子:略
3.轉(zhuǎn)移地址在寄存器中的用法:
jmp 某一合法寄存器
功能:用寄存器中的值修改IP
例子:jmp ax
執(zhí)行后:(IP)=(ax)
注意:合法寄存器是指通用寄存器。一個有趣的現(xiàn)象:jmp ip在debug下調(diào)試也是
錯誤的。字面上理解:(IP)=(IP),但CPU并不支持
4.轉(zhuǎn)移地址在內(nèi)存中的用法:
(1).jmp word ptr 內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移)
功能:從內(nèi)存單元地址出開始存放著一個字,是轉(zhuǎn)移的目的偏移地址
例子:mov ax,0123H
mov [bx],ax
jmp word ptr [bx]
執(zhí)行后:(IP)=0123H
(2).jmp dword ptr 內(nèi)存單元地址(段間轉(zhuǎn)移)
功能:從內(nèi)存單元地址處開始存放著兩個字,高地址處的字是轉(zhuǎn)移的目的段地址,低地址處是轉(zhuǎn)移的目的偏移地址
例子:mov ax,0123H
mov [bx],ax
mov word ptr [bx+2],0
jmp dword ptr [bx]
執(zhí)行后:(CS)=0, (IP)=0123H