我有以下用于查找素数的代码:
isPrime PROC; checks if a number is prime by dividing out values less than it until it finds one that has a remainder of 0
;or the test value reaches the number
retest:
inc testNum
mov eax, testPrime
cmp eax, testNum
je prime
mov edx, 0
mov eax, testPrime
mov ebx, testNum
div ebx
cmp edx, ZERO
jg retest
mov eax, 1
mov testNum, eax
inc testPrime
prime:
ret
isPrime ENDP
它应该工作的方式是 testPrime 是被测试的数字。然后它检查 testNum,它从 2 开始(开始时为 1,但立即递增)并将 testPrime 除以 testNum。如果余数为零,则除以,并且 testPrime 不是质数。testPrime 增加,testNum 被重置,整个事情重新开始。如果 testPrime 和 testNum 相等,那么它是一个素数,并且过程退出(这导致程序的另一部分打印它,并在增加 testPrime 后再次调用该过程)。
正在发生的事情是它正在打印从 2 到请求多个素数的每个整数。我已经进行了一些调试,似乎 edx 以某种方式获得了一个非常大的数字,但我不知道如何。