第1个回答 2018-09-14
CODE SEGMENT
ASSUME CS:CODE
BUFF DB 100 DUP(?)
N EQU $-BUFF
X DW 0
Y DW 0
Z DW 0
START: PUSH CS
POP DS
PUSH CS
POP ES
LEA DI,BUFF
MOV AL,1
MOV CX,N
CLD
@1:
STOSB
INC AL
LOOP @1
LEA SI,BUFF
MOV CX,N
CLD
@2:
LODSB
CBW
ADD X,AX
MOV BX, AX
CALL F
CMP AX,0
JE @3
INC Y
ADD Z,BX
MOV AX,BX
CALL DSPAX
@3:
LOOP @2
CALL LFCR
MOV AX,Y
CALL DSPAX2
CALL LFCR
MOV AX,Z
CALL DSPAX
CALL LFCR
MOV AX,X
CALL DSPAX
MOV AH,4CH
INT 21H
;====================================
; 要判断的数放入ax中
; ax返回1时表示是素数
; ax返回0时表示是合数
F PROC NEAR
PUSH BX
PUSH DX
JMP F1
@@X DW ?
@@X2 DW ?
F1: CMP AX,1
JZ F2
CMP AX,2
JZ F11
CMP AX,3
JZ F11
MOV @@X,AX
SHR AX,1
MOV @@X2,AX
MOV BX,2
FLP: MOV DX,0
MOV AX,@@X
DIV BX
CMP DX,0
JZ F2
INC BX
CMP BX,@@X2
JBE FLP
F11: MOV AX,1
POP DX
POP BX
RET
F2: MOV AX,0
POP DX
POP BX
RET
F ENDP
;=================================
DSPAXS PROC NEAR
PUSH AX
TEST AX,8000H
JNS @DSPAXS1
PUSH AX
PUSH DX
MOV AH,2
MOV DL,'-'
INT 21H
POP DX
POP AX
NEG AX
@DSPAXS1:
CALL DSPAX
POP AX
RET
DSPAXS ENDP
;===============================
DSPAX PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR CX,CX
MOV BX,10
@DSPAX1:
XOR DX,DX
DIV BX
INC CX
OR DX,30H
PUSH DX
CMP AX,0
JNE @DSPAX1
MOV AH,2
@DISPAX2:
POP DX
INT 21H
LOOP @DISPAX2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAX ENDP
;==================================
DSPAX2 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR CX,CX
MOV BX,2
@DSPAX2_1:
XOR DX,DX
DIV BX
INC CX
OR DX,30H
PUSH DX
CMP AX,0
JNE @DSPAX2_1
MOV AH,2
@DISPAX2_2:
POP DX
CMP DL,3AH
JB @DISPAX2_3
ADD DL,7
@DISPAX2_3:
INT 21H
LOOP @DISPAX2_2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAX2 ENDP
;================================
LFCR: PUSH AX
PUSH DX
MOV AH,2
MOV DL,13
INT 21H
MOV DL,10
INT 21H
POP DX
POP AX
RET
;=================================
CODE ENDS
END START本回答被网友采纳