《微机原理课程设计--字符串分类统计(共13页).doc》由会员分享,可在线阅读,更多相关《微机原理课程设计--字符串分类统计(共13页).doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 微机原理 课程设计报告题 目: 字符串分类统计 学生姓名: 周喜民 学 号: 32 专业班级: 计0601 同组姓名: 赵晏龙 陈顺 指导教师: 范轶彦 设计时间: 2010.1.4-2010.1.10 指导老师意见:评定成绩: 签名: 日期:目录一、需求分析 本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。 程序
2、接收用户键入的一行字符(字符长度不大于80个,以回车结束),并把字符,数字,其它字符分类计数,然后将结果存入以Letter,Digit,Other为名的存储单元中。 程序可采用0AH断将键入的字符直接送至键盘缓冲区,然后逐个取出分类计数。也可采用01H在接收字符后进行分类奇数在存入缓冲区。程序需要进入DEBUG看计数结果二、系统设计1.内容从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。2思路(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。(2).在数据段中定义各种字符提示信息以便程序清晰明白。(
3、3).定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。定义OTHERCHAR、BIGCHAR、SMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。(4).首先调用DOS 10号功能用DX指定BUF区,将输入的字符串保存到BUF区中。(5).将BUF+1的内容取出来,判断是否为0,如果为0表示没有输入任何字符,则程序跳到NEXTLAP(输出提示信息You do not input any string!),然后显示字符串(Do you want to input a string again(Y/N)?)然后调用DOS 1
4、号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。(6).如果输入了字符串,则调用DOS 2号功能将BUF里的内容输出来(2号功能可以输出$符号而9号功能遇到$符号就终止)。(7).取字符出来进行比较统计,如果它比30H大且比39H小则为数字,如果比41H大且比5AH小则为大写字符,如果比61H大且比7AH小则为小写字符,如果不是这三种情况则为其它字符。注:DX存数字个数,BX存小写字母个数,DI存大写字母个数,BP存其它字符个数。(8).将数字个数、大写字母个数、小写字母个数、其它字符个数依次放入NUM区。(9).依次输出各字符:
5、a.判断数字个数是否为0,如果为0则输出提示没有此类数据,否则输出数字个数以及有哪些数字。 b.判断大写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出大写字符的个数以及输入的哪些大写字符。 c.判断小写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出小写字符的个数以及输入的哪些小写字符。 d.判断其它字符个数是否为0,如果为0则输出提示没有此类数据,否则输出其它字符的个数以及输入的哪些其它字符。(10).然后将程序跳到NEXTLAP继续执行,依次下去。三、系统总体框图四、调试分析本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。
6、本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。五、实验结果1)所有字符都有的时候:2)其中有字符类型缺少的时候:3)什么字符都不输入的时候:六、程序设计shuchu MACRO ;定义宏,用来输出统计其它字符、数字、大小写 个数 LOCAL NEXT MOV AH,0 MOV BL,10 DIV BL MOV DL,
7、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 21H ENDMDATAS SEGMENTSTR DB The input string is:$STR1 DB Please input a string:$STR2 DB The integer is:$S
8、TR3 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 DB The data of smallchar is null!$NUM2 DB The number of integer is:$NUM3 DB The number of bigchar is:$NUM4
9、 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!$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
10、,0DH,$OTHERCHAR DB 100 DUP(24H),0AH,0DH,$TAIL DB ? ;用来存放其它字符的个数DATAS ENDSSTACKS SEGMENT STACK1 DW 100 DUP(24H) TOP LABEL WORDSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: AGAIN1: MOV AX,STACKS MOV SS,AX MOV SP,OFFSET TOP MOV AX,DATAS MOV DS,AX dismsg STR1 ;显示输入提示信息 MOV AH,10 ;输入字
11、符串 LEA DX,BUF INT 21H dismsg 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统计大写字母个数
12、MOV BP,0 ;BP统计其他字符的个数 MOV 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: MO
13、V OTHERCHARBP,AL INC BP ;统计其它字符的个数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
14、dismsg STR2 ;输出数字字符的提示符 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 ;输出大
15、写字符的提示符 dismsg BIGCHAR 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 ;输出小写字符的个数 sh
16、uchu JMP SNULL1SNULL: 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: d
17、ismsg STR7 JMP AGAINNEXTLAP: 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 AGAIN1ONULL2: MOV AH,4CH INT 21HCODES ENDSEND START 七、总结微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。讨论某一部分原理时又要涉及到其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解
18、计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。这次实验并不是很难,主要的困难来自对程序的理解。功夫不负有心人,经过四个人的合作和努力,我们最
19、后对实验的原理有了清晰的认识。虽然实验台上的很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。这次课设却让我们对实验台有了足够的了解,让我们知道了实验台上各个模块的用法;而且它还让我们对自己动手写程序来控制实验台的运作有了一定的基础。虽然实验台只是一个小型的模拟平台,但是通过对它的学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。实验中个人的力量是不及群体的力量的,我们四个人分工合作,做事的效率高了很多。虽然有时候会为了一些细节争论不休,但最后得出的总是最好的结论。而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有
20、问题。总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。感谢老师的悉心指导。对课程设计的建议本次课程设计的三个实验相对都比较简单,而且经过老师的讲解以及实验书上的指导,几乎把我们要用到的程序和实验台电路的接线方法都告诉我们了,所以做起来很容易。但是做完实验,我们对实验台及其上面的各个模块还是不了解。对如何编程控制实验台上各个模块和芯片的运作也没有什么清晰的认识。如果老师对我们实验报告的要求再严格一点,也许同学们会更加自觉地去认真理解程序和实验思路。八、参考文献【1】楼顺天、周佳设.微机原理与接口技术.第一版.科技出版社,2006【2】钱晓捷.新版汇编语言程序设计.电子工业出版社.2008【3】葛洪伟、姜浩伟、赵雅群、黄蓓.Intel汇编语言程序设计.第一版.中国电力出版社,2007【4】张雪兰.Windows汇编语言程序设计教程.电子工业出版社专心-专注-专业