jmp指令可以在-128字节~127字节之间跳转 因此,当我想要jmp超出范围时,汇编书说"使用长循环" 和它的代码
LongLoop macro dest
local A1, A2
loop A1
jmp A2
A1:
jmp dest
A2:
endm
并像这样使用LongLoop
mov ecx, 100
L1:
....
....
LongLoop L1
我认为代码更改
mov ecx, 100
L1:
....
....
jmp A2
A1:
jmp L1
A2:
我想知道" jmp L1"是可能的。
如果使用循环而不是LongLoop,"循环L1"跳到L1。 使用LongLoop的原因是"循环L1"因为超出范围而无法跳转到L1。 我想当我使用LongLoop时," jmp L1"仍然超出范围。
为什么有可能?
答案 0 :(得分:3)
loop
操作码仅限于程序计数器(PC)的一个字节符号位移。条件跳转也有此限制(至少在16位代码中)。无条件跳转不限于一个字节的位移,因此宏中的jmp
操作码可以达到它们所需的范围。