10.2 分类统计程序举例
优质
小牛编辑
123浏览
2023-12-01
例10.6 用键盘输入任意一字符串,分类统计该字符串中每个数字和字母的出现次数。
解: | |||
.MODEL SMALL | |||
.DATA | |||
N = 80 | |||
Buff | DB N,?, N DUP(?) | ||
Num | DW 36DUP(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 |
思考题:在本例中,用指令“MOVBL, [SI]”来把当前检测的字符存入BL,当然,我们也可以用AL来代替BL,有关指令要作相应的改动,但这样做,会更方便吗?希望读者能知道:为什么要用BL,而不用AL?