ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:80.13KB ,
资源ID:10333102      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10333102.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机设计报告字符串分类统计.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单片机设计报告字符串分类统计.docx

1、单片机设计报告字符串分类统计目 录一、摘要3二、系统设计41、内容42、思路43、程序设计64、调试结果12三、系统总结13四、人员分工14五、参考文献15一、摘要本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。二、系统设计1、内容从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的

2、个数。2、思路(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。(2).在数据段中定义各种字符提示信息以便程序清晰明白。(3).定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。定义OTHERCHAR、BIGCHAR、SMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。(4).首先调用DOS 10号功能用DX指定BUF区,将输入的字符串保存到BUF区中。(5).将BUF+1的内容取出来,判断是否为0,如果为0表示没有输入任何字符,则程序跳到NEXTLAP(输出提示信息You do not inpu

3、t any string!),然后显示字符串(Do you want to input a string again(Y/N)?)然后调用DOS 1号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。(6).如果输入了字符串,则调用DOS 2号功能将BUF里的内容输出来(2号功能可以输出$符号而9号功能遇到$符号就终止)。(7).取字符出来进行比较统计,如果它比30H大且比39H小则为数字,如果比41H大且比5AH小则为大写字符,如果比61H大且比7AH小则为小写字符,如果不是这三种情况则为其它字符。注:DX存数字个数,BX存小写字母个

4、数,DI存大写字母个数,BP存其它字符个数。(8).将数字个数、大写字母个数、小写字母个数、其它字符个数依次放入NUM区。(9).依次输出各字符: a.判断数字个数是否为0,如果为0则输出提示没有此类数据,否则输出数字个数以及有哪些数字。 b.判断大写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出大写字符的个数以及输入的哪些大写字符。 c.判断小写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出小写字符的个数以及输入的哪些小写字符。 d.判断其它字符个数是否为0,如果为0则输出提示没有此类数据,否则输出其它字符的个数以及输入的哪些其它字符。(10).然后将程序跳到NEXT

5、LAP继续执行,依次下去。流程图:3、程序设计shuchu MACRO ;定义宏,用来输出统计其它字符、数字、大小写 个数 LOCAL NEXT MOV AH,0 MOV BL,10 DIV BL MOV DL,AL MOV BH,AH ;将余数暂时存放在BH中 CMP AL,0 JZ NEXT OR DL,30h MOV AH,2 INT 21HNEXT: MOV DL,BH OR DL,0 ;输出余数 MOV AH,2 INT 21H dismsg CRLF ;回车换行 ENDM dismsg MACRO message ;输出字符串 LEA DX,message MOV AH,9 INT

6、 21H ENDMDATAS SEGMENTSTR DB The input string is:$STR1 DB Please input a string:$STR2 DB The integer is:$STR3 DB The bigchar is:$STR4 DB The smallchar is:$STR5 DB The otherchar is:$ STR6 DB The date of integer is null!$STR7 DB The date of otherchar is null!$STR8 DB The data of bigchar is null!$STR9

7、DB The data of smallchar is null!$NUM2 DB The number of integer is:$NUM3 DB The number of bigchar is:$NUM4 DB The number of smallchar is:$NUM5 DB The number of otherchar is:$ NUM6 DB Do you want to input a string again?(Y/N):$NUM7 DB You do not input any string!$NUM8 DB Please input correct command!

8、$BUF DB 100 ;定义缓冲区用来存放输入的字符串 DB ? DB 100 DUP (24H)CRLF DB 0AH,0DH,$NUM DB 4 DUP(?)BIGCHAR DB 100 DUP(24H),0AH,0DH,$SMALLCHAR DB 100 DUP(24H),0AH,0DH,$OTHERCHAR DB 100 DUP(24H),0AH,0DH,$TAIL DB ? ;用来存放其它字符的个数DATAS ENDSSTACKS SEGMENT STACK1 DW 100 DUP(24H) TOP LABEL WORDSTACKS ENDSCODES SEGMENT ASSUME

9、 CS:CODES,DS:DATAS,SS:STACKSSTART: AGAIN1: MOV AX,STACKS MOV SS,AX MOV SP,OFFSET TOP MOV AX,DATAS MOV DS,AX MOV CX,100AGAIN2: LEA SI,BIGCHAR MOV SI,24H LEA DI,SMALLCHAR MOV DI,24H LEA BX,OTHERCHAR MOV BX,24H INC SI INC DI INC BX LOOP AGAIN2 dismsg STR1 ;显示输入提示信息 MOV AH,10 ;输入字符串 LEA DX,BUF INT 21H d

10、ismsg CRLF ;回车换行 CMP BUF+1,0 JZ NEXTLAP dismsg STR ;提示输入字符串 MOV CL,BUF+1 LEA SI,BUF+2ABC: MOV DL,SI ;用于输出缓冲区里的输入字符串 MOV AH,2 INT 21H INC SI LOOP ABC dismsg CRLF ;回车换行 MOV CL,BUF+1 ;将字符串的个数放入CL LEA SI,BUF+2 ;取字符串的首地址 MOV DX,0 ;DX统计数字个数 MOV BX,0 ;BX统计小写字母个数 MOV DI,0 ;DI统计大写字母个数 MOV BP,0 ;BP统计其他字符的个数 M

11、OV AH,0L1: MOV AL,SI CMP AL,30H JL NEXT1 CMP AL,39H JG L2 PUSH AX INC DX ;统计数字字符的个数 JMP NEXT L2: CMP AL,41H ;统计大写字符的个数 JL NEXT1 CMP AL,5AH JG L3 MOV BIGCHARDI,AL INC DI JMP NEXT L3: CMP AL,61H ;统计小写字符的个数 JL NEXT1 CMP AL,7AH JG NEXT1 MOV SMALLCHARBX,AL INC BX JMP NEXT NEXT1: MOV OTHERCHARBP,AL INC BP

12、 ;统计其它字符的个数 NEXT: INC SI DEC CL JNZ L1 MOV NUM,DL ;将统计的个数存放在NUM的存储区 MOV AX,DI ;数字个数放在NUM,大写字符个数放在NUM+1 MOV NUM+1,AL ;小写字符个数放在NUM+2,其他字符的个数放在NUM+3 MOV NUM+2,BL MOV AX,BP MOV TAIL,AL ;将其它字符的个数送入TAIL保存,以便后来输出(否则9号功能输出遇$则退出) MOV NUM+3,AL CMP NUM,0 ;判断数字个数如果为0则输出提示符,否则循环输出 JZ NNULL dismsg STR2 ;输出数字字符的提示

13、符 MOV CL,NUM MOV BP,OFFSET TOP SUB BP,2OK: MOV DX,STACK1BP MOV AH,2 INT 21H SUB BP,2 LOOP OK dismsg CRLF dismsg NUM2 ;输出数字字符数字的提示符 MOV AL,NUM ;输出数字字符的个数 shuchu JMP NNULL1NNULL: dismsg STR6 NNULL1: dismsg CRLF CMP NUM+1,0 ;判断大写字符的个数如果为0则输出提示符,否则以字符串形式输出 JZ BNULL dismsg STR3 ;输出大写字符的提示符 dismsg BIGCHAR

14、 dismsg CRLF dismsg NUM3 ;输出大写字符数字个数提示符 MOV AL,NUM+1 ;输出大写字符的个数 shuchu JMP BNULL1 BNULL: dismsg STR8BNULL1: dismsg CRLF CMP NUM+2,0 ;判断小写个数,如果为0则输出提示符,否则以字符串形式输出 JZ SNULL dismsg STR4 ;输出小写字符的提示符 dismsg SMALLCHAR dismsg CRLF dismsg NUM4 ;输出小写字符数字个数的提示符 MOV AL,NUM+2 ;输出小写字符的个数 shuchu JMP SNULL1SNULL:

15、dismsg STR9SNULL1: dismsg CRLF CMP TAIL,0 ;判断其他字符的个数如果为0则输出提示符,否则循环输出 JZ ONULL dismsg STR5 ;输出其它字符的提示符 MOV CL,TAIL MOV SI,OFFSET OTHERCHARL4: ;输出其它字符 MOV DL,SI MOV AH,2 INT 21H INC SI LOOP L4 dismsg CRLF dismsg NUM5 ;输出其它字符个数的提示符 MOV AL,NUM+3 ;输出其它字符的个数 shuchu JMP AGAINONULL: dismsg STR7 JMP AGAINNE

16、XTLAP: dismsg NUM7AGAIN: dismsg CRLF dismsg NUM6 MOV AH,01H INT 21H MOV BL,AL dismsg CRLF CMP BL,Y JZ AGAIN1 CMP BL,y JZ AGAIN1 CMP BL,N JZ ONULL2 CMP BL,n JZ ONULL2 dismsg NUM8 JMP AGAINONULL2: MOV AH,4CH INT 21HCODES ENDSEND START 调试结果:1)所有字符都有的时候:2)其中有字符类型缺少的时候: 3)什么字符都不输入的时候:三、系统总结刚抽到这个题目时,老师就说我

17、们的题目是所有题目中最简单的,于是非常庆幸。但是当我们真正去做它的时候却发现并不是那么回事。在写程序的时候首先要考虑很多问题,如何判断、如何显示、遇到$要怎么处理等等。尤其当我们将四种字符依次保存起来以便后来输出的时候用,就遇见了一个比较大的麻烦,当时能用的四种可以用于地址的寄存器都用上了,但是感觉缺少一个,怎么办呢?最后还是用堆栈解决了。可是一开始输出的时候就遇见了错误,就是用堆栈保存的那个输不出来。到底是哪里错了呢?最后发现在存储器中堆栈存储是从高地址往低地址存的,每次取的时候应该是地址减2而不是加2。所以通过这次课程设计也使我们对存储器的堆栈存储有了一个比较大概的了解。最终,在大家的共同

18、努力下,程序完成了,我们心里的一块石头放下了。但是事情总有不如意,在老师说要准备验证程序的那个星期,我们回来重新运行了程序,当时一想我们输入的时候都是几种类型的字符都输入,那么如果缺少其中一种呢?再次运行时少输入了一种类型的字符,这时问题出现了,出现了乱码。当时我们就慌了,于是大家凑到一起赶紧修改。大家你一言我一句纷纷发表自己的看法,东改改西改改,最终大功告成。这次缺少其中一种两种它都会输出相应的字符类型为空,这次大家都放心了。我说过,事情总有不如意。程序又出现了问题。过了几天我们又想到一个问题,输入缺少一种两种可以了,那么不输入字符会怎么样呢?于是再次把程序运行,这次什么也不输入直接回车结束

19、。果然,这次又出现了乱码。这次大家没有慌,因为有了上一次的经验,于是稍微把程序改改,跟之前的类似,问题还是很轻松的被解决了。通过这一次两次的发现问题,解决问题,我们很清楚的认识到了一点。想一件事情得到完善,不在于已经知道的问题,知道什么问题只要去努力,去探讨,最终还是可以解决的;关键是能不能发现问题所在,只有发现了才有可能去解决。如果连问题是什么都不知道,那么还谈什么解决呢。同时我们也看到了集体的力量,我们集体合作,各抒己见,把不同的思维结合起来,然后每个人从不同角度去发现问题,再通力合作去解决问题,最终完成我们的杰作。虽然程序是完成了,但是程序当中依然还存在可以完善的部分,但是由于我们的能力

20、有限,以我们目前的能力水平只能做到这种地步了。我们的这个程序的优、缺点如下: 优点: a不管你输入什么字符我们都能将其回显出来。 b不管你输入的字符全不全面,我们都能统计出来。 c对于那些你没有输入的类型,我们将提示此类型无数据,这样可以一目了然。 d程序结束时提醒你要不要继续输入字符串,可以循环输入。 缺点: 程序中用到了大量的JMP语句,这样会影响程序的运行速度。四、人员分工与其说分工还不如说合作,我们其实没有什么明确的分工,大概介绍下我们的流程。开始在组长的安排下,我们每个人的任务是带着目标将课本上相关例题看懂,汲取相关思想。考虑到我们的题不是太难也不是很复杂,每个人试着做出部分的程序,然后一起讨论一下怎么改进和融合。再由施文军和陈远涛先将流程图制作出来,每个人轮流做相应讲解。让每个人不仅明白自己写的部分,还要明白别人的部分。最后组长孙长城将大家在编写过程遇到的困难和解决方案及实验感想做个总结。五、参考文献【1】楼顺天、周佳设.微机原理与接口技术.第一版.科技出版社,2006【2】钱晓捷.新版汇编语言程序设计.电子工业出版社.2008【3】葛洪伟、姜浩伟、赵雅群、黄蓓.Intel汇编语言程序设计.第一版.中国电力出版社,2007【4】张雪兰.Windows汇编语言程序设计教程.电子工业出版社

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2