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