用于查找素数的MASM代码不起作用

时间:2013-08-04 19:34:47

标签: assembly masm

我有以下代码来查找素数:

   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在某种程度上得到了一个非常大的数字,但我不知道如何。

2 个答案:

答案 0 :(得分:0)

管理修复它。由于我调试断点的位置不佳,我没有意识到edx寄存器正在被正确使用。但是,我的代码中还存在另外两个问题。

工作代码如下。注意在prime:标记之前的新jmp命令,以及在返回之前新的testNum重置。

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
mov eax, edx
cmp eax, ZERO
jg retest
mov eax, 1
mov testNum, eax
inc testPrime
jmp retest
 prime:
mov eax, 1
mov testNum, eax
ret
isPrime ENDP

答案 1 :(得分:0)

data segment

 ddd db 00h,00h,00h

ends

stack segment
    dw   128  dup(0)
ends

code segment

proc zzz
push ax
push dx 
push bx    
lea di,ddd
mov bx,10  
div bl
mov ds:[di+2],ah
add ds:[di+2],48
mov ah,0
div bl
mov ds:[di+1],ah
add ds:[di+1],48
mov ah,0
div bl
mov ds:[di],ah
add ds:[di],48 
mov ah, 2
mov dx,ds:[di]
int 21h
mov dx,ds:[di+1]
int 21h
mov dx,ds:[di+2]
int 21h 
pop bx
pop dx
pop ax
ret
endp
start:

mov ax,@data
mov ds,ax
mov es,ax

mov si,03d
mov di,50d 
wwww:mov ax,si
mov bp,si
sub bp,2       
mov bx,01h
mov cx,2     
fff:mov dx,00h
push ax
div cx 
pop ax
cmp dx,00 
je sss
jmp con1
sss:mov bx,00h 
con1:inc cx
dec bp
jnz fff    
cmp bx,01h
je xxxx
jne mmmm
xxxx:call zzz
mmmm:inc si
cmp si,50d
je bbb
jmp wwww
bbb:ends 

ends

end start
相关问题