x86 汇编如何使用 DIV 指令和循环来检查整数是否为素数

x86 Assembly how to use DIV instruction and loop to check if integer is prime

我创建了一个程序,可以打印用户输入的所有质数。但是,一些输出值不是质数,例如 15、21 等。如果我以 15 开始程序,它不会将其输出为质数,因此它必须是我的 DIV 段或循环。非常感谢任何帮助。

.code
main proc



mov ecx, 18             ;ecx is the loop counter
mov eax, 2              ;assume 2 is prime
L1:
    inc eax             ;start with value 3
    call isPrime
    loop L1


invoke ExitProcess,0
main endp

isPrime PROC          ;Procedure
push eax
push ecx
mov valEntered, eax
mov ogCounter, ecx


mov edx, 0            ;check if 
                      ;value divisible by 2
mov eax, eax
div divisor0          ;divisor0 = 2
mov eax, edx
cmp eax, 0
jz no   


mov ecx, valEntered         ;ecx loop 
                            ;counter

L2:              ;check if 
                 ;value divisible by >= 3
mov eax, iStart  ;iStart = 3
mul iStart
cmp valEntered, eax
jl yes

mov edx, 0
mov eax, valEntered
div iStart      ;iStart = 3
mov eax, edx
cmp eax, 0
jz no       
add iStart, 2   ;iStart += 2
loop L2
jmp no


yes:                ;output prime number
mov eax, valEntered
call WriteInt
call Crlf
mov ecx, ogCounter
pop ecx
pop eax
ret

no:                ;continue to next int
mov ecx, ogCounter
pop ecx
pop eax
ret

isPrime ENDP
end main

您在检查质数时更改了 iStart,但在下一次检查时从未将其重置回 3。