【发布时间】:2015-04-11 04:20:13
【问题描述】:
我理解近距离跳转只是带有立即值、寄存器或地址的偏移量。应该有远(绝对地址)跳转与立即值,寄存器或地址太对了吗? far 指令列出了 m16:16、m16:32 和 m16:64,但这些是什么意思?这是 Intel x64 手册的第 853 页。
【问题讨论】:
标签: 64-bit machine-code
我理解近距离跳转只是带有立即值、寄存器或地址的偏移量。应该有远(绝对地址)跳转与立即值,寄存器或地址太对了吗? far 指令列出了 m16:16、m16:32 和 m16:64,但这些是什么意思?这是 Intel x64 手册的第 853 页。
【问题讨论】:
标签: 64-bit machine-code
“远==绝对”并非如此;虽然所有远跳转都是绝对的,但并非所有绝对跳转都是远的(参见 FF /4,调用近绝对,可选间接)。
远跳转是绝对跳转,也写入cs,m16部分进入cs,另一部分是跳转到的地址。远跳的精确语义相当复杂。
所以可能的跳转是:
near | far
-----------------------
relative | yes | no
absolute | yes | yes
indirect | yes | yes
【讨论】:
cs,例如,如果您处于实模式并跳转到其他段中的某些代码,或者当您想要在长模式之间切换时32 位和 64 位子模式,在某些情况下离开环 0(通常这是一个很远的回报,但并非总是如此)