【问题标题】:Difference between long and short jump (x86)长跳和短跳的区别(x86)
【发布时间】:2015-06-01 16:19:45
【问题描述】:

我读过地址的相对跳转小于124时要使用短跳转,否则应该使用长跳转。

x86 上这两种跳转类型在在 CPU 中执行的操作/性能方面有什么区别

【问题讨论】:

  • 你找不到任何关于这个非常有据可查的 CPU 的单独指令的文档?
  • 英特尔手册可以在here 找到(PDF 警告)。在卷中寻找 3-440。参考图2A,它详细描述了JMP。近跳和远跳在同一个文档中进行了介绍。您可以衡量的绩效差异,或参考拥有的人的努力,例如Agner Fog's page.
  • @Jongware 我真的做不到。谢谢迈克尔。由于我找不到文档,如果您能说出您在哪里寻找它,以便在以后的情况下我可以自己找到它,我将不胜感激。我的意思主要是你怎么知道答案在那里
  • 短跳转节省指令长度。

标签: assembly x86 cpu instructions machine-instruction


【解决方案1】:

JMP 指令实际上有三种类型;短、​​近、远(长)。

简短的JMP 是您所指的相对JMP。它被编码为两个字节;实际的JMP 和相对于当前 IP 的字节数 +/-。

near jump 允许您在当前“段”(使用实模式术语)或 CS 选择器中当前选定的内存区域内跳转。

long 或 Far JMP 还包括一个选择器(或实模式下的段)

您可以自己查看时间安排。与时间相关的最大差异是由完成JMP所必须读取的字节数不同造成的。

【讨论】:

  • 这个选择器是什么以及这个选择器在实践中是如何出现的?据我了解,我只是提供一个地址
  • 地址由选择器和偏移量组成。如 CS:1234。 CS 用于在保护模式下定义 GDT 或 LDT 之外的选择器。它通常很小,特别是与实模式分段内存相比,因为它只是从表中选择一个条目而不是定义实际的内存地址。内存地址在 GDT/LDT 中定义。
  • 我应该补充一下,无论您是处于实模式还是受保护模式,它实际上看起来都是一样的......它是实际值在引擎盖下的不同以及预先完成的工作来设置GDT(在实模式下不需要,因为您使用的是分段内存)
猜你喜欢
  • 2020-10-12
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2015-01-20
相关资源
最近更新 更多