




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安徽新华学院微机原理与接口技术课程设计字符串分类统计组长:成员: 指导教师:班级:2008年12月4日目 录一、摘要3二、系统设计41、内容42、思路43、程序设计64、调试结果12三、系统总结13四、人员分工14五、参考文献15一、摘要本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。二、系统设计1、内容从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。2、思路(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。(2).在数据段中定义各种字符提示信息以便程序清晰明白。(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号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。(6).如果输入了字符串,则调用DOS 2号功能将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继续执行,依次下去。流程图: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 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 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!$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 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 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统计大写字母个数 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: MOV 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 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 ;输出大写字符的提示符 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 ;输出小写字符的个数 shuchu 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: dismsg 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 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)什么字符都不输入的时候:三、系统总结刚抽到这个题目时,老师就说我们的题目是所有题目中最简单的,于是非常庆幸。但是当我们真正去做它的时候却发现并不是那么回事。在写程序的时候首先要考虑很多问题,如何判断、如何显示、遇到$要怎么处理等等。尤其当我们将四种字符依次保存起来以便后来输出的时候用,就遇见了一个比较大的麻烦,当时能用的四种可以用于地址的寄存器都用上了,但是感觉缺少一个,怎么办呢?最后还是用堆栈解决了。可是一开始输出的时候就遇见了错误,就是用堆栈保存的那个输不出来。到底是哪里错了呢?最后发现在存储器中堆栈存储是从高地址往低地址存的,每次取的时候应该是地址减2而不是加2。所以通过这次课程设计也使我们对存储器的堆栈存储有了一个比较大概的了解。最终,在大家的共同努力下,程序完成了,我们心里的一块石头放下了。但是事情总有不如意,在老师说要准备验证程序的那个星期,我们回来重新运行了程序,当时一想我们输入的时候都是几种类型的字符都输入,那么如果缺少其中一种呢?再次运行时少输入了一种类型的字符,这时问题出现了,出现了乱码。当时我们就慌了,于是大家凑到一起赶紧修改。大家你一言我一句纷纷发表自己的看法,东改改西改改,最终大功告成。这次缺少其中一种两种它都会输出相应的字符类型为空,这次大家都放心了。我说过,事情总有不如意。程序又出现了问题。过了几天我们又想到一个问题,输入缺少一种两种可以了,那么不输入字符会怎么样呢?于是再次把程序运行,这次什么也不输入直接回车结束。果然,这次又出现了乱码。这次大家没有慌,因为有了上一次的经验,于是稍微把程序改改,跟之前的类似,问题还是很轻松的被解决了。通过这一次两次的发现问题,解决问题,我们很清楚的认识到了一点。想一件事情得到完善,不在于已经知道的问题,知道什么问题只要去努力,去探讨,最终还是可以解决的;关键是能不能发现问题所在,只有发现了才有可能去解决。如果连问题是什么都不知道,那么还谈什么解决呢。同时我们也看到了集体的力量,我们集体合作,各抒己见,把不同的思维结合起来,然后每个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年玻璃钢格栅行业研究报告及未来行业发展趋势预测
- 家具配件厂内审员更换实施细则
- 玻璃厂体系文件管理制度
- 家具配件厂食堂采购渠道管理规章
- 劳动定员定额师适应性考核试卷及答案
- 2025中国(云南)自由贸易试验区德宏片区管理委员会招聘2人备考考试试题及答案解析
- 2025云南昭通市大关县机关事务服务中心招聘公益性岗位人员2人备考考试试题及答案解析
- 2025年8月四川成都中医药大学现代中药产业学院招聘工作人员4人考试模拟试题及答案解析
- 2025年郑州航空港经济综合实验区公开招聘治安巡防队员138人考试参考题库及答案解析
- 成都高新区街道面向社会公开招聘2025年第一批次编外聘用人员考试参考题库及答案解析
- 《戏曲服饰欣赏》课件
- 《公共基础知识》贵州省黔南布依族苗族自治州都匀市2024年事业单位考试统考试题含解析
- 电力营销业务培训课件
- 技术方案评审表
- 人教版九年级数学下册第二十六章反比例函数-作业设计
- 人美小学美术五上《第1课:肖像艺术》课件
- 边坡削坡施工方案
- 湘美版五年级上册美术全册教案
- 浙江省通用安装工程预算定额第八册
- 乡村振兴战略实施与美丽乡村建设课件
- 视听语言PPT完整版全套教学课件
评论
0/150
提交评论