DATA SEGMENT
SBOUTPUT DB 'INPUT MAX NUM!', 0DH, 0AH, '$'
SBNEXT_LINE DB 0DH, 0AH, '$'
SBRESULT DB 'RESULT', 0DH, 0AH, '$'
MAX DW 0
NUM DW 0
INDEX DW 10
B_INDEX DB 10
DATA ENDS
STACK SEGMENT
DB 100 DUP (0)
STACK ENDS
CODE SEGMENT
ASSUME CS : CODE, DS : DATA, SS : STACK
START:
MOV AX, DATA
MOV DS, AX
H:
MOV MAX, 0
MOV NUM, 0
LEA DX, SBOUTPUT
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
SUB AL, 30H
XOR AH, AH
MOV MAX, AX
INPUT:
MOV AH, 1
INT 21H
CMP AL, 0DH
JE NEXT
SUB AL, 30H
XOR AH, AH
PUSH AX
MOV AX, MAX
IMUL B_INDEX;
MOV MAX, AX
POP AX
ADD MAX, AX
JMP INPUT
NEXT:
LEA DX, SBNEXT_LINE
MOV AH, 9
INT 21H
MOV CX, MAX
XOR AX, AX
LOOP_ADD:
ADD AX, CX
LOOP LOOP_ADD
XOR DX, DX
LOOP_T:
DIV INDEX;商在AX,余数DX
;DH 是零
PUSH DX
INC NUM
XOR DX, DX
CMP AX, 1
JAE LOOP_T
LEA DX, SBRESULT
MOV AH, 9
INT 21H
MOV CX, NUM
LOOP_P:
POP DX
CALL PRINT_NUM
LOOP LOOP_P
LEA DX, SBNEXT_LINE
MOV AH, 9
INT 21H
JMP H
MOV AH, 4CH
INT 21H
;参数在DL中,并将其显示
PRINT_NUM PROC NEAR
PUSH AX
PUSH DX
ADD DL, 30H
MOV AH, 2
INT 21H
POP DX
POP AX
RET
PRINT_NUM ENDP
CODE ENDS
END START