【发布时间】:2016-11-23 12:23:09
【问题描述】:
考虑汇编中的简单跳转指令 (jmp),其中目标是预定义的标签。
jmp destination
根据 Kip Irvine 的“x86 处理器的汇编语言”,当 CPU 执行无条件传输时,destination 的偏移量被移动到指令指针中。
有人能解释一下吗,因为我认为我们要跳转的地址必须移到指令指针中?
【问题讨论】:
-
“我们要跳转到的地址”和“目的地的偏移量(地址)”有什么区别?
-
那么,存储在指令指针中的绝对地址是不是另一个值的偏移量?
-
IIRC IP中的值是codesegment的地址+jmp-label的地址。情况总是如此。所以在我们这个时代,这可能已经自动完成了,但在以前这意味着:地址,代码段开始的地方 + jmp 标签的地址(因此是单词偏移量)。
-
x86 是一种分段架构。虽然在长模式中分割被强制为平面模型,但机制仍然存在。因此,从技术上讲,
ip/eip/rip始终包含逻辑(段:偏移)地址的偏移部分。实际上,由于段从 0 开始,因此偏移量也是线性地址。不要与立即数中编码的偏移量混淆,这是添加到 IP 的当前值以达到目标的数字。 -
您可以编辑您的问题以包含书中的引文吗?没有上下文,很难回答这个问题