首页
社区
课程
招聘
[旧帖] 学习汇编遇到的一个问题? 0.00雪花
发表于: 2010-10-18 21:03 1560

[旧帖] 学习汇编遇到的一个问题? 0.00雪花

2010-10-18 21:03
1560
我做题时遇到一个问题,题是:假设在数据段中有一串任意字符,请编写一段程序统计该字符串中小写字母的个数,字符串以00H作为结束符!
我写了DSEG SEGMENT
  VAR1 DB "ASdhagjBDERT"
DSEG ENDS
CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:
  MOV AX,DSEG
  MOV DS,AX
  LEA SI,VAR1
NEXT:
  CMP BYTE PTR [SI],00H
  JZ DISP1
  CMP BYTE PTR [SI],"Z"
  JLE NEXT
  ADD BL,1
  JMP NEXT
DISP1:
  MOV AH,4CH
  INT 21H
CSEG ENDS
END START一个,但是调试时可以通过,可是看不到结果!求大家指点![CODE][/CODE]

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主啊,我明年就要学习这个了,可惜到现在还不懂得额,到时候跟您一起探讨
2010-10-18 21:19
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
bx在哪里赋值的呢
2010-10-18 21:29
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
bx在哪里赋值的呢

没有赋值,这个可以直接拿来用吗?
2010-10-18 21:34
0
雪    币: 255
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我过久就学了!楼主加油!
2010-10-18 21:47
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
能不能告诉我 BX是做什么的

解释下代码好吗?
2010-10-18 21:48
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
VAR1 DB "ASdhagjBDERT" //这是定义一个字符串。
DSEG ENDS
CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:
  MOV AX,DSEG
  MOV DS,AX
  LEA SI,VAR1
NEXT:
  CMP BYTE PTR [SI],00H//判断接下来的字符是否是00H。
  JZ DISP1                     //是的话就直接跳转到disp1处
  CMP BYTE PTR [SI],"Z" //将字符与“Z”比较
   JLE NEXT                   //小于等于的话就重新执行next程序
  ADD BL,1         //BL是用来计算有多少个小写字母
  JMP NEXT
DISP1:
  MOV AH,4CH
  INT 21H
CSEG ENDS
END START[QUOTE][/QUOTE]
2010-10-18 22:02
0
雪    币: 678
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
BX应该是作为字符串的长度来使用吧?
你比较的“Z”的ASCII码是小于“z”的
2010-10-18 22:11
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是啊!!我是这样想的,小写字母的ASCII码比大写字母的要大,所以直接拿“Z”来比较了!!
2010-10-19 12:52
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
没输出到屏幕,这么能看到了,要有输出函数啊。调试的时候可以看到。编译了运行就什么都没有啦
2010-10-19 17:05
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
可以再寄存器中看到结果啊!
2010-10-19 21:36
0
雪    币: 91
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
BL没有清零
如何得到结果?也没有保存之前的数值
况且一般都有I/O函数的啊
为什么不用呢?
2010-10-19 23:42
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
bl没有清零,字符串地址SI没有加1.
2010-10-20 08:47
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我还没学到那里!
2010-10-20 09:19
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
DSEG SEGMENT
  VAR1 DB "ASdhagjBDERT"
DSEG ENDS
CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:
  MOV AX,DSEG
  MOV DS,AX
  LEA SI,VAR1
  MOV CX,11
  MOV BX,0000H
NEXT:
  MOV AL,DS:[SI]
  CMP AL,00H
  JZ  DISP1
  CMP AL,"Z"
  JNA DISP
  ADD BX,1
  JMP DISP
DISP:
   INC SI
   LOOP NEXT
DISP1:
   ADD BX,30H
   MOV DL,BL
   MOV AH,02H
   INT 21H
  MOV AH,4CH
  INT 21H
CSEG ENDS
END START
  
经过各位的帮忙,我做出来了,谢谢大家!!上面这个程序就可以!
2010-10-20 13:09
0
游客
登录 | 注册 方可回帖
返回
//