统计字符串中某个字符出现次数.docx





《统计字符串中某个字符出现次数.docx》由会员分享,可在线阅读,更多相关《统计字符串中某个字符出现次数.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除目录摘要11课程设计目的22设计条件及要求22.1程序设计条件22.2程序设计要求23总体方案论证23.1总体方案思路23.2方案注意事项33.3具体方案论证33.3.1方案一33.3.2方案二43.3.3方案论证44流程图设计及说明54.1流程图54.2设计说明55软件设计关键问题和相应程序段65.1关键问题说明65.2问题解决方法65.3相应程序段76程序调试97结果记录及分析108课程设计收获及心得体会129参考文献1310附录14摘要微机原理与接口技术作为计算机科学领域的基础知识,尽管计算机科学高速发展,但基本原理依然不变,即是遵循冯诺依
2、曼基本思想的。学习并能掌握好微机原理与接口技术这门知识是非常重要的,通过对这门知识的了解可以简单的编写一些日常中经典的控制程序。本文通过汇编语言编写程序,完成统计字符串中某个字符出现次数这一基本功能。下面会介绍该程序的编程思路,并对程序设计中遇到的问题进行深入的研究。关键字:微机 统计 编程统计字符串中某个字符出现次数汇编语言程序设计1课程设计目的通过本次课程设计,熟悉微机原理与接口技术的基本理论,使学生能够进一步了解微型计算机工作原理, 微型计算机的硬件结构及微型计算机软件编程,掌握使用汇编语言编写程序的方法,并进一步提高编程设计能力。2设计条件及要求本次微机原理与接口技术课程设计的题目为统
3、计字符串中某个字符出现的次数,为汇编程序设计。2.1程序设计条件采用16位微处理器 8086 CPU以及86系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。2.2程序设计要求设计汇编语言程序,实现统计字符串中某个字符出现次数的功能,具体功能要求如下:(1)提示输入字符串;输入任意字符串string ,点击Enter结束输入;(2)提示输入字符;输入任意字符ch,点击Enter 结束输入;(3)输出字符串string 中字符ch的出现次数。点击Enter程序退出。3总体方案论证3.1总体方案思路要使用汇编语言实现统计字符串中某个字符出现次
4、数的功能,总体的思路为:取出字符串string中的字符,依次与字符ch进行比较,同时统计该字符与字符ch相同的次数,最后输出结果到屏幕步骤大体分为以下几点:(1) 从键盘输入字符串string,同时得到字符串中的字符总数,并保存在寄存器中;(2) 从键盘输入查询字符ch,并保存在寄存器al中;(3) 从寄存器中循环取出字符串string中的字符,依次与字符ch进行比较,并记录相同的次数,存入寄存器中;(4) 从寄存器中取出结果,转换成字符输出到屏幕上。3.2方案注意事项根据程序设计要求,设计方案中需要注意的有以下几点:(1) 提示语句。需要在屏幕上显示提示输入字符和字符串及输出结果的提示语句;
5、(2) 回车结束。需要在输入字符和字符串之后按Enter键才结束输入,输出结果后按Enter键才退出程序;(3) 程序使用范围。需要考虑程序能处理的字符串的最大长度;(4) 结果输出形式。由于在寄存器中存入的为二进制数,在输出的时候需要显示十进制的数;(5) 结果输出转换。二进制数据从寄存器不能直接输出到屏幕上;3.3具体方案论证根据总体方案思路,程序的核心是取字符串中的字符与查询字符ch循环比较。根据输出结果需要为十进制这一要求,以下有两种方案可以实现这一功能。3.3.1方案一方案一:将寄存器中的二进制数据转换成BCD码输出具体步骤:(1) 在进行字符比较的同时把统计结果存入寄存器中;(2)
6、 统计结束之后,取出统计结果,并判断是否需要转换成BCD码进行转换;(3) 把结果转换成字符输出。论证:该方案有以下优点:(1) 由于统计结果最大为254,只需要使用一个8位寄存器来存放数据,调用方便;(2) 数据连续,占用储存空间小;(3) 设计思路简单,简化程序的循环部分。但该方案有以下缺点:(1) 输出程序段复杂,需要外加判断子程序;(2) 转换复杂,判断部分随着位数增多而变得复杂;(3) 统计结果受限制。如果输出三位数,由于转换复杂,输出变得难以实现;3.3.2方案二方案二:将三位数的输出结果分离成三个0到9的字符逐个输出具体步骤:(1) 在统计次数的过程中限制统计结果中每位上的数不大
7、于9;(2) 把三位数各存放到三个8位寄存器中;(3) 输出时按顺序转换成字符逐个输出。论证:此方案有以下优点:(1) 输出段程序简单,不需要外加判断子程序;(2) 转换方便,循环比较时直接限制;(3) 位数由可以调用的8位寄存器个数决定,可以简单实现三位数的输出。但该方案有以下缺点:(1) 需要用三个8位寄存器,调用不方便;(2) 存放结果的每个8位寄存器只用到4位,浪费存储空间;(3) 循环比较部分复杂,数据储存不方便。3.3.3方案论证方案一与方案二相比,循环比较时统计结果简单,但输出结果为三位数时,方案一编程复杂,难以实现;而方案二使用三个8位寄存器,理论上可以统计0至999的统计次数
8、的输出,满足最大统计结果254个字节,而且编程简单。就本程序而言,8个8位寄存器可以满足方案二中寄存器个数的要求。因此选用方案二。4流程图设计及说明4.1流程图按照总体方案设计流程图。流程图如下:图4.1程序流程图4.2设计说明按照总体方案,先设置缓冲区放置数据。再输入字符串,并把字符串长度即循环次数传到dl。然后输入查询字符ch。取字符串第一个字符与查询字符比较,相同时统计结果加1,不相同时跳过加1步骤。循环次数减1,当减至0时,输出统计结果。5软件设计关键问题和相应程序段5.1关键问题说明在程序设计过程中遇到以下问题:(1)回车结束程序问题调用DOS功能多字符输入0ah时输入的最后一个字符
9、为回车。但是在输入查询字符和输出结果的时候,如果不加回车结束程序,程序会在输入查询字符的瞬间输出结果并退出程序,导致无法确认结果;(2)程序使用范围问题题目当中没有限定字符串的长度,但是这里用到的DOS功能调用多字符输入0ah所能输入的缓冲区中用于存放字符的区域最多只能存放255个字符(最后一个字节留给回车符),加上缓冲区第1个字节存放预定字符个数,第2个字节保留用于调用返回时存放实际输入的字符个数,实际中缓冲区最大的使用空间为257个字节,存放字符串最大长度为254个字节,需要编程进行限定。(3)结果分离储存问题由于DOS功能调用多字符输入0ah所能输入的缓冲区中一个字符在该字符串中最多重复
10、出现的次数为254。那么在输出的时候需要输出三位数。在具体方案论证中已经确定使用把结果的三位数分离成三个0到9的字符的方法。需要考虑如何实现这一功能。(4)结果输出转换问题由于在寄存器中存入的为二进制数,在输出的时候需要显示十进制的数。但二进制数据从寄存器不能直接输出到屏幕上,要经过转换并调用多字符输出9号功能进行输出。需要考虑9号功能的使用方法和如何正确地输出字符。还应该对输出结果进行优化。5.2问题解决方法对于以上的问题,经过考虑和尝试之后,得到以下解决方案:(1)回车结束程序问题受到DOS功能调用多字符输入0ah输入字符最后结束的时候要输入回车符的启发,设置一个只有一个字节的区域,然后用
11、DOS功能调用多字符输入0ah调用这个区域。该缓冲区只能输入一个字符,而要结束输入要输入回车符,因此只有输入回车的时候才会结束0ah的调用,到下一步或退出程序,而输入其他的字符无效。将此段程序加到查询字符输入和输出结果之后,可以实现按回车结束的功能。但是要注意的是,由于需要调用0ah,则dx与ah寄存器不能在调用前存放数据,不然会被覆盖。需要用其他寄存器代替来存储统计次数。(2)程序适用范围问题划分缓冲区的时候,定义变量时用DB定义为8位字节型数据,每一字节可以存放一个字符。DOS功能调用多字符输入0ah最多输入255个字符,因此在调用伪指令dup时,重复次数的设置不能超过255。若超过255
12、,则在微机原理实验集成环境MF2KP中运行时会产生“无法生成obj文件”错误。(3)结果分离储存问题预定三个8位寄存器分别存放三位数的个、十、百位,并清零。注意这三个寄存器不能是al、cx。al存放查询字符,cl存放循环次数。ch没有使用,但是由于cl在循环比较时自动减1,为0时会向ch借位,会影响ch中的数据,也会造成循环次数不正确,因此ch应清零。在进行字符比较的时候,若字符相同则个位的寄存器上的数加1,然后个位与0ah比较,若相等,则个位清零,存放十位的寄存器的数加1;当达到10,即0ah时,个位不会存0ah,而是清零。如此类推,设置十位和百位。这就保证了各位上的数是0至9,而且分别存在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 统计 字符串 某个 字符 出现 次数

限制150内