首页 文章

在引用jmp指令后,x86的声明如何获得标签的地址?

提问于
浏览
7

例如:

jmp LABEL

...  # loads of instructions

jmp LABEL

.... # loads of instructions

LABEL:

.....

如果没有 jmp LABEL 指令的大小,LABEL的地址可以't be determine because the two forms of jmp instruction (short (2 Bytes), near (3 or 5 Bytes)) have different size. Whereas, without knowing about LABEL'的地址,则无法确定使用哪种形式 .

汇编程序如何解决它?

2 回答

  • 7

    你总是可以使用5个字节(操作码远地址),所以这就是汇编程序初始化的地方 . 之后它运行(可能多次)缩减算法,看它是否可以改进代码 . 一旦它看到没有任何改进可能会停止并且代码完成 .

  • 1

    这取决于您使用的汇编程序的类型 . 一个简单的2遍汇编程序(如MASM)使它成为您的问题 . 他们会选择一个长跳,你必须明确地写 JMP SHORT LABEL 来获得短期的 . 当你猜错时,婊子对你 .

    优化的n-pass汇编器(如TASM)自行对其进行排序 . 它假定短跳,如果它发现它无法到达那么它重新开始组装,现在有一个长跳 .

    你可以很容易地说出你有什么样的味道 . 只要查看它生成的代码列表,如果你得到5字节的长跳跃,那么你就有了2遍的类型 .

相关问题