汇编 打印素数表

采用的是普通筛选法,建数组标记,值为1时表示素数,
在打印的时候先低位进栈再出栈输出
运行效果是这样的


汇编 打印素数表_第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

你可能感兴趣的:(汇编 打印素数表)