1. 程式人生 > >Eratosthenes篩法求1——100000之間所有的素數(32位組合語言)

Eratosthenes篩法求1——100000之間所有的素數(32位組合語言)

include io32.inc .dataarray byte 100001 dup(30h) .codestart:mov esi,2 ;用來記錄某數,方便以後找所有可以被其整除的數xor edi,edi ;用來記錄素數的個數 mov ebx,offset array ;ebx為陣列array的指標 mov ecx,99998 ;ecx記錄總數outlp: cmp byte ptr [ebx+esi],30h ;判斷eax是否被標記為非素數 jne s3 mov edx,esi add edi,1 ;記錄素數的個數加1s2: add edx,esi ; 即可以在以後找出其1、2、3……倍的所有數字 cmp edx,100000 jg s3 mov array[edx],31h ;找出所有被整除的數,並把它標記為1 jmp s2 s3: inc esi loop outlp ;ecx<-ecx-1 mov eax,edi ;輸出素數的個數 call dispsid exit 0 end start