汇编输出前30个素数
答案:3 悬赏:30 手机版
解决时间 2021-06-05 13:31
- 提问者网友:几叶到寒
- 2021-06-04 14:19
汇编编程输出前30个素数,不会啊,谁帮帮我
最终程序啊
最佳答案
- 五星知识达人网友:像个废品
- 2021-06-04 15:11
code segment
assume cs:code
start:
mov cx,0 ;计数
mov ax,2
mov bx,2
next:
cmp bx,ax
jl continue
inc cx
call display
cmp cx,30
jz exit
jmp nextnum
continue:
xor dx,dx
push ax
div bx
pop ax
inc bx
cmp dx,0
jnz next
nextnum:
inc ax
mov bx,2
jmp next
exit:
mov ah,4ch
int 21h
display proc near
push ax
push bx
push cx
push dx
xor cx,cx
mov bx,10
continue1:
xor dx,dx
div bx
push dx
inc dx
inc cx
cmp ax,0
jnz continue1
continue2:
pop dx
add dl,30h
mov ah,2
int 21h
loop continue2
mov dl,' '
mov ah,2
int 21h
pop dx
pop cx
pop bx
pop ax
ret
display endp
code ends
end start
运行结果输出:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
全部回答
- 1楼网友:话散在刀尖上
- 2021-06-04 16:27
好高深啊,学习下了,做个标记不行吗大哥。。。
pop dx
add dl,30h
mov ah,2
int 21h
- 2楼网友:封刀令
- 2021-06-04 15:31
; 256以内的素数,显示输出前30个
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 判断素数
; 入口参数:AL=256以内无符号整数
; 返回参数:若AL是素数,进位标志置位;否则,清位
Estimation Proc Near
push si
push cx
push ax
lea si,PrimeLess
cmp al,1
jz @@Not_Prime ;1不是素数
mov cx,4
@@Less_Prime:
cmp al,[si]
jz @@Yes_Prime ;2、3、5、7是素数
inc si
loop @@Less_Prime
test al,1
jz @@Not_Prime ;除了2,其它偶数不是素数
lea si,PrimeLess[1]
mov cx,3
@@Divide357:push ax
div byte ptr [si]
test ah,ah
jnz $+5
pop ax
jmp @@Not_Prime
pop ax
inc si
loop @@Divide357
jmp $+5
@@Not_Prime:clc ;不是素数,清进位标志
jmp $+3
@@Yes_Prime:stc ;是素数,置进位标志
pop ax
pop cx
pop si
ret
PrimeLess db 2,3,5,7
Estimation EndP
; -------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; -------------------------------------
Start: push cs
pop ds ;使数据段与代码段同段
push cs
pop es ;使附加段与代码段同段
mov cx,30
mov ax,1 ;自然数初值
cld
PrimeSum: call Estimation ;判断素数子程序
jc $+5 ;素数
inc ax ;自然数增1
jmp PrimeSum
push ax
call Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
cmp cx,1
jz $+8
mov dl,','
mov ah,2
int 21h
pop ax
inc ax ;自然数增1
loop PrimeSum
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯