![]() |
#2
hyukfei2008-01-07 16:00
我把我写的贴在着~
大家看下帮我改改吧~ 能运行 但我觉得有点繁~~ 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 |
显示‘PLEASE IN PUT THE DATA:’输入一个十进制数以回车结束,在新的一行显示从1到这个数的所有质数(十进制)