Сборка x86, как использовать инструкцию DIV и l oop, чтобы проверить, является ли целое число простым - PullRequest
0 голосов
/ 28 апреля 2020

Я создал процедуру, которая будет печатать все простые числа вплоть до пользовательского ввода. Однако некоторые выходные значения не являются простыми, например 15, 21 и т. Д. c. Если я начну программу с 15, она не будет выводиться как простое, поэтому это должен быть мой сегмент DIV или l oop. Любая помощь очень ценится.

.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

1 Ответ

2 голосов
/ 28 апреля 2020

Вы меняете iStart при проверке простого числа, но никогда не сбрасываете его обратно на 3 для следующей проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...