例如:
jmp LABEL
... # loads of instructions
jmp LABEL
.... # loads of instructions
LABEL:
.....
Run Code Online (Sandbox Code Playgroud)
如果没有jmp LABEL指令大小,则无法确定LABEL的地址,因为两种形式的jmp指令(短(2字节),近(3或5字节))具有不同的大小.鉴于不知道LABEL的地址,您无法确定使用哪种表单.
汇编程序如何解决它?
这取决于您使用的汇编程序的类型.一个简单的2遍汇编程序(如MASM)使它成为您的问题.他们会选择一个长跳,你必须JMP SHORT LABEL明确写出来获得短期跳远.当你猜错了时,婊子骂你.
优化的n-pass汇编器(如TASM)自行对其进行排序.它假定短跳,如果它发现它无法到达那么它重新开始组装,现在有一个长跳.
你可以很容易地说出你有什么样的味道.只要查看它生成的代码列表,如果你得到5字节的长跳跃,那么你就有了2遍的类型.
您始终可以使用 5 个字节(操作码 + 远地址),因此这就是汇编器最初执行的操作。然后它运行(可能多次)缩减算法以查看是否可以改进代码。一旦发现无法改进,它就会停止并完成代码。
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |