典型的以空间换时间算法,由于用了除法和内嵌循环,速度非常不理想,哪位改进下,方便做成黑盒过程,呵呵。
;程序的描述:Eratosthenes筛法,筛选指定范围内的素数。
;作者:落叶树
;创建日期:15:24 2007-8-6
;版本:
INCLUDE Irvine32.inc

.data
count=65000 ;指定范围,1-65000内的素数。
array dword count dup (0)
.code
main PROC
mov ecx,count
mov esi,1 ;从1开始生成数组
mov ebx,0
L1:
mov array[ebx],esi
inc esi
add ebx,4
loop L1 ;生成1-count的数组完毕。

mov ecx,count
mov esi,0
L2:
push ecx
cmp array[esi],1 ;用1作为标记,是1跳过。
je L2end
mov edi,esi
L3:
mov edx,0
mov eax,array[edi+4]
div array[esi]
.if edx==0
mov array[edi+4],1 ;能被除本身外素数整除的用1作为标记
.endif
add edi,4
loop L3

L2end:
pop ecx
add esi,4
Loop L2 ;L2循环完成筛选。

mov ecx,count
mov esi,0
L5:
cmp array[esi],1
je L5end
mov eax,array[esi]
call WriteDec
mov al,' '
call WriteChar
L5end:
add esi,4
loop L5 ;显示数组里的素数。


call Crlf
exit
main ENDP
;其他子程序

END main