计算 1+2+……n=?
DATA SEGMENT
INF1 DB "Please input a number(1-361):$"
INF2 DB "1+2+...+$"
INF3 DB "1=1$"
INF4 DB "1+2=3$"
IBUF DB 7,0,6 DUP(?)
OBUF DB 6 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INF1 ;提示信息
MOV AH,09H
INT 21H
MOV DX,OFFSET IBUF ;键入一个十进制数
MOV AH,0AH
INT 21H
CMP IBUF+1,1
JE PANDUAN
JMP CONTINUE
PANDUAN: CMP BYTE PTR[IBUF+2],'1'
JE EQ1
CMP BYTE PTR[IBUF+2],'2'
JE EQ2
JMP CONTINUE
EQ1: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET INF3 ;提示信息
MOV AH,09H
INT 21H
JMP ENDLOOP
EQ2: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET INF4 ;提示信息
MOV AH,09H
INT 21H
JMP ENDLOOP
CONTINUE:
MOV CL,IBUF+1 ;十进制的位数送CX
MOV CH,0 ;清零
MOV SI,OFFSET IBUF+2 ;指向输入的第一个字符(最高位)
MOV AX,0 ;开始将十进制转换为二进制
AGAIN: MOV DX,10
MUL DX
AND BYTE PTR[SI],0FH
ADD AL,[SI]
ADC AH,0
INC SI
LOOP AGAIN
MOV CX,AX
MOV AX,0
MOV BX,1
LOOP2: ADD AX,BX
INC BX
LOOP LOOP2
MOV BX,OFFSET OBUF+5
MOV BYTE PTR[BX],'$'
MOV CX,0AH
LOOP1: MOV DX,0
DIV CX
ADD DL,30H
DEC BX
MOV [BX],DL
OR AX,AX
JNZ LOOP1 ;判断商是否为0,不为0继续
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET INF2
MOV AH,09H
INT 21H
MOV SI,OFFSET IBUF+2
MOV CL,IBUF+1
MOV CH,0
ADD SI,CX
MOV BYTE PTR[SI],'$'
MOV SI,OFFSET IBUF+2
LOOP3: ADD BYTE PTR[SI],30H
INC SI
LOOP LOOP3
MOV DX,OFFSET IBUF+2
MOV AH,09H
INT 21H
MOV DL,3DH
MOV AH,02H
INT 21H
MOV DX,BX
MOV AH,09H
INT 21H
ENDLOOP: MOV AH,4CH
INT 21H
CODE ENDS
END START