我无法找出编译代码时出错的原因,也找不到任何信息。
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我从编译器获得的错误是:
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发布于 2014-05-28 14:46:17
编译器似乎为JNG使用了近跳操作码JNG,尽管跳转距离008F->009D只有14字节。如果您显式使用JNG Short nextStep,则应该生成短跳操作码7E。这只是一个效率较低的问题。它不应影响实际结果。
发布于 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 therethere: . ; Less than 127 bytes对于80386处理器,这也适用于条件跳转,条件跳转可以是短的(2字节),也可以是近的(4字节)。
https://stackoverflow.com/questions/23914286
复制相似问题