查找字符串中的指定字符.doc

上传人:苏美尔 文档编号:9007504 上传时间:2021-01-29 格式:DOC 页数:21 大小:1.57MB
返回 下载 相关 举报
查找字符串中的指定字符.doc_第1页
第1页 / 共21页
查找字符串中的指定字符.doc_第2页
第2页 / 共21页
查找字符串中的指定字符.doc_第3页
第3页 / 共21页
查找字符串中的指定字符.doc_第4页
第4页 / 共21页
查找字符串中的指定字符.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《查找字符串中的指定字符.doc》由会员分享,可在线阅读,更多相关《查找字符串中的指定字符.doc(21页珍藏版)》请在三一文库上搜索。

1、课程设计说明书 课程名称: 微机原理课程设计 题目: 查找字符串中的指定字符 院 系: 数学与大数据学院 专业班级: 应用物理 学 号: 学生姓名: 指导教师: 2017年 6 月 16日安徽理工大学课程设计(论文)任务书 数学与大数据 院系 信计 教研室学 号学生姓名专业(班级)应用物理 设计题目查找字符串中的指定字符设计技术参数1. 程序算法框图的设计2. 程序代码的编写3. 程序调试4. 课程设计说明书的书写设计要求1.设计报告要求文字通顺,语言流畅,无错别字,统一用A4纸打印,不少于12页;2.设计报告中图表、附注、参考文献、公式一律采用阿拉伯数字连续(或分章)编号。3.图序及图名置于

2、图的下方居中;表序及表名置于表的上方居中。工作量查阅相关材料,完成设计,完成设计报告 工作计划1.综合论证,确定设计方案。2.查阅资料,完成设计。3.完成设计报告。参考资料1 李伯成.微型计算机原理及应用M.西安电子科技大学出版社,19982 陈忠强.现代微机原理与接口技术M.冶金工业出版社.20063 郭兰英.微机原理与接口技术M.清华大学出版社. 20064 周明德.微型计算机系统原理及应用M.北京:清华大学出版社5 楼顺天,周社佳.微机原理与接口技术M北京:科学出版社,2006.指导教师签字 教研室主任签字 年 月 日 安徽理工大学课程设计(论文)成绩评定表学生姓名: 学号: 专业班级:

3、 应用物理 课程设计题目: 查找字符串中的指定字符 指导教师评语: 成绩: 指导教师: 年 月 日目录一、背景及研究意义1二、设计思路2三、程序设计23.1程序中用到的dos调用23.2程序中主要汇编指令33.3程序设计框图4四、程序主要代码分析64.1数据段代码64.2显示提示字符代码段64.3字符段输入代码段64.4字符比较代码段74.5结果输出代码段8五、程序调试与结果分析95.1运行结果95.2问题分析106、 总结与心得体会11参考文献12附录131、 背景及目的研究意义汇编语言是面向机器的程序设计语言。在计算机发展的初期,人们是用机器指令码(二进制编码)来编写程序的,这就称为机器语

4、言。但是机器语言无明显的特征,不好理解和记忆,也不便于学习,在编制程序时极易出错。所以,人们就用助记符代替操作码,用符号来代替地址,这就是汇编语言阶段。在汇编语言中,用助记符代替操作码,用地址符号代替操作码。这样的符号代替机器语言的二进制码,就把机器语言变成汇编语言。于是汇编语言又被叫做符号语言。使用汇编语言编写的程序,机器不能直接识别,要通过一种程序将汇编语言翻译成机器语言,这种其翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。高级汇编程序如MASM、TASM等为我们在编写汇编程序提供了很多类似高级语言的特征,比如结构化、抽象等。在这种环境下编写的程序,有很大一部分是伪指令,

5、已经跟高级语言很像了,即使全部用汇编语言来编写windows程序也是可行的。汇编语言作为面向机器的语言,通过对该语言的学习,能够加深对计算机内部器件原理以及工作方式的理解。学习汇编语言时也需要懂得每句代码运行后,CPU的寄存器和储存器的内容变更,理解芯片如何运行每个指令的,从而加深对计算机硬件的理解。而本次课程设计的课题,查找字符串中指定字符将运用到汇编语言中的基本指令以及分支和循环语句。本次课程设计不仅可以更加熟练的掌握汇编的语句和指令,还可以把课堂上学习到的理论知识和实践结合起来,提高个人的动手能力和独立思考的能力。通过设计过程,要熟悉并且掌握微机系统的软件设计方法、设计步骤,以及学会在程

6、序编写过成中发现问题,分析问题与解决问题的能力。还要加深对汇编语言的理解,在以后的应用中更加的熟练。2、 设计思路首先按照课程设计要求在字符和字符串输入前要显示一串提示符,然后输入一个字符串,显示在窗口上,再次提示输入一个字符。比较字符串中字符与这个字符是否相同,并记相同的个数。其中代码核心部分就是比较与输出,这部分代码的设计思路如下:1.首先利用循环程序输入一个字符串,判断是否有回车输入,有则跳出字符串的输入程序,并且保存到数据段中。2.然后输入字符,然后保存到数据段中。3.利用循环程序逐个比较,如相同,则计数加1,直到比较完,记录相同字符的个数,并换行输出。输入字符输入字符串循环输入存入数

7、据段存入数据段取数据比较计数器+1相同,则输出结果图2-1设计思路三、程序设计3.1程序中用到的dos调用3.1.1、键盘输入并显示(1号功能调用) 格式: MOV AH,01H INT 21H功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是CtrlBreak组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中。3.1.2、屏幕显示格式: MOV DX, 字符串的偏移地址 MOV AH, 09H INT 21H功能:在屏幕上显示字符串。在使用9号功能调用时,应当注意以下问题。 待显示的字符串必须先放在内存一数据区(DS段)中,且以$符号作

8、为结束标志。 应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。3.1.3、字符串输入功能调用(0AH号功能调用) 格式: MOV DX, 已定义缓冲区的偏移地址 MOV AH, 0AHINT 21H功能:从键盘接收字符,并存放到内存缓冲区。在使用0AH号功能调用时,应当注意以下问题: 执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第二个字节保留,在执 行程序完毕后存入输入的实际字符个数。从第三个字节开始存入从键盘上接收字符的ASCII码。 应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中

9、。3.1.4、返回DOS操作系统(4CH号功能调用) 格式: MOV AH, 4CH INT 21H功能:终止当前程序的运行,并把控制权交给调用的程序,即返回DOS系统,屏幕出现DOS提示符,如“C: ”,等待DOS命令。3.2、汇编指令3.2.1、CMP比较指令比较指令完成两个操作数相减,使结果反映在标志位上,但两操作数不变。格式:CMP AX,BX具体的说,比较指令可使累加器与立即数、任一通用寄存器或任一内存操作数相比较;也可以使任一通用寄存器与立即数、其他寄存器或任一内存操作数相比较;也可以使内存操作数与立即数或任一寄存器相比较。在比较指令之后,根据ZF标志即可判断两者是否相等,若两者相

10、等,相减以后结果为0,则ZF标志为1;否则为0。3.2.2、根据ZF标志位形成的的条件转移指令格式:JNZ Label这是当ZF标志等于0时,能转移到目标地址(Label)的条件转移指令。3.2.3、LEA加载有效地址计算源操作数的有效地址(即段内偏移量)并存储至目标操作数。源操作数是一个内存单元(可用各种寻址方式),目标操作数是一个通用寄存器。3.2.4、XOR执行按位逻辑异或格式:XOR DOPD,SOPD这条指令对两个指定的操作数进行“异或”运算,当进行“异或”的两位不相同时(即一个为1,一个为0),“异或”的结果为1;否则为0.异或运算的结果送回一个操作数。在本课题中用此条命令对AX寄

11、存器清零操作。3.3程序设计框图3.3.1字符串输入框图开始显示提示符1输入字符串inc diinc siinc cxY是否输入回车NY输入字符数小于9?N在字符串末端加入“$”字符结束图3-1字符串输入框图3.3.2比较与输出框图开始输出提示符2,并输入比较字符与字符串中字符相等?YBL+1NINC DI输入提示符3输出形同字符个数结束图3-2比较与输出框图四、主要代码分析4.1数据段代码data segmenttip1 db please input a string:,0dh,0ah,$tip2 db please input a word:,0dh,0ah,$tip3 db 0dh,0

12、ah,The result is:,$str1 db 256 dup(?)str2 db 256 dup(?)count db ?data ends4.2显示提示符代码段start:mov ax,datamov ds,axmov cx,0lea dx,tip1mov ah,09h;显示提示符1int 21h将伪地址段装入段寄存器中,并且输出第一条提示语句。4.3字符串输入段代码input:cmp cx,09hjz nextmov ah,01h;输入字符串int 21hmov di,almov si,alinc diinc siinc cxcmp al,0dhjnz inputnext:mov

13、al,$mov si,al键盘输入字符,并且在每次输入之后判断是否为回车,若是,结束输入并插入结尾标志“$”,若不是回车,则循环继续输入,并在窗口显示输入的字符串。4.4字符比较代码段xor ax,ax;将ax寄存器清零lea dx,tip2;显示提示符2mov ah,09hint 21hmov ah,01h;输入比较字符int 21hlea si,countmov si,almov bl,30hlea di,str2cmp2:cmp al,dijnz cmp1inc blcmp1:inc diloop cmp2mov dl,0ah首先,需要对AX寄存器进行清零操作,因为AX寄存器若不为0,对

14、接下来的两个字符的比较会产生较大影响。之后输出第二条提示语句,提示输入要进行比较的字符。用bl寄存器来计字符相同的个数。在cmp2程序段中比较,若不同,直接调到cmp1中取下一个字符比较,若相同则bl+1在进入cmp1中取下一个字符进行比较。4.5结果输出程序段lea dx,tip3mov ah,09hint 21hmov ah,02hint 21hmov dl,blint 21h五、程序调试与结果分析5.1运行结果程序运行开始界面图5-1输出结果1输入一个字符串后的界面图5-2输出结果2输入一个字符后立即出结果界面图5-3输出结果5.2问题分析问题1:程序运行时,当执行查找功能时出现乱码。问

15、题2:当输入10个及以上相同的字符时,再查找该字符,程序会出现错误。通过对这些问题的分析、查找资料以及讨论后的一些方案如下:问题1:原因是系统不能确定是否结束输出,所以会出现乱码。设计程序时设置按回车结束输出,或者在输入字符后加“$”符号。问题2:原因是9的ASCII码后面一位不是10而是“:”所以结果为10 时会输出0:而不是10。在输入代码段加入跳转代码,当输入字符数到达10个时自动结束输入。6、 总结与心得体会通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课

16、本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。 当然,在程序的编写与设计的过程中也发现了一些问题,比如说出现乱码的问题。当时不太清楚这段乱码出现的原因,但是去网上搜索这问题,发现也有些人和我一样的粗心大意,并且有人给出了很好的方法解决了这个问题。还有问题2是问了一个同学,他跟我解释了这个输出ASCII问题。但是我用了一个比较笨的方法解决了这个问题。这让我觉得团队合作的重要性以及搜索知识的能力的锻炼。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力

17、。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在自己的思考以及和与同学的讨论中,终于迎刃而解。参考文献1 李伯成. 微型计算机原理及应用M. 西安电子科技大学出版社,19982 陈忠强. 现代微机原理与接口技术M. 冶金工业出版社.20063 郭兰英. 微机原理与接口技术M. 清华大学出版社. 20064 周明德. 微型计算机系统原理及应用M. 北京:清华大学出版社5 楼顺天, 周社佳. 微机原理与接

18、口技术M. 北京:科学出版社,20066 胡汉才. 微机原理与接口技术课程设计M. 北京:清华大学出版,19967 付家才. 微型计算机及其接口技术学习指导与题典M. 北京:化学工业出版社,20048 潘新民. 微型计算机控制技术M. 北京:人民邮电出版社,1999.99 余锡存, 曹国华. 汇编语言、微机原理及接口技术M. 陕西:西安电子科技大学出版社,200010 雷丽文. 微机原理与接口技术M. 北京:电子工业出版社,199711 李银华. 电子线路技术指导M. 北京:北京航空航天大学出版社,2005附录:data segmenttip1 db please input a string

19、:,0dh,0ah,$tip2 db please input a word:,0dh,0ah,$tip3 db 0dh,0ah,The result is:,$str1 db 256 dup(?)str2 db 256 dup(?)count db ?data endsstack segmentstack endscode segmentassume ds:data,cs:code,ss:stackstart:mov ax,datamov ds,axmov cx,0lea dx,tip1mov ah,09h;显示提示符1int 21hlea di,str1lea si,str2input:c

20、mp cx,09hjz nextmov ah,01h;输入字符串int 21hmov di,almov si,alinc diinc siinc cxcmp al,0dhjnz inputnext:mov al,$mov si,almov dl,0ahmov ah,02hint 21hxor ax,axlea dx,tip2;显示提示符2mov ah,09hint 21hmov ah,01h;输入比较字符int 21hlea si,countmov si,almov bl,30hlea di,str2cmp2:cmp al,dijnz cmp1inc blcmp1:inc diloop cmp2mov dl,0ahlea dx,tip3mov ah,09hint 21hmov ah,02hint 21hmov dl,blint 21hmov ah,4chint 21hcode endsend start

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1