首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组件中的远距离跳跃和远距离跳跃之间有什么区别?

问组件中的远距离跳跃和远距离跳跃之间有什么区别?
EN

Stack Overflow用户
提问于 2015-04-03 18:50:26
回答 2查看 15.1K关注 0票数 9

我正在看一些汇编的实践代码,任务基本上是用一个跳点替换另一个跳点。

如果有任何说明它们之间差异的文档,我还没有找到。这里有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-03 18:54:13

我假设您的问题与x86架构有关;您还没有在您的问题中指定。

SHORT跳转是从当前指令指针地址到特定偏移量的跳转。LONG跳转可以使用更大的偏移值,因此可以跳转到离当前指令指针地址更远的地方。这两种跳转类型通常都是相对的-即操作数是当前指令指针的偏移量(虽然在汇编源中,通常提供目标标签-然后由汇编器或链接器计算偏移量)。它们都不会跳转到不同的代码段,所以它们都是“接近”的跳转。

FAR跳转指定段和偏移量,两者都是绝对的,因为它们指定了所需的代码段和指令指针,而不是相对于当前代码段/指令指针的偏移量。

总而言之,有三种类型的直接跳转: short和long,它们都是能够在同一代码段上跳转不同相对距离的近距离跳转,以及远跳转,它可以跳转到任何绝对地址(段和偏移量)。

(请注意,也可以执行间接绝对跳转,其中指定一个操作数,该操作数保存您希望跳转到的绝对地址。在这种情况下,跳转可以是近的,也可以是远的-即它可以包括或不包括所需的代码段)。

如果你没有指定跳转'distance',那么你得到的是短跳跃、长跳跃还是远跳跃都取决于汇编器。大多数现代汇编器都是“两遍”的,如果可能,会使用短跳转,否则会使用长跳转或远跳转--后者仅在需要时使用。

如果你需要帮助来理解我所说的“细分”是什么意思,请访问wikipedia's entry on x86 memory segmentation。

有关可能的this description of the x86 JMP instruction指令寻址模式的完整详细信息,请参见JMP。

票数 22
EN

Stack Overflow用户

发布于 2015-04-03 19:13:21

SHORT跳转:如果jmp是向前跳转,它们使用从00h到7Fh的相对偏移值,这使得程序执行可以跳转到另一个指令,它们之间最多127个字节。如果是向后跳转,它们使用从80h到FFh的相对偏移值,这使得程序执行可以跳转到另一个指令,在它们之间最多125个字节。

LONG跳转可以使用更大的偏移量。

FAR跳转,跳转到另一个代码段。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29430762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档