2014-09-19 4 views
0

Я пытаюсь напечатать простые числа от 1-100 в сборке, но не только мой код печатает лишние цифры, но также исключает некоторые простые числа.Печать простых номеров в сборке

Вот моя основная процедура:

mov min, 1 

loopStart: 
    inc min     ; min++ 
    mov eax, min 
    cmp eax, max    ; compare 2 and 100 
    je next     ; jump unless 2 < 100 

    call isPrime    ; check if prime 
    cmp ecx, 0 
    jne loopStart 
push eax 
    call printPrime   ; print the prime numbers 
pop eax 
    jmp loopStart 

    next:      ; once max is 100 

    push 0       
    call ExitProcess 

И мой IsPrime является:

mov prime, 0     ; set as true 
mov ecx, prime     
mov k, 2      ; reset k 

mov edx, 0     ; clear edx 
div num      ; n/2 
mov edx, 0     ; clear edx again 

start: 
cmp ecx, 0     ; while prime 
jne E      ; if prime isnt true 

cmp eax, k     ; k<=n/2 
jl E 

mov eax, min 
div k 
cmp edx, 0     ; check for remainder 
jne kAdd 

mov prime, 1     ; set as false 
jmp E 

kAdd: 
inc k 
jmp start 

E: 
mov ecx, prime 
mov eax, min 

ret 
isPrime endp 

Он печатает: 2 3 5 7 13 15 19 21 25 31 33 37 39 43 49 51 55 57 61 63 67 73 75 79 81 85 91 93 97 99

Является ли тот факт, что большинство дополнительных чисел делятся на 3, 5 и 7 (все простые числа), связаны с чем-то?

+1

Какая отладка вы сделали до сих пор? Вы пробовали однопоточность в отладчике, чтобы узнать, что происходит, когда он сообщает о некорректном простом? – Barmar

ответ

0

Вы не правильно перезагрузите EDX внутри петли в isPrime. То есть, до div k вам нужно поставить mov edx,0 или xor edx,edx.

Кроме того, я не знаю, где num происходит в div num в начале функции (?). В комментарии говорится, что вы разделите на 2, так вы имели в виду div k?

И в вашей программе есть лишний код. Как этот чек:

cmp ecx, 0     ; while prime 
jne E      ; if prime isnt true 

Если вы посмотрите на остальной части кода должно стать ясно, что ECX никогда не будет иметь никакого другого значения, чем ноль в этой точке.

0

Вы забыли очистить edx, когда вы увеличиваете k при k = k + 1

Смежные вопросы