x64 跳转指令

x64 Jump instructions

我理解 near jumps 只是用立即值、寄存器或地址进行偏移。应该有直接值、寄存器或地址的远(绝对地址)跳转,对吗?远指令列表 m16:16、m16:32 和 m16:64 但这些是什么意思?这是 Intel x64 手册的第 853 页。

事实并非如此"far == absolute";虽然所有的远跳都是绝对的,但并非所有的绝对跳都是远的(参见 FF /4,调用近绝对,可选地间接)。

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

所以可能的跳转是:

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