Я пишу 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
Он работает хорошо, когда я могу изменить его, но почему порядок будет такой другой последовательности? –
Ваш 'main' не заканчивается вызовом' ExitProcess' или 'ret', поэтому он будет продолжать выполнять все, что приходит после него (что было' gcd' в исходной версии). Чтобы быть полностью правильным, вы действительно должны использовать 'invokeProcess, 0' для выхода из Windows. – Michael