使用偏移进行跳转的 jmp 指令


assume cs:code
code segment
    start:
        mov ax,0000H
        jmp short finish
        ; 该指令( inc ax )占用一个字节 , 接下来就是 finish 标号
        ; 因此 jmp 的操作的操作数为 inc ax 指令的长度 : 也就是 1
        inc ax
    finish:
        mov ax,4cH
        int 21H
code ends
end start
使用偏移进行跳转的 jmp 指令_第1张图片
Paste_Image.png
assume cs:code
code segment
    start:
        mov ax,0000H
        jmp short finish
        ; jmp 采用偏移的方式来进行跳转 , 这里存在两个 inc ax
        ; 也就是 两个 字节 , 因此 jmp 指令的操作数就是 2
        inc ax
        inc ax
    finish:
        mov ax,4cH
        int 21H
code ends
end start
使用偏移进行跳转的 jmp 指令_第2张图片
Paste_Image.png

根据上面两个例子可以看出 :

jmp short [symbol]

该指令在编译的时候 , 编译器会将该指令的的操作数直接通过计算替换为目标地址到当前地址的偏移
也就是让 ip 自增偏移的大小
也就是说 :

(ip) = (ip) + 8位偏移
8位数偏移的范围是 : -128~127
属于 : 段内短转移

还有一条和 jmp short [symbol] 相近的指令 :

jmp near ptr [symbol]
(ip) = (ip) + 16位偏移
16位数偏移的范围是 : -32768~32767
属于 : 段内近转移

你可能感兴趣的:(使用偏移进行跳转的 jmp 指令)