首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MASM误差的划分--短距离跳跃

MASM误差的划分--短距离跳跃
EN

Stack Overflow用户
提问于 2014-05-28 14:21:17
回答 2查看 450关注 0票数 1

我无法找出编译代码时出错的原因,也找不到任何信息。

代码语言:javascript
复制
loop1:
mov edx, 0 ; reset EDX which contains the remainder
XOR ECX,  ECX   ;reset ECX
MOV EDX, EAX
MOV EBX, NUM2   ;num2 = 10, so copy 10 to EBX
CMP EAX, EBX
JNG nextStep
Division:
    SUB EAX, EBX    ; EAX-10
    INC ECX
    CMP EAX, EBX
    JG Division
nextStep:
MOV EDX, EAX        ;move reminder to EDX
MOV EAX, ECX        ;move result of division to EAX
push dx ; save it to stock so to display int he proper order
inc count ; count how many pushes of stack
cmp Eax,0 ; check if the div ends
JL loop1

我从编译器获得的错误是:

代码语言:javascript
复制
 008F  0F 8E 009D R                     JNG nextStep
 fib2.ASM(67): warning A5104: Jump within short distance

  49798 + 451946 Bytes symbol space free

  1 Warning Errors
  0 Severe  Errors
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 14:46:17

编译器似乎为JNG使用了近跳操作码JNG,尽管跳转距离008F->009D只有14字节。如果您显式使用JNG Short nextStep,则应该生成短跳操作码7E。这只是一个效率较低的问题。它不应影响实际结果。

票数 1
EN

Stack Overflow用户

发布于 2014-05-28 14:46:49

这是对低效代码的警告,而不是错误。

下面是对警告含义的一种复制的解释:

JMP指令被用来跳到short标签(在JMP指令结束之前的128个字节或更少的字节,或者在指令之后的127个或更少的字节)。默认情况下,汇编程序假定跳转为near (大于short,但仍在一个段中)。如果遇到short跳转,masm使用JMP指令的短形式(2字节),而不是长表单(3字节,16位段或5字节,32位段)。通过使用SHORT操作符来指定跳转是short而不是near,可以使代码稍微高效一些。例如,在下面的示例中使用SHORT操作符可以保存1字节的代码: jrrp SHORT there there: . ; Less than 127 bytes 对于80386处理器,这也适用于条件跳转,条件跳转可以是短的(2字节),也可以是近的(4字节)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23914286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档