回 帖 发 新 帖 刷新版面

主题:哪位大哥 帮小弟编求 0~5000 以内的素数

哪位大哥 帮小弟编求 0~5000 以内的素数!!!

回复列表 (共2个回复)

沙发

;没有进行优化
;2006-1-5
;求 0~5000 以内的素数


.model tiny

.code
            org        100H
_main:
            mov        ax, 2
            mov        cx, 10
            call    print    ;输出特例 2
            mov        dl, ' '
            mov        ah, 2
            int        21H

            mov        bx, 7    

            mov        si, 3
    @:
            mov        di, 2
    @0:
            mov        ax, si
            cwd
            div        di
            test    dx, dx
            jz        @1

            inc        di
            cmp        di, si
            jl        @0
            mov        ax, si
            mov        cx, 10
            call    print

            dec        bx
            test    bx, bx
            jnz        @@1
            mov        dl, 0DH
            mov        ah, 2
            int        21H
            mov        dl, 0AH
            mov        ah, 2
            int        21H
            mov        bx, 8    ;每行输出 8 个质数
            jmp        @1
    @@1:
            mov        dl, ' '
            mov        ah, 2
            int        21H
    @1:
            add        si, 2
            cmp        si, 5000
            jle        @
            
            mov        ax, 4C00H
            int        21H
print    proc ;提供多种进制的输出
        ;ax 存放要输出的数
        ;cx 存放进制形式 (2 <= 进制 <= 35)
    cmp    cx, 2    
    jl    _error_
    cmp    cx, 35
    ja    _error_
    push    bx    ;保存 bx
    push    dx    ;...
    sub    sp, 16    ;16 (2 * 8)个字节的临时变量
    mov    bx, sp  ;bx 指向变量地址
    xor    dx, dx
_loop:
    cmp    ax, 0
    jne    _next
    cmp    dx, 0
    je    _print
_next:
    div    cx
    cmp    dx, 9        ;比较余数是否大于 9
    ja    _than_nine
    add    dl, '0'
    jmp    _save_dl
_than_nine:
    add    dl, 'A' - 0AH    ;大于 9 的数转换处理
_save_dl:
    mov    ss:[bx], dl
    inc    bx
    cwd
    jmp    _loop
_print:
    dec    bx
_print_next:
    cmp    bx, sp
    jl    _end
    mov    dl, ss:[bx]
    mov    ah, 2
    int    21H
    dec    bx
    jmp    _print_next
_error_:
    xor    ax, ax    ;return false
    ret
_end:
    add    sp, 16    ;恢复堆栈
    pop    dx
    pop    bx
    
    mov    ax, 1    ;return true
    ret
print    endp
end    _main

板凳

谢谢楼上这位大哥了!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册