-
-
[旧帖]
[求助]求助一汇编问题
0.00雪花
-
发表于:
2010-7-17 21:00
1350
-
用键盘输入任意一字符串,分类统计该字符串中每个数字和字母的出现次数。
解:
.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?
另外,我不理解ADD BX,BX这句,是如何把数字、字母的个数保存到对应数组中的?
谢谢!
[课程]Linux pwn 探索篇!