从键盘接收一个无符号数0-65535,以回车键结束,判断该数是否为质数,若是则输出 ;THIS IS A PRIME NUMBER!,若不是则输出THIS IS NOT A PRIME NUMBER!

版权声明: https://blog.csdn.net/weixin_42000150/article/details/80659494
;从键盘接收一个无符号数0-65535,以回车键结束,判断该数是否为质数,若是则输出
;THIS IS A PRIME NUMBER!,若不是则输出THIS IS NOT A PRIME NUMBER!
DATA SEGMENT
PRIME DB 'THIS IS A PRIME NUMBER!',0AH,0DH,'$'
NOPRIME DB 'THIS IS NOT A PRIME NUMBER!',0AH,0DH,'$'
NUM DW 0
CRLF DB 0AH,0DH,'$'
DATA ENDS 

STACK SEGMENT PARA STACK
      DW 128 DUP(?)
TOP   LABEL WORD
STACK ENDS

CODE SEGMENT
     ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
         MOV AX,DATA
MOV DS,AX
 
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
 
L0: MOV AH,1       ;接收键盘输入并转化为实际数
INT 21H
CMP AL,0DH
JE  L1
XOR AH,AH
SUB AL,30H
PUSH AX
MOV AX,NUM
MOV BX,10
MUL BX
POP DX
ADD AX,DX
MOV NUM,AX
JMP L0
L1:    MOV AH,9
         LEA DX,CRLF
         INT 21H
     
         MOV BX,2         ;质数的判断:小于5的质数直接输出,大于等于5的质数用如下
         XOR DX,DX        ;方法判定:用该数除2得商S,将该数逐次与2~S相除,若有整除
MOV AX,NUM       ;则非质数,若无整除则为质数
CMP AX,1
JE  L3
CMP AX,2
JE  L3
CMP AX,3
JE  L3
         DIV BX
         MOV CX,AX
     
L4: XOR DX,DX
         MOV AX,NUM
         DIV BX            ;BX初值为2,以后逐次加1
INC BX
         CMP DX,0
         JE  L2
CMP BX,CX         ;若BX大于商S,则为质数
JA  L3
JMP L4
L2:    MOV AH,9
         LEA DX,NOPRIME
         INT 21H
        JMP EXIT  
L3:    MOV AH,9
         LEA DX,PRIME
INT 21H
 
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
MAIN ENDP
     END START

猜你喜欢

转载自blog.csdn.net/weixin_42000150/article/details/80659494