使用目标地址进行跳转的 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

反汇编结果 :

反汇编.png
执行 jmp far ptr finish 指令之后的寄存器情况

总结 :

可以看到 :

jmp far ptr [Symbol]

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

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

因此可以发现 :

该汇编代码在被编译器进行编译的时候
编译器会计算目标地址在运行时候的物理地址
然后使用物理地址作为 jmp 指令的操作数来进行跳转
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容