微机原理课程设计字符串分类统计.docx
《微机原理课程设计字符串分类统计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计字符串分类统计.docx(16页珍藏版)》请在冰豆网上搜索。
![微机原理课程设计字符串分类统计.docx](https://file1.bdocx.com/fileroot1/2023-2/3/502c3e8e-43be-4f45-ad34-65dccf13bbda/502c3e8e-43be-4f45-ad34-65dccf13bbda1.gif)
微机原理课程设计字符串分类统计
微机原理课程设计报告
题目:
字符串分类统计
********
学号:
32
专业班级:
计0601
同组姓名:
赵晏龙陈顺
*******
设计时间:
2010.1.4-2010.1.10
指导老师意见:
评定成绩:
签名:
日期:
一、需求分析
本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。
本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。
比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。
程序接收用户键入的一行字符(字符长度不大于80个,以回车结束),并把字符,数字,其它字符分类计数,然后将结果存入以Letter,Digit,Other为名的存储单元中。
程序可采用0AH断将键入的字符直接送至键盘缓冲区,然后逐个取出分类计数。
也可采用01H在接收字符后进行分类奇数在存入缓冲区。
程序需要进入DEBUG看计数结果
二、系统设计
1.内容
从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。
2.思路
(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。
(2).在数据段中定义各种字符提示信息以便程序清晰明白。
(3).定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。
定义OTHERCHAR、BIGCHAR、SMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。
(4).首先调用DOS10号功能用DX指定BUF区,将输入的字符串保存到BUF区中。
(5).将BUF+1的内容取出来,判断是否为0,如果为0表示没有输入任何字符,则程序跳到NEXTLAP(输出提示信息Youdonotinputanystring!
),然后显示字符串(Doyouwanttoinputastringagain(Y/N)?
)然后调用DOS1号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。
(6).如果输入了字符串,则调用DOS2号功能将BUF里的内容输出来(2号功能可以输出$符号而9号功能遇到$符号就终止)。
(7).取字符出来进行比较统计,如果它比30H大且比39H小则为数字,如果比41H大且比5AH小则为大写字符,如果比61H大且比7AH小则为小写字符,如果不是这三种情况则为其它字符。
注:
DX存数字个数,BX存小写字母个数,DI存大写字母个数,BP存其它字符个数。
(8).将数字个数、大写字母个数、小写字母个数、其它字符个数依次放入NUM区。
(9).依次输出各字符:
a.判断数字个数是否为0,如果为0则输出提示没有此类数据,否则输出数字个数以及有哪些数字。
b.判断大写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出大写字符的个数以及输入的哪些大写字符。
c.判断小写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出小写字符的个数以及输入的哪些小写字符。
d.判断其它字符个数是否为0,如果为0则输出提示没有此类数据,否则输出其它字符的个数以及输入的哪些其它字符。
(10).然后将程序跳到NEXTLAP继续执行,依次下去。
三、系统总体框图
四、调试分析
本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。
本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。
比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。
从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。
五、实验结果
1)所有字符都有的时候:
2)其中有字符类型缺少的时候:
3)什么字符都不输入的时候:
六、程序设计
shuchuMACRO;定义宏,用来输出统计其它字符、数字、大小写
个数
LOCALNEXT
MOVAH,0
MOVBL,10
DIVBL
MOVDL,AL
MOVBH,AH;将余数暂时存放在BH中
CMPAL,0
JZNEXT
ORDL,30h
MOVAH,2
INT21H
NEXT:
MOVDL,BH
ORDL,'0';输出余数
MOVAH,2
INT21H
dismsgCRLF;回车换行
ENDM
dismsgMACROmessage;输出字符串
LEADX,message
MOVAH,9
INT21H
ENDM
DATASSEGMENT
STRDB'Theinputstringis:
$'
STR1DB'Pleaseinputastring:
$'
STR2DB'Theintegeris:
$'
STR3DB'Thebigcharis:
$'
STR4DB'Thesmallcharis:
$'
STR5DB'Theothercharis:
$'
STR6DB'Thedateofintegerisnull!
$'
STR7DB'Thedateofothercharisnull!
$'
STR8DB'Thedataofbigcharisnull!
$'
STR9DB'Thedataofsmallcharisnull!
$'
NUM2DB'Thenumberofintegeris:
$'
NUM3DB'Thenumberofbigcharis:
$'
NUM4DB'Thenumberofsmallcharis:
$'
NUM5DB'Thenumberofothercharis:
$'
NUM6DB'Doyouwanttoinputastringagain?
(Y/N):
$'
NUM7DB'Youdonotinputanystring!
$'
BUFDB100;定义缓冲区用来存放输入的字符串
DB?
DB100DUP(24H)
CRLFDB0AH,0DH,'$'
NUMDB4DUP(?
)
BIGCHARDB100DUP(24H),0AH,0DH,'$'
SMALLCHARDB100DUP(24H),0AH,0DH,'$'
OTHERCHARDB100DUP(24H),0AH,0DH,'$'
TAILDB?
;用来存放其它字符的个数
DATASENDS
STACKSSEGMENT
STACK1DW100DUP(24H)
TOPLABELWORD
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
AGAIN1:
MOVAX,STACKS
MOVSS,AX
MOVSP,OFFSETTOP
MOVAX,DATAS
MOVDS,AX
dismsgSTR1;显示输入提示信息
MOVAH,10;输入字符串
LEADX,BUF
INT21H
dismsgCRLF;回车换行
CMPBUF+1,0
JZNEXTLAP
dismsgSTR;提示输入字符串
MOVCL,BUF+1
LEASI,BUF+2
ABC:
MOVDL,[SI];用于输出缓冲区里的输入字符串
MOVAH,2
INT21H
INCSI
LOOPABC
dismsgCRLF;回车换行
MOVCL,BUF+1;将字符串的个数放入CL
LEASI,BUF+2;取字符串的首地址
MOVDX,0;DX统计数字个数
MOVBX,0;BX统计小写字母个数
MOVDI,0;DI统计大写字母个数
MOVBP,0;BP统计其他字符的个数
MOVAH,0
L1:
MOVAL,[SI]
CMPAL,30H
JLNEXT1
CMPAL,39H
JGL2
PUSHAX
INCDX;统计数字字符的个数
JMPNEXT
L2:
CMPAL,41H;统计大写字符的个数
JLNEXT1
CMPAL,5AH
JGL3
MOVBIGCHAR[DI],AL
INCDI
JMPNEXT
L3:
CMPAL,61H;统计小写字符的个数
JLNEXT1
CMPAL,7AH
JGNEXT1
MOVSMALLCHAR[BX],AL
INCBX
JMPNEXT
NEXT1:
MOVOTHERCHAR[BP],AL
INCBP;统计其它字符的个数
NEXT:
INCSI
DECCL
JNZL1
MOVNUM,DL;将统计的个数存放在NUM的存储区
MOVAX,DI;数字个数放在NUM,大写字符个数放在NUM+1
MOVNUM+1,AL;小写字符个数放在NUM+2,其他字符的个数放在NUM+3
MOVNUM+2,BL
MOVAX,BP
MOVTAIL,AL;将其它字符的个数送入TAIL保存,以便后来输出(否则9号功能输出遇$则退出)
MOVNUM+3,AL
CMPNUM,0;判断数字个数如果为0则输出提示符,否则循环输出
JZNNULL
dismsgSTR2;输出数字字符的提示符
MOVCL,NUM
MOVBP,OFFSETTOP
SUBBP,2
OK:
MOVDX,STACK1[BP]
MOVAH,2
INT21H
SUBBP,2
LOOPOK
dismsgCRLF
dismsgNUM2;输出数字字符数字的提示符
MOVAL,NUM;输出数字字符的个数
shuchu
JMPNNULL1
NNULL:
dismsgSTR6
NNULL1:
dismsgCRLF
CMPNUM+1,0;判断大写字符的个数如果为0则输出提示符,否则以字符串形式输出
JZBNULL
dismsgSTR3;输出大写字符的提示符
dismsgBIGCHAR
dismsgCRLF
dismsgNUM3;输出大写字符数字个数提示符
MOVAL,NUM+1;输出大写字符的个数
shuchu
JMPBNULL1
BNULL:
dismsgSTR8
BNULL1:
dismsgCRLF
CMPNUM+2,0;判断小写个数,如果为0则输出提示符,否则以字符串形式输出
JZSNULL
dismsgSTR4;输出小写字符的提示符
dismsgSMALLCHAR
dismsgCRLF
dismsgNUM4;输出小写字符数字个数的提示符
MOVAL,NUM+2;输出小写字符的个数
shuchu
JMPSNULL1
SNULL:
dismsgSTR9
SNULL1:
dismsgCRLF
CMPTAIL,0;判断其他字符的个数如果为0则输出提示符,否则循环输出
JZONULL
dismsgSTR5;输出其它字符的提示符
MOVCL,TAIL
MOVSI,OFFSETOTHERCHAR
L4:
;输出其它字符
MOVDL,[SI]
MOVAH,2
INT21H
INCSI
LOOPL4
dismsgCRLF
dismsgNUM5;输出其它字符个数的提示符
MOVAL,NUM+3;输出其它字符的个数
shuchu
JMPAGAIN
ONULL:
dismsgSTR7
JMPAGAIN
NEXTLAP:
dismsgNUM7
AGAIN:
dismsgCRLF
dismsgNUM6
MOVAH,01H
INT21H
MOVBL,AL
dismsgCRLF
CMPBL,'Y'
JZAGAIN1
CMPBL,'y'
JZAGAIN1
ONULL2:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
七、总结
微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时又要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
这次实验并不是很难,主要的困难来自对程序的理解。
功夫不负有心人,经过四个人的合作和努力,我们最后对实验的原理有了清晰的认识。
虽然实验台上的很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。
这次课设却让我们对实验台有了足够的了解,让我们知道了实验台上各个模块的用法;而且它还让我们对自己动手写程序来控制实验台的运作有了一定的基础。
虽然实验台只是一个小型的模拟平台,但是通过对它的学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。
实验中个人的力量是不及群体的力量的,我们四个人分工合作,做事的效率高了很多。
虽然有时候会为了一些细节争论不休,但最后得出的总是最好的结论。
而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。
感谢老师的悉心指导。
对课程设计的建议
本次课程设计的三个实验相对都比较简单,而且经过老师的讲解以及实验书上的指导,几乎把我们要用到的程序和实验台电路的接线方法都告诉我们了,所以做起来很容易。
但是做完实验,我们对实验台及其上面的各个模块还是不了解。
对如何编程控制实验台上各个模块和芯片的运作也没有什么清晰的认识。
如果老师对我们实验报告的要求再严格一点,也许同学们会更加自觉地去认真理解程序和实验思路。
八、参考文献
【1】楼顺天、周佳设.《微机原理与接口技术》.第一版.科技出版社,2006
【2】钱晓捷.《新版汇编语言程序设计》.电子工业出版社.2008
【3】葛洪伟、姜浩伟、赵雅群、黄蓓.《Intel汇编语言程序设计》.第一版.中国电力出版社,2007
【4】张雪兰.《Windows汇编语言程序设计教程》.电子工业出版社