【源程序】
DATA SEGMENT
NOTE0 DB 'Note: The character that separates the integers can be any visible ASCII except ten digits(',27H,'0',27H,'-',27H,'9',27H,').',0DH,0AH,'$'
NOTE1 DB 0DH,0AH,'==================================================================',0DH,0AH
DB 'Please input 20 (or less) decimal integers (-32768 to +32767):',0DH,0AH,'$'
NOTE2 DB 0DH,0AH,'==================================================================',0DH,0AH
DB 0DH,0AH,'The inputed integers: ','$'
NOTE3 DB 0DH,0AH,'==================================================================',0DH,0AH
DB 0DH,0AH,'How many decimal integers? $'
NOTE4 DB 0DH,0AH,'The sorted result: ',0DH,0AH,'$'
ERR_STR DB 0DH,0AH,'******************************************************************',0DH,0AH
DB 'Input error!',0DH,0AH
CON_STR DB 0DH,0AH,'******************************************************************',0DH,0AH
DB 0DH,0AH,'Continue? Y or N?','$'
DEC_STR DB 200 ;用来存放输入的原始数据
DB ?
DB 150 DUP('$')
TOTAL DB 3 DUP('$') ;用来记录输入的数字个数
DEC_NUM DW 30 DUP(?) ;用来存放将输入的ASCII码转换成2进制数以便比较的结果
OUT_STR DB 150 DUP('$') ;存放待输出的字符组信息
DATA ENDS
STACK SEGMENT STACK
STT DB 100 DUP(?) ;堆栈
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,STACK
MOV SS,AX
MOV AX,DATA
MOV DS,AX
;---------------------------------- 输出提示信息
LEA DX,NOTE0
MOV AH,09H
INT 21H
DISP0: LEA DX,NOTE1
MOV AH,09H
INT 21H
LEA DX,DEC_STR ;将原始数据存入该空间
MOV AH,0AH
INT 21H
MOV AL,BYTE PTR[DEC_STR+2] ;输入合法性的标志:开头是数字或者符号
CMP AL ,'0'
JAE CMP1
CMP AL ,'+'
JE DISP2
CMP AL ,'-'
JE DISP2
JMP DISP1
CMP1: CMP AL ,'9'
JBE DISP2
DISP1: LEA DX,ERR_STR
MOV AH,09H
INT 21H
CON_YN: MOV AH,01H ;程序结束处询问是否需要继续
INT 21H
CMP AL,'Y'
JE DISP0
CMP AL ,'y'
JE DISP0
CMP AL ,'N'
JE OVER0