0
我编写GreatCommonDivisor并使用已声明ret的repeat....until
,但发现它仍然进入repeat ..... until
并导致除零错误。程序执行'ret'但不执行它
我觉得ret
弹出呼叫者下一行的地址,但是为什么它跳到了repeat...until
?
ps:eax is dividend and ebx is divisor.
Thx提前。
INCLUDE Irvine32.inc
.data
.code
main PROC
mov eax, 75
mov ebx, 18
call gcd
main ENDP
gcd PROC
or eax,eax;set SF
.IF Sign?
Neg eax
.Else
.EndIf
or ebx,ebx;set SF
.IF Sign?
Neg ebx
.Else
.EndIf
.Repeat
mov edx, 0
div ebx
mov eax, ebx
mov ebx, edx
.Until ebx <= 0
call WriteInt
ret
gcd ENDP
END main
它做工精细,当我改变它,但是为什么订单会有如此不同的序列? – 2013-04-24 15:07:03
你的'main'不是以'ExitProcess'调用或'ret'结束的,所以它只会继续执行它后面的任何内容(在原始版本中是'gcd')。为了完全正确,你应该使用'调用ExitProcess,0'来退出到Windows。 – Michael 2013-04-24 15:19:06