例如:
jmp LABEL
... # loads of instructions
jmp LABEL
.... # loads of instructions
LABEL:
.....
如果没有jmp LABEL
指令的大小,则无法确定LABEL的地址,因为两种形式的jmp指令(短(2字节),近(3或5字节))具有不同的大小。鉴于不知道LABEL的地址,您无法确定使用哪种表格。
汇编程序如何解决它?
答案 0 :(得分:7)
这取决于您使用的汇编程序的类型。一个简单的2遍汇编程序(如MASM)使它成为您的问题。他们会选择一个跳远,你必须明确地写JMP SHORT LABEL
以获得短跳。当你猜对了,就婊子对你说。
优化的n-pass汇编程序(如TASM)自行对其进行排序。它假定短跳,如果它发现它无法达到,那么它会重新开始组装,现在是一个长跳跃。
您可以轻松辨别出您的口味。只要查看它生成的代码列表,如果你得到5字节的长跳跃,那么就有2遍传递。
答案 1 :(得分:1)
你总是可以使用5个字节(操作码+远地址),所以这就是汇编程序初始化的地方。 之后它运行(可能多次)减少算法,看它是否可以改善代码。一旦它看到没有任何改进就可以停止并且代码完成。