主题:循环的一点问题
Milp
[专家分:220] 发布于 2007-07-18 20:28:00
由于循环过长,出现jump out of range错误,如何解决?
回复列表 (共5个回复)
沙发
henrya2 [专家分:590] 发布于 2007-07-18 22:51:00
你一定用的是je之类的short jump指令吧.
比较简单的解决办法是.
loop1:
.
.
.
je loop1
next:
.
.
.
改为
loop1:
.
.
.
jne next(和原来条件相反时跳出循环)
jmp loop1
next:
.
.
.
(只要将je逻辑上翻转,变成了jne,用jne(和原来条件相反)跳转到循环外, 后面跟一个jmp loop1继续循环.JB成JAE, JA变成JBE, 其他也是类似)
板凳
hkbyest [专家分:30] 发布于 2007-07-20 01:40:00
怎么这题好像和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 楼
henrya2 [专家分:590] 发布于 2007-07-20 09:54:00
不管是不是一样,我不是从CSDN上看来的.
是TASM的手册
4 楼
henrya2 [专家分:590] 发布于 2007-07-20 09:59:00
原文是:
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 楼
hkbyest [专家分:30] 发布于 2007-08-11 22:17:00
呵呵,我是说楼主问的问题,不是说你的回复。
我来回复