汇编 打印素数表

采用的是普通筛选法,建数组标记,值为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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容