大家帮帮我啊~汇编语言求质数~明天交,我编不出来
显示‘PLEASE IN PUT THE DATA:’输入一个十进制数以回车结束,在新的一行显示从1到这个数的所有质数(十进制)
我把我写的贴在着~
大家看下帮我改改吧~
能运行
但我觉得有点繁~~
DATA SEGMENT
STR1 DB 'Please input the data(1-9999): ','$'
STR2 DB 'The primes are:',0DH,0AH,'$'
NUM DW ?
K DB ?
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1
MOV AH,9
INT 21H
CALL TERN1
MOV NUM,BX
CALL HUI_HUAN ;回车,换行
MOV DX,OFFSET STR2
MOV AH,9
INT 21H
MOV CX,1
LOP1: INC CX
PUSH CX
MOV BX,2
CALL PrimeNum
POP CX
CMP CX,NUM ;输出Num以内的质数
JB LOP1
MOV AH,4CH
INT 21H
MAIN ENDP
;子程序 CALL PrimeNum
;功能: 判断一个数是否为质数 ,并输出.
;入口条件 BX=2 CX=1
PrimeNum PROC NEAR
LOP2: CMP BX,CX
JZ PrNumOut
XOR DX,DX
MOV AX,CX
DIV BX
CMP DX,0
JZ PrNumRet
INC BX
JMP LOP2
PrNumOut: MOV BX,CX
MOV K,00H
CALL TERN
PrNumRet: RET
PrimeNum ENDP
;*****************************************
; 将输入的十进制数转换成十六进制数子程序
;*****************************************
TERN1 PROC
XOR BX,BX
XOR AX,AX
SHURU: MOV AH,1
INT 21H
CMP AL,0DH
JZ NET
SAL BX,1
MOV DX,BX
MOV CL,2
SAL BX,CL
ADD BX,DX
SUB AL,30H
MOV AH,0
ADD BX,AX
JMP SHURU
NET: RET
TERN1 ENDP
;***************************************
; 回车,换行
;***************************************
HUI_HUAN PROC NEAR
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
HUI_HUAN ENDP
;****************************************
;将十六进制转换成十进制输出子程序,入口BX,使用前将K置零,即MOV K,00H
;****************************************
TERN PROC NEAR
MOV CX,1000D
CALL DEC_DIV ;转换千位数
MOV CX,100D
CALL DEC_DIV ;转换百位数
MOV CX,10D
CALL DEC_DIV ;转换十位数
MOV CX,1D
CALL DEC_DIV ;转换个位数
RET
TERN ENDP
;****************************************
; 从高位到低显示每位十进制数,省略前面的0
;****************************************
DEC_DIV PROC NEAR
MOV AX,BX
MOV DX,0
DIV CX ;商为转换后的1位十进制数
MOV BX,DX ;将余数保存在BX
OR K,AL
JZ TN
MOV K,01H
MOV DL,AL
ADD DL,30H ;将商转换成ASCII码
MOV AH,2
INT 21H ;显示
RET
TN: MOV DL,20H
MOV AH,2
INT 21H
RET
DEC_DIV ENDP
;****************************************
CODE ENDS
END START