解:
.MODEL SMALL
.DATA
N = 80
Buff DB N, ?, N DUP(?)
Num DW 36 DUP(0) ;每个字用于存放'0'~'9','A'~'Z'出现的个数
.CODE
.STARTUP
LEA DX, Buff
MOV AH, 0AH
INT 21H ;输入一个字符串
XOR CH, CH
MOV CL, Buff+1 ;CX=输入字符串的个数
LEA SI, Buff+2
XOR BX, BX
.REPEAT
MOV BL, [SI]? ;考虑下面的思考题
INC SI
.IF BL>='0' && BL<='9' ;分类统计'0'~'9'中的每个数字的个数
SUB BL, '0'
ADD BX, BX
INC Num[BX]
.CONTINUE
.ENDIF
.IF BL>='a' && BL<='z'
SUB BL, 20H? ;小写变大写
.ENDIF
.IF BL>='A' && BL<='Z' ;分类统计'A'~'Z'中的每个字母的个数
SUB BL, 'A'-10
ADD BX, BX
INC Num[BX]
.ENDIF
.UNTILCXZ
.EXIT?0
END
思考题:在本例中,用指令“MOV BL, [SI]”来把当前检测的字符存入BL,当然,我们也可以用AL来代替BL,有关指令要作相应的改动,但这样做,会更方便吗?希望读者能知道:为什么要用BL,而不用AL?