我无法弄清楚或找不到任何信息,为什么我在编译代码时遇到错误
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
答案 0 :(得分:1)
即使跳转距离仅为14个字节0F 8E
,编译器似乎也使用了JNG
的近跳转操作码008F->009D
。如果您明确使用JNG Short nextStep
,则应生成短跳转操作码7E
。这仅仅是效率较低的问题。它不应该影响实际结果。
答案 1 :(得分:1)
这是对低效代码的警告,而不是错误。
以下是警告意味着什么的复制粘贴说明:
JMP
指令用于跳转到short
标签(128或JMP
指令结束前的字节数减少,或127或 超出指令的字节数)。默认情况下是汇编程序 假设跳转为near
(大于short
,但仍然在一个中 分割)。如果遇到short
跳转,则masm使用短路JMP
指令的形式(2个字节)而不是long 形式(3个字节,16位段或5个字节,32位段) 发言:)。您可以通过以下方式提高代码效率 使用SHORT
运算符指定跳转为short
而不是near
。例如,使用SHORT
运算符 以下示例保存1个字节的代码:
jrrp SHORT there
there: . ; Less than 127 bytes
使用80386处理器,这也适用于有条件的 跳转,可以是短(2字节)或近(4字节)。