DATAS SEGMENT
BUF DB 82 DUP(?)
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX ;段寄存器初始化
MOV BX,OFFSET BUF ;BX指向字符行缓冲区首址
BECOME0:MOV SI,00H ;将SI置为零
DEAL:MOV AH,01H ;读入功能
INT 21H
CMP AL,0DH ;判断是否为回车,如果是则输出结束,只在最后一次使用。
JZ OVER ;如果结束,则跳转到over函数
CMP AL,61H ;排除掉小写字母之前的
JB NEXT
CMP AL,7AH ;排除掉小写字母之后的
JA NEXT
SUB AL,20H ;此时必是小写字母,将其变成大写字母
NEXT:MOV[BX+SI],AL ;处理接下来的一个
INC SI ;每次往后增加一位
JMP DEAL ;跳转到处理函数
OVER:MOV[BX+SI],AL
MOV AL,0AH
MOV[BX+SI+1],AL ;加入换行
MOV AL,'$'
MOV[BX+SI+2],AL ;设置标志字符
MOV AH,09H
MOV DX,BX ;字符串输出
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START