DATA SEGMENT
STRING DB 'aaAA!@$' ; 定义字符串
LEN DB $-STRING ; LEN记录STRING长度
COUNT DB 0 ; COUNT用来记录小写字母个数
CRLF DB 0AH,0DH,"$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
; 初始化DS寄存器指向数据段
MOV AX,DATA
MOV DS,AX
; 初始化CX寄存器为循环次数(STRING长度)
XOR CX,CX
MOV CL,LEN
; 输出原字符串
LEA DX,STRING
MOV AH,09H
INT 21H
; 初始化BX寄存器指向STRING首地址
LEA BX,STRING
X: ; 取BX指向地址处的字符到AL寄存器
MOV AL,[BX]
; 判断AL是否为小写字母('a'至'z'范围内)
CMP AL,'a'
JB NEXT
CMP AL,'z'
JA NEXT
; 若AL为小写字母,增加COUNT计数器,并将小写字母转为大写
INC COUNT
SUB AL,20H
MOV [BX],AL
NEXT:
; 更新BX指向下一个字符地址
INC BX
; 循环检查下一个字符,直到遍历完整个STRING
LOOP X
; 输出回车换行
LEA DX, CRLF
MOV AH, 09H
INT 21H
; 输出更新后的字符串
LEA DX,STRING
MOV AH,09H
INT 21H
; 输出回车换行
LEA DX, CRLF
MOV AH, 09H
INT 21H
; 将COUNT转换为ASCII码并输出
ADD COUNT,30H
MOV DL,COUNT
MOV AH,02H
INT 21H
; 结束程序
MOV AH,4CH
INT 21H
CODE ENDS
END START