回 帖 发 新 帖 刷新版面

主题:循环的一点问题

由于循环过长,出现jump out of range错误,如何解决?

回复列表 (共5个回复)

沙发

你一定用的是je之类的short jump指令吧.
比较简单的解决办法是.
loop1:
      .
      .
      .
je loop1
next:
      .
      .
      .

改为
loop1:
      .
      .
      .
jne next(和原来条件相反时跳出循环)
jmp loop1
next:
    .
    .
    .
(只要将je逻辑上翻转,变成了jne,用jne(和原来条件相反)跳转到循环外, 后面跟一个jmp loop1继续循环.JB成JAE, JA变成JBE, 其他也是类似)

板凳

怎么这题好像和CSDN上的一样啊,
http://community.csdn.net/Expert/topic/5662/5662383.xml?temp=.9513971
mov cx,??
loop1:
.
.
.
dec cx 
cmp cx,0 
jne lp  
jmp next
lp:
jmp near ptr loop1
next:
.
.
.

3 楼

不管是不是一样,我不是从CSDN上看来的.
是TASM的手册

4 楼

原文是:
JUMPS            Stretches Conditional Jumps                   TASM Directive

  JUMPS

     The JUMPS directive enables automatic conditional jump extending in
     TASM. If the target of a conditional jump is out of range, TASM
     converts the jump into a local jump/JMP pair. For example:

                JE      EQUAL_PLACE
     becomes:
                JNE     @@A
                JMP     EQUAL_PLACE
                @@A:

5 楼

呵呵,我是说楼主问的问题,不是说你的回复。

我来回复

您尚未登录,请登录后再回复。点此登录或注册