主题:哪位大哥 帮小弟编求 0~5000 以内的素数
xuanlanzhi
[专家分:0] 发布于 2006-01-04 13:35:00
哪位大哥 帮小弟编求 0~5000 以内的素数!!!
回复列表 (共2个回复)
沙发
erping [专家分:3660] 发布于 2006-01-05 11:38:00
;没有进行优化
;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
板凳
xuanlanzhi [专家分:0] 发布于 2006-01-05 19:06:00
谢谢楼上这位大哥了!!!
我来回复