+ -
当前位置:首页 → 问答吧 → 为何要避免这样的跳转指令?

为何要避免这样的跳转指令?

时间:2010-12-15

来源:互联网

cmp x, 1
je doIt
jne more
doIt:

more:

谢谢

作者: lianghua19   发布时间: 2010-12-15

如果不是JE就是JNE je doit
  下面直接跟 JMP MORE
 

作者: znxllyuan   发布时间: 2010-12-15

条件转移指令是短转移,也就是这条指令到目标指令间的偏移不能超过8位二进制数(-218~+127)。如果doIt标号后到more标号前的程序段比较长,超过127个字节,则jne more就会越界(无法转移)。

作者: shzhfu   发布时间: 2010-12-15

转移指令,在发生跳转时是需要额外的时序的。所以,一般地将少可能的去跳转,更可能的情况继续。
你这里就更夸张了,两个情况,竟然两度都要它跳转,这不明摆着是浪费吗。最起码可以写成:
  cmp x, 1
  jne more
doIt:
  ...
more:
  ...

如果这样的布局,哪怕是跳转的条件反置了,出现了如 #2楼 朋友所说的超出 short 类范围的问题,一般也可以通过在程序的开始处加上 .386 或更高的 cpu 级指定语句来解决,这样可以使用 near 类的跳转范围而没有了这样的限制。如果是 dos16 类的程序的话,需要在 .386 语句前加上 .model 语句。

作者: zara   发布时间: 2010-12-15

有没有人能用PIPELINE的理论来解决?
这题考察的好像是管道无效代码

作者: lianghua19   发布时间: 2010-12-15