字符串匹配汇编语言程序设计.docx
《字符串匹配汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《字符串匹配汇编语言程序设计.docx(17页珍藏版)》请在冰豆网上搜索。
![字符串匹配汇编语言程序设计.docx](https://file1.bdocx.com/fileroot1/2023-2/2/8b5795c8-4ff3-4404-846f-bc15b4b985c8/8b5795c8-4ff3-4404-846f-bc15b4b985c81.gif)
字符串匹配汇编语言程序设计
学号:
课程设计
题目
字符串匹配汇编语言程序设计
学院
自动化学院
班级
电气1003班
姓名
申廷进
指导教师
徐腊梅
2013
年
01
月
17
日
课程设计任务书
学生姓名:
申廷进专业班级:
电气1003班
指导教师:
徐腊梅工作单位:
自动化学院
题目:
字符串匹配汇编语言程序设计
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1)根据提示信息,从字符输入两个字符串,实现两个字符串的比较,如果两个字符串的字符只要有一个相同则显示“MATCH”,否则显示“NOMATCH”。
2)可连续输入字符进行比较,直至单击“Q”或“q”键退出程序。
时间安排:
1.9课设题目,设计内容;
1.9—1.10查资料,算法、方案设计。
1.10—1.13(硬)软件设计
1.14—1.15调试程序
1.16—1.17写课设报告
1.18答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
微型计算机简称微机,由于其具备人脑的某些功能,所以也称其为微电脑。
是由大规模集成电路组成的、体积较小的电子计算机。
它是以微处理器为基础,配以内存储器及输入输出接口电路和相应的辅助电路而构成的裸机。
把微型计算机集成在一个芯片上即构成单片微型计算机。
学习微机课程,主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言、设计以及微型计算机各个组成部分,而汇编语言是其中一大板块。
汇编语言编程不仅具有计算机提供给用户的最快而又最有效的语言的优势,也可以在不很了解计算机硬件的前提下使用它。
在对于程序的空间和时间要求很高的场合,使用汇编语言是必不可少,甚至对于很多需要直接控制硬件的应用场合,用保护模式下的汇编语言编程也提供给了对硬件不了解的初学者一种方法。
关键词:
微机汇编语言编程
字符串匹配汇编语言程序设计
1设计总体方案
1.1设计目的
1)进一步建立微机系统的概念,加深对系统的理解和认识,培养学生应用微型计算机解决实际问题的能力;
2)进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言程序的水平和学习程序调试方法。
3)掌握提示信息的使用方法及键盘输入信息的用法。
1.2设计要求及其条件
课程设计要求:
3)根据提示信息,从字符输入两个字符串,实现两个字符串的比较,如果两个字符串的字符只要有一个相同则显示“MATCH”,否则显示“NOMATCH”。
4)可连续输入字符进行比较,直至单击“Q”或“q”键退出程序。
设计初始条件:
1)采用16位微处理器8086CPU以及86系列微型计算机的指令系统。
2)软件设计平台可使用EMU8086软件。
1.3设计方案
本次课设主要是比较两个字符串中有没有相同的字符,如果有就显示“MATCH”,如果没有相同则显示“NOMATCH”。
开始调用DOS的9号功能显示提示信息,格式是MOVDX,字符偏移地址,MOVAH,09H,INT21H,然后调用DOS的8号功能从键盘输入字符,格式是MOVAH,08H,INT21H。
本程序涉及到顺序、转移等基本程序,最后程序编写好以后从键盘输入两个字符串然后可进行多次比较,直到按Q或q退出程序,我在网上搜索到一些资料跟着资料慢慢编写程序直到程序没有错误。
2程序流程图分析
由方案设计分析可知,此次设计比较简单,先初始化程序,然后根据提示输入两个字符串,然后进行循环比较。
在循环的过程中,当按下Q或q键时退出程序;当按下其它键时,程序继续运行。
流程图设计:
当初始化后,根据提示输入两个字符串,若有输入判断是否为Q或q键,如果是则退出程序,程序结束,如果否则进行两字符串比较,过程比较明了,流程图分支不多,但功能能够很好的实现,流程图如图2-1所示。
2.1转移流程图的分析
本流程图有三处转移,第一处是在初始化程序后面要判断退不退出程序,提示是如果你要退出就按Q或q,不退出就按任意键继续执行程序。
如图2-2所示
图2-2退出提示
另一处转移是判断两字符串是否有相等的字符,如果有则显示“MATCH”,如果不等且字符串1还没有比较完则转移到字符串偏移地址加1程序前继续执行程序,直到字符串1比较完成。
最后一处转移是判断字符串中的字符是否比较完了,如果比较完了则显示“NOMATCH”,如果没有比较完则转移到SI指向字符串的下一个字符继续执行程序直到字符串1的字符比较完。
2.2流程图总体分析
有图2-1流程图可以看出此流程图比较简洁,可以清楚的看出整个程序的运行状况。
图2-1信号流图
3程序段落的说明
3.1换行回车键的定义
由于要运行出来的程序美观而且容易读懂、换行的需求所以本程序有了回车的宏定义,有了回车键的宏定义在以后程序中需要回车时就可以直接调用回车的宏定义“HUICHE”了,这样可以使程序简洁明了。
回车键的宏定义程序如下所示:
HUICHEMACRO;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。
MOVDL,0DH;用2号功能"显示"回车。
MOVAH,02H
INT21H
MOVDL,0AH;用2号功能"显示"换行。
MOVAH,02H
INT21H
ENDM
3.2提示信息和字符串的定义
本程序中用了7个提示信息都是DB类型的,他们分别是STJ0、STJ1、STJ2、STJ3、STJ4、TX1、TX2,它们的程序如下所示:
STJ0DB0AH,0DH,'ifyouwanttoquitpleasepress...q/Q...','$'
STJ1DB'******MATCH******','$';
STJ2DB'*****NOMATCH*****','$'
STJ3DB'pressanykeytocontinueexceptQ/q!
','$'
STJ4DB'******************','$'
TX1DB'Pleaseinputthefirststring:
','$'
TX2DB'Pleaseinputthesecondstring:
','$'
本程序定义了两个字符串它们的范围都是100个字符都是DB类型的,字符串的容量大小可以自己改,但不能超出范围否则字符串会溢出。
定义字符串的程序如下所示:
STRING1DB100;100为存第一个字符串的最大可用空间的字节数。
DB?
;预留字节,存储将要输入的第1个字符串的实际长度。
DB100DUP(?
);预留100个字节空间,用于存放第1个字符串。
STRING2DB100
DB?
DB100DUP(?
)
3.3DOS功能和部分指令的说明
本程序调用了两个DOS功能程序,DOS8号功能:
键盘输入字符但不显示出来;DOS9号功能:
屏幕显示字符。
1)8功能的调用(键盘输入字符但不显示字符),其格式如下所示:
格式:
MOVAH,08H
INT21H
2)9号功能调用(屏幕显示字符),其格式如下所示:
格式:
MOVDX,字符串的偏移地址
MOVAH,09H
INT21H
在使用9功能调用时要注意一下问题:
①待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。
②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。
汇编指令SCASB的说明:
在汇编语言中SCASB是一条字符串操作指令,源自“SCAnStringByte”的缩写。
该指令的具体操作是:
计算AL-byteof[ES:
EDI],设置相应的标志寄存器的值;
修改寄存器EDI的值:
如果标志DF为0,则incEDI;如果DF为1,则decEDI。
SCASB指令常与循环指令REPZ/REPNZ合用。
例如,REPNZSCASB语句表示当寄存器ECX>0且标志寄存器ZF=0,则再执行一次SCASB指令。
比较寄存器AL的值不相等则重复查找的字
4程序调试说明、结果记录与分析
4.1程序调试说明
程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。
这是保证计算机信息系统正确性的必不可少的步骤。
编完计算机程序,得调试所写程序是否正确,是否能满足所要求的功能。
写好程序后运行后发现基本达到要求,但是不能按q或Q退出,而且不能连续输入输出,必须要关掉再运行才能再次输入,为解决这个问题,加了一个判断,如果输入是Q或q直接跳到结束,而且这个判断设置的位子要进行选择,调试。
其次,为了解决连续输入输出,在程序加一个转移,以达到连续输入,输出,而转移到哪,这也需要去慢慢调试。
我为了让程序运行出来更美观在程序中加了一些”*”这样运行出来的标识就明显了。
4.2调试结果说明
当程序编译连接成功后再运行首先出来的界面如图4-1所示:
图4-1开始界面
当你要退出直接按Q或者q都可以退出程序,当你要继续运行程序就按任意键除了Q或者q;继续运行程序以后屏幕就会让你输入字符串1和字符串2如下图4-2所示:
图4-2输入字符串提示
输入第一个字符串后回车它会提示你输入第二个字符串,然后再回车这时就对两字符串进行比较,如果两字符串中只要有一个字符相同则显示“MATCH”图4-3所示;如果都不相同则显示“NOMATCH”图4-4所示,此程序还可以比较许多次,直到输入Q或者q时才退出程序。
图4-3有相同的显示
图4-4不同时的显示
4.3分析结果
可知运行程序后,能达到设计要求,即输入两个字符串后进行比较,如果两个字符串只要有一个字符相同则显示“MATCH”;如果完全不同则显示“NOMATCH”,按Q或q直接退出程序,输出形式也与要求完全一致,程序设计成功。
5心得体会
拿到课程设计的题目部分程序都很简单,都是平时上课所学的,可是我想把程序弄得好看一点而且我想让程序多次比较按Q或者q时推出,这让我有点不知所措,后来在网上看到一个类似的程序,便想可以套用部分程序,可是网上的都没有我想要的,所以只好自己一个一个的敲上去,但最后还是达到我想要目的,整个编程下来,让我体会最深的就是DOS功能的调用,平时可能觉得一些很难的要求通过编程并不能简单实现,但是通过DOS功能的调用可以很轻松达到,而且通过了本次课程设计,我对输入,输出的本质概念有了更深层次的理解,知道了微机实验时的人机交换程序是如何得到的,学习了不少的知识。
总之,就我自己而言,这次课程设计是起到的它的作用,对自己有了一个锻炼的效果,并使自己对汇编语言有了一个更加清晰的了解,加强了自己的编程能力,而且学会了搜索资料,弄懂资料,并转换为自己的知识,这次课程设计使我受益匪浅!
参考文献
[1]彭虎等编著.微机原理与接口技术(第二版).北京:
电子工业出版社,2008
[2]杨居义编著.微机原理与接口技术项目教程.北京:
清华大学出版社,2007
[3]荆淑霞编著.微机原理与汇编语言程序设计.北京:
清华大学出版社,2004
[4]16/32位微机原理、汇编语言及接口技术(第二版)机械工业出版社钱晓捷、陈涛等。
[5]《汇编语言程序设计教程》(周艳萍邹伟著)清华大学出版社。
[6]《PC机汇编语言实战精解》(李春生著)南开大学出版社。
附录
HUICHEMACRO
MOVDL,0DH;用2号功能"显示"回车。
MOVAH,02H
INT21H
MOVDL,0AH;用2号功能"显示"换行。
MOVAH,02H
INT21H
ENDM
DATASEGMENT
STJ0DB0AH,0DH,'ifyouwanttoquitpleasepress...q/Q...','$'
STJ1DB'******MATCH******','$'
STJ2DB'*****NOMATCH*****','$';
STJ3DB'pressanykeytocontinueexceptQ/q!
','$'
STJ4DB'******************','$'
TX1DB'Pleaseinputthefirststring:
','$'
TX2DB'Pleaseinputthesecondstring:
','$'
STRING1DB100
DB?
DB100DUP(?
);预留100个字节空间,用于存放第1个字符串。
STRING2DB100
DB?
DB100DUP(?
)
DATAENDS
STACK1SEGMENT;定义一个50字节大小的堆栈段空间。
ZHANDB50DUP(?
)
ZHANDINGEQULENGTHZHAN
STACK1ENDS
CODESEGMENT;代码段开始。
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX;
MOVES,AX;
MOVAX,STACK1;
MOVSS,AX;
MOVSP,ZHANDING;栈顶指针赋初值。
L0:
LEADX,STJ0;输入提示
MOVAH,9
INT21H
HUICHE
LEADX,STJ3
MOVAH,9
INT21H
HUICHE
MOVAH,08H
INT21H
CMPAL,'Q'
JEEXIT
CMPAL,'q'
JEEXIT
JMPL2
EXIT:
MOVAH,4CH
INT21H
L2:
MOVDX,OFFSETTX1
MOVAH,9
INT21H
HUICHE
HUICHE
MOVDX,OFFSETSTRING1
MOVAH,0AH;用10号功能输入第1个字符串。
INT21H
HUICHE
HUICHE
MOVDX,OFFSETTX2
MOVAH,9
INT21H
HUICHE
HUICHE
MOVDX,OFFSETSTRING2;输入第2个字符串。
MOVAH,0AH
INT21H
HUICHE
HUICHE
LEADX,STJ4
MOVAH,9
INT21H
HUICHE
CLD;方向标志位清0,按增址方向操作。
MOVSI,OFFSETSTRING1[2]
MOVBX,0
MOVCL,STRING1[1]
MOVCH,0;将第1个字符串的实际长度赋给CX.
L1:
PUSHCX
MOVDI,OFFSETSTRING2[2]
MOVCL,STRING2[1]
MOVCH,0
MOVAL,[SI]
REPNZSCASB
JZA1
INCSI;SI加1,指向第1个字符串的下一个字符。
INCBX;记下第1个字符串已经被搜索过的字符的个数。
POPCX
CMPCX,BX
JNZL1
MOVDX,OFFSETSTJ2;显示"NOMACTH"。
MOVAH,9
INT21H
HUICHE
LEADX,STJ4
MOVAH,9
INT21H
HUICHE
JMPSTART
A1:
MOVDX,OFFSETSTJ1;显示"MACTH"。
MOVAH,9
INT21H
HUICHE
LEADX,STJ4
MOVAH,9
INT21H
HUICHE
HUICHE
JMPSTART
MOVAH,4CH;返回DOS系统,准备结束程序。
INT21H
CODEENDS
ENDSTART;程序从此处结束。
图5-1附录说明图
本科生课程设计成绩评定表
姓名
申廷进
性别
男
专业、班级
电气1003班
课程设计题目:
字符串匹配汇编语言程序设计
课程设计答辩或质疑记录:
成绩评定依据:
评定项目
评分成绩
1.选题合理、目的明确(10分)
2.设计方案正确、具有可行性、创新性(20分)
3.设计结果(例如:
系统设计程序、仿真程序)(20分)
4.态度认真、学习刻苦、遵守纪律(15分)
5.设计报告的规范化、参考文献充分(不少于5篇)(10分)
6.答辩(25分)
总分
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日