认真理解Eratosthenes筛选法快速求素数个数的算法,编写求10万内共有多少个素数的程序(教材习题4.30),并显示素数个数值。
;430.asm
include io32.inc
.data
array byte 100001 dup(30h)
.code
start:
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 ;记录素数的个数加1
s2:
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