注册 登录
编程论坛 汇编论坛

【醒目】win32 汇编 关于输入字符串中字母出现次数统计!(谢谢了求帮忙!)

Whiserp 发布于 2012-11-24 20:42, 2109 次点击
要求是请用户输入一个字符串,然后统计并输出字符串中字母出现频率最高的字母。

前面定义都可以用C语言什么的,只要求中间统计部分用汇编。

所以我的问题是:
1、具体思路是什么才能简便快捷的完成这个程序,比如说数组一定是要用到的,那么如何用呢?用在哪里?
2、有哪些指令是要用到的?
3、只求指点,谢谢大神们了!老师不靠谱,教不清楚还是英文的T T帮个忙吧谢谢!
10 回复
#2
wp2319572012-11-24 23:17
汇编里还有数组的概念吗
#3
Whiserp2012-11-25 03:06
回复 2楼 wp231957
可以在前面部分先用C语言定义一些数组..然后后面用汇编..那不用数组也可以,用其他的方法,求指点!
#4
wp2319572012-11-25 07:30
没看懂 你要用c+嵌入汇编方式  还是c+DLL方式
#5
Alar302012-11-26 20:06
貌似汇编里没有数组一说吧。。。
#6
zhu2240392012-11-27 05:00
在c程序里面声明个48个大小的static char a[]  汇编没有什么类型的说法引用的d到内存就好.对寄存器的操作是用的ax bx al ah的方式。  这个328的方式俺就帮不上了。手机上的。满不好弄的
push a
pop dx
LOP1:
mov ah ,01h
int 21h
CMP 0DAH,AL
JE ECD
cmp al ,'a'
jae yh
yh:
cmp al,'D'
JBE XXX
JMP LOP1
XXX:
SUB AL,'a'
XOR AH,AH
ADD BYTE PTR [dx+AX],1
JMP LOP1
ECD :
MOV AH 4CH
INT 21H
这个怎么找出出现次数最多的 汇编代码就是循环48 次 ax存放cx的值,bx初始值为0存放数组a的大值 满足[dx+cx]大于bx才将ax=cx          最后子母a的ascii码+ax就是出现次数最高的那个了


手机写代码很不方便,有心的话自己实现塞,另外一个很好的学习方法就是高级语言编写 反汇编后,你们懂的

[ 本帖最后由 zhu224039 于 2012-11-27 05:48 编辑 ]
#7
zhu2240392012-11-27 05:04
0DAH  我是认为是回车就建的ascii码的
#8
zhu2240392012-11-27 05:39
如果是在c里面输入的字符的话 32的代码就好写的很
直接将字符数组首地址PUSH  POP 的方式取得f,那么写个
32码就好写的很了     把寄存器通通换成32的。那个dos中断就不要了
思路是一样的,这么辛苦  这分就都给我了把,手点的酸

[ 本帖最后由 zhu224039 于 2012-11-27 05:45 编辑 ]
#9
bobo21853552012-11-27 15:04
CSEG SEGMENT
  BUFFER1 DW  8 DUP(?)
  BUFFER2 DW  8 DUP(?)
START:....
这不就相当于一个二维数组吗?
#10
bobo21853552012-11-27 16:34
  
 用SCAS进行扫描比较 ,先计算出每个字符出现的次数(其他方法也成啊,方法很多) 放进一个 NAME  DB 26 DUP (0)当中,然后逐一比较 CMP,比较的结果用条件转移将大数的偏移地址存入累加器,这里存的是偏移地址,至于如何将偏移地址转换成你要输出的字符就简单了
 区分大小写的 也只是多了区分大小写的部分而已
#11
bobo21853552012-11-27 16:45
看错题目咧 我 以为你要输出出现次数最多的那个字符呢
1