'DATA SEGMENT' 到 'DATA ENDS ' 这一段定义了数据段,开辟并初始化了代码中要用到的变量;
'CODE SEGMENT ' 以下都是代码段,写的都是程序代码。
MAIN PROC FAR
至
MOV DS,AX
以上一段是保存原DS段寄存器地址,并把DS段寄存器指向DATA段;
下面到第一个INT 21H,在屏幕输出了一行字符串 "INPUT A NUMBER";
到再下一个INT 21H,程序要求用户输入一个不超过3位的数字(实际上其他字符串也可以,就是往下不太好讲解),回车结束输入;
到再下一个INT 21H,将刚才输入的数字在屏幕上打印一遍;
往下到 MOV [DI],AX 这一行,把刚才输入的数字按照十进制从一串ASCII码转换成一个真正的数字,并存储在NUM数组的第一个位置;
到下一个INT 21H 在屏幕上打印字符串 "INPUT AGAIN(END WITH #)";
再到下一个INT 21H ,程序等待用户再次输入一个不超过3位的数字或一个'#';
往下的 CMP BYTE PTR [SI],'#' 一句判断用户输入的是不是一个'#':
如果不是'#',就像前面一样将输入的数字字符串转成十进制数,存入NUM的下一个位置,用BL记录输入的数字个数,然后再通过JMP INN 这一行循环回去让用户继续输入数字,直到用户输入了'#'为止。
如果是'#',就调用 DONE: MOV DX, 0 这一行以后的程序;
到MOV AX,DX 这一行,将已经输入的数字相加存储在AX中;
下面 MOV DX,OFFSET OUTPUT3
到 INT 21H 这一段会输出字符串"AVERAGE IS:";
下面一直到 MAIN ENDP 程序结束,程序将相加的结果与输入的数字个数相除,小数抛弃,并按照十进制输出到屏幕。
最后注意:
1.输入数字时要保证最后平均值小于256,否则会出错;
2.加数最多20个,否则可能出现意外效果或结果,甚至发生错误。