欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年统计字符串中某个字符出现次数整理 .pdf

    • 资源ID:39711842       资源大小:666.75KB        全文页数:17页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年统计字符串中某个字符出现次数整理 .pdf

    武汉理工大学微机原理与接口技术课程设计目录摘要.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名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书1 摘要微机原理与接口技术作为计算机科学领域的基础知识,尽管计算机科学高速发展,但基本原理依然不变,即是遵循冯诺依曼基本思想的。学习并能掌握好微机原理与接口技术这门知识是非常重要的,通过对这门知识的了解可以简单的编写一些日常中经典的控制程序。本文通过汇编语言编写程序,完成统计字符串中某个字符出现次数这一基本功能。下面会介绍该程序的编程思路,并对程序设计中遇到的问题进行深入的研究。关键字:微机统计编程名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书2 统计字符串中某个字符出现次数汇编语言程序设计1 课程设计目的通过本次课程设计,熟悉微机原理与接口技术的基本理论,使学生能够进一步了解微型计算机工作原理,微型计算机的硬件结构及微型计算机软件编程,掌握使用汇编语言编写程序的方法,并进一步提高编程设计能力。2 设计条件及要求本次微机原理与接口技术课程设计的题目为统计字符串中某个字符出现的次数,为汇编程序设计。2.1 程序设计条件采用 16 位微处理器8086 CPU以及 86 系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS 中的微机原理实验集成环境MF2KP。2.2 程序设计要求设计汇编语言程序,实现统计字符串中某个字符出现次数的功能,具体功能要求如下:(1)提示输入字符串;输入任意字符串string,点击 Enter结束输入;(2)提示输入字符;输入任意字符ch,点击 Enter 结束输入;(3)输出字符串 string 中字符 ch的出现次数。点击Enter程序退出。3 总体方案论证3.1 总体方案思路要使用汇编语言实现统计字符串中某个字符出现次数的功能,总体的思路为:取出字符串 string 中的字符,依次与字符ch 进行比较,同时统计该字符与字符ch 相同的次数,最后输出结果到屏幕名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书3 步骤大体分为以下几点:(1)从键盘输入字符串string,同时得到字符串中的字符总数,并保存在寄存器中;(2)从键盘输入查询字符ch,并保存在寄存器al 中;(3)从寄存器中循环取出字符串string 中的字符,依次与字符ch 进行比较,并记录相同的次数,存入寄存器中;(4)从寄存器中取出结果,转换成字符输出到屏幕上。3.2 方案注意事项根据程序设计要求,设计方案中需要注意的有以下几点:(1)提示语句。需要在屏幕上显示提示输入字符和字符串及输出结果的提示语句;(2)回车结束。需要在输入字符和字符串之后按Enter 键才结束输入,输出结果后按Enter 键才退出程序;(3)程序使用范围。需要考虑程序能处理的字符串的最大长度;(4)结果输出形式。由于在寄存器中存入的为二进制数,在输出的时候需要显示十进制的数;(5)结果输出转换。二进制数据从寄存器不能直接输出到屏幕上;3.3 具体方案论证根据总体方案思路,程序的核心是取字符串中的字符与查询字符ch 循环比较。根据输出结果需要为十进制这一要求,以下有两种方案可以实现这一功能。3.3.1方案一方案一:将寄存器中的二进制数据转换成BCD 码输出具体步骤:(1)在进行字符比较的同时把统计结果存入寄存器中;(2)统计结束之后,取出统计结果,并判断是否需要转换成BCD 码进行转换;(3)把结果转换成字符输出。论证:该方案有以下优点:(1)由于统计结果最大为254,只需要使用一个8 位寄存器来存放数据,调用方便;(2)数据连续,占用储存空间小;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书4(3)设计思路简单,简化程序的循环部分。但该方案有以下缺点:(1)输出程序段复杂,需要外加判断子程序;(2)转换复杂,判断部分随着位数增多而变得复杂;(3)统计结果受限制。如果输出三位数,由于转换复杂,输出变得难以实现;3.3.2方案二方案二:将三位数的输出结果分离成三个0 到 9 的字符逐个输出具体步骤:(1)在统计次数的过程中限制统计结果中每位上的数不大于9;(2)把三位数各存放到三个8 位寄存器中;(3)输出时按顺序转换成字符逐个输出。论证:此方案有以下优点:(1)输出段程序简单,不需要外加判断子程序;(2)转换方便,循环比较时直接限制;(3)位数由可以调用的8 位寄存器个数决定,可以简单实现三位数的输出。但该方案有以下缺点:(1)需要用三个 8 位寄存器,调用不方便;(2)存放结果的每个 8 位寄存器只用到 4 位,浪费存储空间;(3)循环比较部分复杂,数据储存不方便。3.3.3方案论证方案一与方案二相比,循环比较时统计结果简单,但输出结果为三位数时,方案一编程复杂,难以实现;而方案二使用三个8 位寄存器,理论上可以统计0 至 999 的统计次数的输出,满足最大统计结果254 个字节,而且编程简单。就本程序而言,8 个 8 位寄存器可以满足方案二中寄存器个数的要求。因此选用方案二。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书5 4 流程图设计及说明4.1 流程图按照总体方案设计流程图。流程图如下:图 4.1 程序流程图4.2 设计说明按照总体方案,先设置缓冲区放置数据。再输入字符串,并把字符串长度即循环次数名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书6 传到 dl。然后输入查询字符ch。取字符串第一个字符与查询字符比较,相同时统计结果加1,不相同时跳过加1 步骤。循环次数减 1,当减至 0 时,输出统计结果。5 软件设计关键问题和相应程序段5.1 关键问题说明在程序设计过程中遇到以下问题:(1)回车结束程序问题调用 DOS 功能多字符输入 0ah时输入的最后一个字符为回车。但是在输入查询字符和输出结果的时候,如果不加回车结束程序,程序会在输入查询字符的瞬间输出结果并退出程序,导致无法确认结果;(2)程序使用范围问题题目当中没有限定字符串的长度,但是这里用到的 DOS 功能调用多字符输入0ah 所能输入的缓冲区中用于存放字符的区域最多只能存放255 个字符(最后一个字节留给回车符),加上缓冲区第 1 个字节存放预定字符个数,第2 个字节保留用于调用返回时存放实际输入的字符个数,实际中缓冲区最大的使用空间为257 个字节,存放字符串最大长度为254 个字节,需要编程进行限定。(3)结果分离储存问题由于 DOS 功能调用多字符输入0ah所能输入的缓冲区中一个字符在该字符串中最多重复出现的次数为254。那么在输出的时候需要输出三位数。在具体方案论证中已经确定使用把结果的三位数分离成三个0 到 9 的字符的方法。需要考虑如何实现这一功能。(4)结果输出转换问题由于在寄存器中存入的为二进制数,在输出的时候需要显示十进制的数。但二进制数据从寄存器不能直接输出到屏幕上,要经过转换并调用多字符输出9 号功能进行输出。需要考虑 9 号功能的使用方法和如何正确地输出字符。还应该对输出结果进行优化。5.2 问题解决方法对于以上的问题,经过考虑和尝试之后,得到以下解决方案:(1)回车结束程序问题受到 DOS 功能调用多字符输入0ah输入字符最后结束的时候要输入回车符的启发,设名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书7 置一个只有一个字节的区域,然后用 DOS 功能调用多字符输入0ah 调用这个区域。该缓冲区只能输入一个字符,而要结束输入要输入回车符,因此只有输入回车的时候才会结束0ah的调用,到下一步或退出程序,而输入其他的字符无效。将此段程序加到查询字符输入和输出结果之后,可以实现按回车结束的功能。但是要注意的是,由于需要调用 0ah,则 dx 与 ah寄存器不能在调用前存放数据,不然会被覆盖。需要用其他寄存器代替来存储统计次数。(2)程序适用范围问题划分缓冲区的时候,定义变量时用DB 定义为 8 位字节型数据,每一字节可以存放一个字符。DOS 功能调用多字符输入0ah 最多输入 255 个字符,因此在调用伪指令dup 时,重复次数的设置不能超过255。若超过 255,则在微机原理实验集成环境MF2KP 中运行时会产生“无法生成obj 文件”错误。(3)结果分离储存问题预定三个 8 位寄存器分别存放三位数的个、十、百位,并清零。注意这三个寄存器不能是 al、cx。al 存放查询字符,cl 存放循环次数。ch 没有使用,但是由于cl 在循环比较时自动减 1,为 0 时会向 ch 借位,会影响 ch 中的数据,也会造成循环次数不正确,因此 ch 应清零。在进行字符比较的时候,若字符相同则个位的寄存器上的数加1,然后个位与 0ah比较,若相等,则个位清零,存放十位的寄存器的数加1;当达到 10,即 0ah时,个位不会存 0ah,而是清零。如此类推,设置十位和百位。这就保证了各位上的数是0 至 9,而且分别存在三个 8 位寄存器中。(4)结果输出转换问题使用 DOS 功能调用多字符输出9 号输出字符时是读取字符的ASCII 码。在 ASCII 码表中,字符 09 对应的 ASCII 码为 30h39h而在三个寄存器中的储存的数为01h09h。因此在输出之前,寄存器中的储存的统计结果要加上30h 转换成 ASCII 码。输出还可以优化。输出时按照百位、十位、个位的顺序输出。当百位为0 时,用转移指令跳过百位的输出;当百位和十位同时为0 时,跳过百位和十位的输出。5.3 相应程序段(1)回车结束程序段名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书8 over db 1,?,1 dup(?);设置只能储存一个字节的缓冲区,lea dx,buff;输入 ENTER 结束mov ah,0ah int 21h(2)范围设置程序段buff db 255,?,255 dup(?);字符个数不能超过255(3)分离储存程序段again:cmp al,si;取字符串的字符与查询字符循环比较jnz next inc dl;查询结果个位放在DL cmp dl,0ah jnz next inc dh;查询结果十位放在DH xor dl,dl cmp dh,0ah jnz next inc bh;查询结果百位放在BH xor dh,dh next:inc si loop again(4)输出转换程序段xor cl,cl cmp ch,cl jz liangwei;若输出结果为两位数,则不显示百位的0 mov dl,ch add dl,30h;百位转换成 ASCII 码mov ah,2;输出百位int 21h 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书9 jnz sanwei;若输出结果为三位数,则当十位为0 时显示十位liangwei:cmp bh,cl;若输出结果为一位数,则不显示十位的0 jz yiwei sanwei:mov dl,bh add dl,30h;十位转换成 ASCII 码mov ah,2;输出十位int 21h yiwei:mov dl,bl add dl,30h;个位转换成 ASCII 码mov ah,2;输出个位int 21h 6 程序调试程序见附录6.1 调试步骤(1)输入单字字符作为字符串,并输入不同查询字符;(2)输入单字字符作为字符串,并输入相同查询字符;(3)输入十个以上相同的字符作为字符串,并输入相同查询字符;(4)输入一百个以上相同的字符作为字符串,并输入相同查询字符;(5)输入相同字符直到不能输入为止,并输入相同查询字符;(6)输入一串任意字符作为字符串,并输入查询字符;6.2 调试中出现的问题(1)程序完整输入之后,连接运行。但是无论输入什么样的字符,输出的结果都为零;(2)解决了问题(1)之后,当结果为100109时,结果显示为 1019.6.3 问题原因及解决方法问题(1):原因:在输入查询字符之后,直接接入了回车结束程序段,导致查询字符被覆盖,在循环比较的时候字符串中没有字符与查询字符一致,统计结果输出为0。名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书10 解决方法:把回车结束程序段接到循环比较部分之后。注意如果存储统计结果的三个8 位寄存器用到 al、dx 或 dl 的话,要先转移数据。问题(2):原因:在输出的时候,原本当结果的百位为0 时,跳过百位的输出,当百位和十位同时为 0 时,跳过百位和十位的输出。但是由于设置成当百位为0 时,跳过百位的输出,十位同时为 0 时,跳过十位的输出,导致当百位为1,十位为 0 时,十位输出被跳过。所以结果为 100109时,结果显示为 1019。解决方法:增加转移指令,使得当百位为1 时,全部输出。7 结果记录及分析调试步骤(1)输入单字字符 a 作为字符串,并输入查询字符b 时,输出结果为 0;调试步骤(2)输入单字字符 a作为字符串,并输入查询字符a时,输出结果为 1。证明个位输出正确,而且输出把百位和十位的0 屏蔽,运行正常。图 7.1 调试步骤(1)结果图 7.2 调试步骤(2)结果名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书11 调试步骤(3)输入 14 个相同的字符“aaaaaaaaaaaaaa”作为字符串,并输入查询字符a,输出结果为 14。证明十位输出正确,而且输出把百位的0 屏蔽,运行正常。图 7.3 调试步骤(3)结果调试步骤(4)输入 105 个相同的字符“aaaa,aaaa”作为字符串,并输入查询字符a,输出结果为 105。证明十位输出正确,而且输出把百位的0 屏蔽,运行正常。图 7.4 调试步骤(4)结果调试步骤(5)输入相同字符“aaaa,aaaa”直到不能输入为止,并输入查询字符a,输出结果为 254。证明本程序最大可统计重复次数为254。图 7.5 调试步骤(5)结果名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书12 调试步骤(6)输入一串任意字符“asdasd”作为字符串,并输入查询字符a,输出结果为 2。证明本程序可查询任意字符,并运行正常。图 7.6 调试步骤(6)结果综上所述,程序功能完整,能够正常运行,符合要求课程设计要求。8 课程设计收获及心得体会通过本次课程设计,我更加了解微机原理与接口技术课程的基本原理,熟悉运用汇编语言编程,进一步了解汇编语言中各种程序指令。在这次课程设计中,我对于微机原理中DOS功能调用的运用更加熟练,编程能力进一步提高。我拿到的课程设计题目是编写程序来实现统计字符串中某个字符出现次数这一功能。刚开始觉得这个题目很简单,在平时微机课的课本和作业里也有出现过类似的题目。当我把程序编好并输入电脑,运行的时候,出现了意想不到的事:输出结果一闪而过,程序迅速退出。程序是可以正确的,但是没有设置停顿。这让我懂得,在书本和作业上的程序都是理想化的,在实际的操作中需要进行优化,从而更加符合人的需求。这个课程设计题目中对程序的统计次数没有要求。对于这个题目我原本的方案可以实现程序的功能,但是对统计次数有限制。于是我更改方案,使得统计次数没有要求。虽然在对程序优化的过程中很辛苦,但是当自己的想法可以实现的时候,还是觉得收获很大。在完成这次课程设计的时候,我提高了自己的编程能力,并知道了自己之前学习微机原理课的时候的不足,让我更加深入的研究和掌握这一门课程。名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书13 9 参考文献1彭虎等编著微机原理与接口技术(第二版)北京:电子工业出版社,2008 2沈美明,温东禅 IBM-PC 汇编语句程序设计(第2 版)北京:清华大学出版社,2001 3任向明,卢惠林汇编语言程序设计实用教程北京:清华大学出版社,2009 4马力妮 80 x86 汇编语言程序设计北京:机械工业出版社,2004 5曹加恒,苏光奎,许先斌新一代汇编语言程序设计北京:高等教育出版社,2003 名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书14 10 附录具体程序如下:data segment inf1 db 0dh,0ah,Please input string:$inf2 db 0dh,0ah,0dh,0ah,Please input a word:$inf3 db 0dh,0ah,0dh,0ah,Result:$buff db 255,?,255 dup(?)over db 1,?,1 dup(?)data ends code segment assume ds:data,cs:code begin:mov ax,data mov ds,ax lea dx,inf1;提示输入字符串mov ah,9 int 21h lea dx,buff;从键盘输入字符串,按enter结束mov ah,0ah int 21h lea dx,inf2;提示输入查询字符mov ah,9 int 21h mov ah,1;从键盘输入查询字符int 21h mov cl,buff+1;字符总数xor ch,ch lea si,buff+2;字符串首地址xor dh,dh 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书15 xor bx,bx again:cmp al,si;取字符串的字符与查询字符循环比较jnz next inc bl;查询结果个位放在BL cmp bl,0ah jnz next inc bh;查询结果十位放在BH xor bl,bl cmp bh,0ah jnz next inc dh;查询结果百位放在DH xor bh,bh next:inc si loop again mov ch,dh lea dx,over;按 ENTER 结束查询字符的输入mov ah,0ah int 21h lea dx,inf3;提示输出结果mov ah,9 int 21h xor cl,cl cmp ch,cl jz er;若输出结果为两位数,则不显示百位的0 mov dl,ch add dl,30h;百位转换成 ASCII 码mov ah,2;输出百位int 21h 名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 17 页 -武汉理工大学微机原理与接口技术课程设计说明书16 jnz san;若输出结果为三位数,则当十位为 0 时显示十位er:cmp bh,cl jz yi;若输出结果为一位数,则不显示十位的0 san:mov dl,bh add dl,30h;十位转换成 ASCII 码mov ah,2;输出十位int 21h yi:mov dl,bl add dl,30h;个位转换成 ASCII 码mov ah,2;输出个位int 21h lea dx,over;按 ENTER 继续mov ah,0ah int 21h mov ah,4ch;退出程序int 21h code ends end begin 名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 17 页 -

    注意事项

    本文(2022年统计字符串中某个字符出现次数整理 .pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开