解:
.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?