要求:通过键盘输入一个数字,求 1 加到该数的和,并将结果显示在屏幕上。
做而论道编写的程序如下:
下列程序,可以使用,并具有排错功能。
;==================================
ASSUME CS:C, DS:D
;----------------------------------
D SEGMENT
N DB 4, ?, 4 DUP(?)
SUM DW ?
MSG1 DB 'Input a number (1~361): $'
MSG2 DB 13, 10, 'Sum is : '
MSG3 DB ' .$'
MSG4 DB 13, 10, 'Input Error.', 13, 10, 36
D ENDS
;----------------------------------
C SEGMENT
BEG:
MOV AX, D
MOV DS, AX
;------------------------------
LEA DX, MSG1
MOV AH, 9
INT 21H
LEA DX, N
MOV AH, 10 ;输入字符串
INT 21H
;------------------------------
MOV SI, 0
MOV SUM, 0
MOV BX, 10
LP1:
CMP BYTE PTR N[SI + 2], 13
JE L1_E
CMP BYTE PTR N[SI + 2], '0'
JB ERROR
CMP BYTE PTR N[SI + 2], '9'
JA ERROR
MOV AX, SUM
MUL BX
MOV SUM, AX
MOV AL, N[SI + 2]
SUB AL, '0'
MOV AH, 0
ADD SUM, AX
INC SI
JMP LP1
;------------------------------
L1_E:
MOV CX, SUM
MOV SUM, 0
LP2:ADD SUM, CX
JC ERROR
LOOP LP2
;------------------------------
MOV AX, SUM
MOV BX, 10
MOV CX, 5
MOV SI, 0
LP3:MOV DX, 0
DIV BX
ADD DL, '0'
MOV MSG3[SI + 4], DL
DEC SI
CMP AX, 0
JZ DISP
LOOP LP3
;------------------------------
DISP:
LEA DX, MSG2
MOV AH, 9
INT 21H
JMP EXIT
ERROR:
LEA DX, MSG4
MOV AH, 9
INT 21H
;------------------------------
EXIT:
MOV AH, 4CH
INT 21H
;------------------------------
C ENDS
END BEG
;----------------------------------
执行后,显示如下:
c:\masm510>XX
Input a number (1~361): 0
Input Error.
c:\masm510>XX
Input a number (1~361): 7
Sum is : 28.
c:\masm510>XX
Input a number (1~361): 361
Sum is : 65341.
c:\masm510>
c:\masm510>XX
Input a number (1~361): 100
Sum is : 5050.
c:\masm510>XX
Input a number (1~361): 367
Input Error.
后记:
提问者选择了另一个答案。
在那个答案中,程序罗嗦了不少,却还没有排除错误的功能。
如果输入了非法的数字,程序并不给出提示,而是继续计算,然后显示出来莫名其妙的结果。
大家可以去看看,和做而论道编写的程序对比一下。
题目链接:http://zhidao.baidu.com/question/646391764725929565.html