我正在看一些汇编的实践代码,任务基本上是用一个跳点替换另一个跳点。
如果有任何说明它们之间差异的文档,我还没有找到。这里有人能帮上忙吗?
发布于 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。
发布于 2015-04-03 19:13:21
SHORT跳转:如果jmp是向前跳转,它们使用从00h到7Fh的相对偏移值,这使得程序执行可以跳转到另一个指令,它们之间最多127个字节。如果是向后跳转,它们使用从80h到FFh的相对偏移值,这使得程序执行可以跳转到另一个指令,在它们之间最多125个字节。
LONG跳转可以使用更大的偏移量。
FAR跳转,跳转到另一个代码段。
https://stackoverflow.com/questions/29430762
复制相似问题