首页
社区
课程
招聘
[旧帖] [求助]求助一汇编问题 0.00雪花
发表于: 2010-7-17 21:00 1350

[旧帖] [求助]求助一汇编问题 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 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
首先 AX累加器,BX是基址寄存器,但是都是通用寄存器,用哪个没有绝对的区别,ADD BX,BX  BX是指向buff数组的,通过循环,将结果放到BX,然后放到buff里面,其实我汇编也不怎么行,不过我打算以后好好学汇编。以后也要帮我解决些问题啊
2010-7-18 08:40
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我不明白ADD BX,BX为什么这样做就可以对对应数组赋值?请指点一下!以后咱们共同学习吖。
2010-7-19 12:22
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不懂得路过  帮顶
2010-7-19 12:47
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
ADD BX BX是因为NUM数组定义的是字
2010-7-19 18:48
0
游客
登录 | 注册 方可回帖
返回
//