使用目标地址进行跳转的 jmp 指令


代码 :

assume cs:code
code segment
    start:
        mov ax, 0000H
        mov bx, 0000H
        jmp far ptr finish
        db 256 dup(0)
        ; 定义一段 256 字节的数据
        ; 这样就不能再使用 jmp short [Symbol] 这样的指令了
        ; 因为偏移已经超过了 8 位二进制数能表示的范围了
    finish:
        mov ax,4cH
        int 21H
code ends
end start

反汇编结果 :

使用目标地址进行跳转的 jmp 指令_第1张图片
反汇编.png
使用目标地址进行跳转的 jmp 指令_第2张图片
执行 jmp far ptr finish 指令之后的寄存器情况

总结 :

可以看到 :

jmp far ptr [Symbol]

该指令将会同时修改 cs 和 ip
而且 , 直接观察二进制的指令 , 可以发现 :

jmp far ptr finish
EA 0B01 500B
后面的操作数 : 
010B -> ip
0B50 -> cs

因此可以发现 :

该汇编代码在被编译器进行编译的时候
编译器会计算目标地址在运行时候的物理地址
然后使用物理地址作为 jmp 指令的操作数来进行跳转

你可能感兴趣的:(使用目标地址进行跳转的 jmp 指令)