【问题标题】:x64 Jump instructionsx64 跳转指令
【发布时间】:2015-04-11 04:20:13
【问题描述】:

我理解近距离跳转只是带有立即值、寄存器或地址的偏移量。应该有远(绝对地址)跳转与立即值,寄存器或地址太对了吗? far 指令列出了 m16:16、m16:32 和 m16:64,但这些是什么意思?这是 Intel x64 手册的第 853 页。

【问题讨论】:

    标签: 64-bit machine-code


    【解决方案1】:

    “远==绝对”并非如此;虽然所有远跳转都是绝对的,但并非所有绝对跳转都是远的(参见 FF /4,调用近绝对,可选间接)。

    远跳转是绝对跳转,也写入cs,m16部分进入cs,另一部分是跳转到的地址。远跳的精确语义相当复杂。

    所以可能的跳转是:

              near | far
    -----------------------
    relative | yes |  no
    absolute | yes | yes
    indirect | yes | yes
    

    【讨论】:

    • 说我要跳转到0x1000,m16我要放什么??
    • @RyanBrown 什么都没有,如果你只想跳转到 0x1000,那么使用近跳转。跳远适合特殊场合。
    • 近跳转是当前指令的偏移量,对吧?如果我想跳到 0x1000 那不是远(绝对)跳吗??
    • 你什么时候需要出于好奇而跳远?
    • @RyanBrown 任何时候您需要更改 cs,例如,如果您处于实模式并跳转到其他段中的某些代码,或者当您想要在长模式之间切换时32 位和 64 位子模式,在某些情况下离开环 0(通常这是一个很远的回报,但并非总是如此)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多