masm中的长循环

时间:2017-06-15 04:46:44

标签: assembly

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"仍然超出范围。

为什么有可能?

1 个答案:

答案 0 :(得分:3)

loop操作码仅限于程序计数器(PC)的一个字节符号位移。条件跳转也有此限制(至少在16位代码中)。无条件跳转不限于一个字节的位移,因此宏中的jmp操作码可以达到它们所需的范围。