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