ITEEDU

例10.6 用键盘输入任意一字符串,分类统计该字符串中每个数字和字母的出现次数。

解:


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