|
|
![]() |
例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?