900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 汇编 统计字符串大小写字母 数字 其他字符个数(全debug实现)

汇编 统计字符串大小写字母 数字 其他字符个数(全debug实现)

时间:2019-09-16 09:33:42

相关推荐

汇编 统计字符串大小写字母 数字 其他字符个数(全debug实现)

写这篇博客的目的呢,是因为某汇编老师要求的实验报告;汇编代码写统计字符串各字符个数的例子代码网上很多,但我们要求的用debug下的-A命令编写,这就有点坑爹了~

因为是用debug命令编写,所以变量,代码段什么的都没有,所以规定:

用段寄存器存储各字符个数:

ds[200] 存储字符串

ds[210] 存储小写字母个数

ds[220] 存储大写字母个数

ds[230] 存储数字

ds[240] 存储其他字符

注:可以自己规定地址存储;

第一步:

使用-e命令向ds[200]中存入字符串,可以使用-d命令查看存入情况:(右边是字符串,左边是对应字符的16位ASCII码)

第二步:

先看看代码逻辑:

mov cx,15;循环15次(loop指令所需)mov si,100;存储字符串首地址lop:mov al,[si] ;将ds[si]字符的ASCII码给al(即字符串第一个字符)cmp al,61;与'a'比较(这里需用字符对应ASCII码)jb b1;如果小于’a’跳转到b1cmp al,7A ja b1;如果大于’z’跳转b1inc ds[200] ;不跳转(即在a-z之间)小写字母+1jmp b4b1:cmp al,41 jb b2;如果小于’A’跳转b2cmp al,5Aja b2;如果大于’Z’跳转b2inc ds[210] ;大写字母+1jmp b4b2:cmp al,30jb b3;如果小于’0’跳转b3cmp al,39ja b3;如果大于’9’跳转b3inc ds[220] ;数字+1jmp b4b3:inc ds[230] ;其它字符+1b4:inc si ;取下一个字符loop lop ;循环

注:整体逻辑:取出一个字符依次与小写字母,大写字母,数字比较;在这之间的就对应字符++,并跳出去,不在就继续往下,最后剩的是其他字符。(代码逻辑并非最优,个人能力有限)

当然,在debug下略微有点差别:

注:因为debug下没有lop,b1,b2…代码段标志,所以只能jmp到对应代码段地址。代码起始地址为0100,如果不同jmp地址则需对应改变。

第三步:

通过-g=0100 0139运行代码,

-d ds:200看看运行结果(因为debug每次都要重新编写,就不做演示了)。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。