采用的是普通筛选法,建数组标记,值为1时表示素数,
在打印的时候先低位进栈再出栈输出
运行效果是这样的
不知道怎么调缓冲区大小所以这个素数表不能往上翻......
由于是练习加上学汇编不久,代码有点糟糕,不过还是分享一下
.model small
.data
MAX dw 10000 ;打印范围
num db 11000 dup(1)
maxsi dw 0
.code
main proc far
mov ax,@data
mov ds,ax
mov ax,MAX
mov maxsi,ax
mov dx,offset num
mov si,dx
add si,2
mov cl,1
mov [si],cl
add maxsi,si
mov bx,1
dec si
next:
inc si
cmp si,maxsi
ja L3
inc bx
mov ax,[si]
cmp ax,0
jz next
L1:
add si,bx
cmp si,maxsi
ja L2
mov cl,0
mov [si],cl
jmp L1
L2:
mov si,dx
add si,bx
jmp next
L3:
mov si,offset num
add si,1
mov bx,1
L4:
inc si
inc bx
cmp bx,MAX
ja L7
mov cl,[si]
cmp cl,0
jz L4
mov dx,' '
push dx
mov ax,bx
cwd
L5:
mov cx,10
div cx
push dx
cwd
cmp ax,0
jnz L5
mov ah,02h
again:
pop dx
cmp dx,' '
jz L6
add dl,'0'
int 21h
jmp again
L6:
int 21h
jmp L4
L7:
mov ax,4c00h
int 21h
main endp
end