字符串匹配汇编语言程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:
课程设计
题目字符串匹配汇编语言程序设计
学院自动化学院
班级电气1003班
姓名申廷进
指导教师徐腊梅
2013 年01 月17 日
课程设计任务书
学生姓名:申廷进专业班级:电气1003班
指导教师:徐腊梅工作单位:自动化学院
题目: 字符串匹配汇编语言程序设计
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1)根据提示信息,从字符输入两个字符串,实现两个字符串的比较,如
果两个字符串的字符只要有一个相同则显示“MATCH”,否则显示“NO
MATCH”。

2)可连续输入字符进行比较,直至单击“Q”或“q”键退出程序。

时间安排:
1.9 课设题目,设计内容;
1.9—1.10 查资料,算法、方案设计。

1.10—1.13 (硬)软件设计
1.14—1.15 调试程序
1.16—1.17 写课设报告
1.18 答辩
指导教师签名:年月日
系主任(或责任教师)签名:年月日
1 设计总体方案 (2)
1.1 设计目的 (2)
1.2 设计要求及其条件 (2)
1.3 设计方案 (2)
2 程序流程图分析 (3)
2.1 转移流程图的分析 (3)
2.2 流程图总体分析 (3)
3 程序段落的说明 (5)
3.1 换行回车键的定义 (5)
3.2 提示信息和字符串的定义 (5)
3.3 DOS功能和部分指令的说明 (6)
4 程序调试说明、结果记录与分析 (7)
4.1 程序调试说明 (7)
4.2 调试结果说明 (7)
4.3 分析结果 (9)
5心得体会 (9)
参考文献 (11)
附件 (12)
微型计算机简称微机,由于其具备人脑的某些功能,所以也称其为微电脑。

是由大规模集成电路组成的、体积较小的电子计算机。

它是以微处理器为基础,配以内存储器及输入输出接口电路和相应的辅助电路而构成的裸机。

把微型计算机集成在一个芯片上即构成单片微型计算机。

学习微机课程,主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言、设计以及微型计算机各个组成部分,而汇编语言是其中一大板块。

汇编语言编程不仅具有计算机提供给用户的最快而又最有效的语言的优势,也可以在不很了解计算机硬件的前提下使用它。

在对于程序的空间和时间要求很高的场合,使用汇编语言是必不可少,甚至对于很多需要直接控制硬件的应用场合,用保护模式下的汇编语言编程也提供给了对硬件不了解的初学者一种方法。

关键词:微机汇编语言编程
字符串匹配汇编语言程序设计
1设计总体方案
1.1 设计目的
1)进一步建立微机系统的概念,加深对系统的理解和认识,培养学生应用微型计算机解决实际问题的能力;
2)进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言程序的水平和学习程序调试方法。

3)掌握提示信息的使用方法及键盘输入信息的用法。

1.2 设计要求及其条件
课程设计要求:
3)根据提示信息,从字符输入两个字符串,实现两个字符串的比较,如
果两个字符串的字符只要有一个相同则显示“MATCH”,否则显示“NO
MATCH”。

4)可连续输入字符进行比较,直至单击“Q”或“q”键退出程序。

设计初始条件:
1)采用16位微处理器 8086 CPU以及86系列微型计算机的指令系统。

2)软件设计平台可使用EMU8086软件。

1.3设计方案
本次课设主要是比较两个字符串中有没有相同的字符,如果有就显示“MATCH”,如果没有相同则显示“NO MATCH”。

开始调用DOS的9号功能显示提示信息,格式是MOV DX,字符偏移地址,MOV AH,09H,INT 21H,然后调用DOS 的8号功能从键盘输入字符,格式是MOV AH,08H,INT 21H。

本程序涉及到顺序、
转移等基本程序,最后程序编写好以后从键盘输入两个字符串然后可进行多次比较,直到按Q或q退出程序,我在网上搜索到一些资料跟着资料慢慢编写程序直到程序没有错误。

2 程序流程图分析
由方案设计分析可知,此次设计比较简单,先初始化程序,然后根据提示输入两个字符串,然后进行循环比较。

在循环的过程中,当按下Q或q键时退出程序;当按下其它键时,程序继续运行。

流程图设计:当初始化后,根据提示输入两个字符串,若有输入判断是否为Q或q键,如果是则退出程序,程序结束,如果否则进行两字符串比较,过程比较明了,流程图分支不多,但功能能够很好的实现,流程图如图2-1所示。

2.1转移流程图的分析
本流程图有三处转移,第一处是在初始化程序后面要判断退不退出程序,提示是如果你要退出就按Q或q,不退出就按任意键继续执行程序。

如图2-2所示
图2-2 退出提示
另一处转移是判断两字符串是否有相等的字符,如果有则显示“MATCH”,如果不等且字符串1还没有比较完则转移到字符串偏移地址加1程序前继续执行程序,直到字符串1比较完成。

最后一处转移是判断字符串中的字符是否比较完了,如果比较完了则显示“NO MATCH”,如果没有比较完则转移到SI指向字符串的下一个字符继续执行程序直到字符串1的字符比较完。

2.2流程图总体分析
有图2-1流程图可以看出此流程图比较简洁,可以清楚的看出整个程序的运
行状况。

图2-1 信号流图
3程序段落的说明
3.1换行回车键的定义
由于要运行出来的程序美观而且容易读懂、换行的需求所以本程序有了回车的宏定义,有了回车键的宏定义在以后程序中需要回车时就可以直接调用回车的宏定义“HUICHE”了,这样可以使程序简洁明了。

回车键的宏定义程序如下所示:
HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。

MOV DL,0DH ;用2号功能"显示"回车。

MOV AH,02H
INT 21H
MOV DL,0AH ;用2号功能"显示"换行。

MOV AH,02H
INT 21H
ENDM
3.2提示信息和字符串的定义
本程序中用了7个提示信息都是DB类型的,他们分别是STJ0、STJ1、STJ2、STJ3、STJ4、TX1、TX2,它们的程序如下所示:
STJ0 DB 0AH,0DH,'if you want to quit please press ...q/Q...','$'
STJ1 DB '******MATCH******','$' ;
STJ2 DB '*****NO MATCH*****','$'
STJ3 DB 'press any key to continue except Q/q!','$'
STJ4 DB '******************','$'
TX1 DB 'Please input the first string:','$'
TX2 DB 'Please input the second string:','$'
本程序定义了两个字符串它们的范围都是100个字符都是DB类型的,字符串的容量大小可以自己改,但不能超出范围否则字符串会溢出。

定义字符串的程序如下所示:
STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。

DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。

DB 100 DUP(?);预留100个字节空间,用于存放第1个字符串。

STRING2 DB 100
DB ?
DB 100 DUP(?)
3.3DOS功能和部分指令的说明
本程序调用了两个DOS功能程序,DOS 8号功能:键盘输入字符但不显示出来;DOS 9号功能:屏幕显示字符。

1)8功能的调用(键盘输入字符但不显示字符),其格式如下所示:
格式:MOV AH,08H
INT 21H
2)9号功能调用(屏幕显示字符),其格式如下所示:
格式:MOV DX,字符串的偏移地址
MOV AH,09H
INT 21H
在使用9功能调用时要注意一下问题:
①待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。

②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。

汇编指令SCASB的说明:
在汇编语言中SCASB是一条字符串操作指令,源自“SCAn String Byte”的缩写。

该指令的具体操作是:
计算 AL - byte of [ES:EDI] , 设置相应的标志寄存器的值;
修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF为1,则 dec EDI。

SCASB指令常与循环指令REPZ/REPNZ合用。

例如,REPNZ SCASB 语句表示当寄存器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所示;如果都不相同则显示“NO MATCH”图4-4所示,此程序还可以比较许多次,直到输入Q或者q时才退出程序。

图4-3 有相同的显示
图4-4 不同时的显示
4.3 分析结果
可知运行程序后,能达到设计要求,即输入两个字符串后进行比较,如果两个字符串只要有一个字符相同则显示“MATCH”;如果完全不同则显示“NO MATCH”,按Q或q直接退出程序,输出形式也与要求完全一致,程序设计成功。

5心得体会
拿到课程设计的题目部分程序都很简单,都是平时上课所学的,可是我想把程序弄得好看一点而且我想让程序多次比较按Q或者q时推出,这让我有点不知所措,后来在网上看到一个类似的程序,便想可以套用部分程序,可是网上的都没有我想要的,所以只好自己一个一个的敲上去,但最后还是达到我想要目的,整个编程下来,让我体会最深的就是DOS功能的调用,平时可能觉得一些很难的要求通过编程并不能简单实现,但是通过 DOS功能的调用可以很轻松达到,而且通过了本次课程设计,我对输入,输出的本质概念有了更深层次的理解,知道
了微机实验时的人机交换程序是如何得到的,学习了不少的知识。

总之,就我自己而言,这次课程设计是起到的它的作用,对自己有了一个锻炼的效果,并使自己对汇编语言有了一个更加清晰的了解,加强了自己的编程能力,而且学会了搜索资料,弄懂资料,并转换为自己的知识,这次课程设计使我受益匪浅!
参考文献
[1] 彭虎等编著.微机原理与接口技术(第二版).北京:电子工业出版社,2008
[2] 杨居义编著.微机原理与接口技术项目教程.北京:清华大学出版社,2007
[3] 荆淑霞编著.微机原理与汇编语言程序设计.北京:清华大学出版社,2004
[4] 16/32位微机原理、汇编语言及接口技术(第二版)机械工业出版社钱晓捷、陈涛等。

[5] 《汇编语言程序设计教程》(周艳萍邹伟著)清华大学出版社。

[6] 《PC机汇编语言实战精解》(李春生著)南开大学出版社。

附录
HUICHE MACRO
MOV DL,0DH ;用2号功能"显示"回车。

MOV AH,02H
INT 21H
MOV DL,0AH ;用2号功能"显示"换行。

MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
STJ0 DB 0AH,0DH,'if you want to quit please press ...q/Q...','$'
STJ1 DB '******MATCH******','$'
STJ2 DB '*****NO MATCH*****','$' ;
STJ3 DB 'press any key to continue except Q/q!','$'
STJ4 DB '******************','$'
TX1 DB 'Please input the first string:','$'
TX2 DB 'Please input the second string:','$'
STRING1 DB 100
DB ?
DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。

STRING2 DB 100
DB ?
DB 100 DUP(?)
DATA ENDS
STACK1 SEGMENT ;定义一个50字节大小的堆栈段空间。

ZHAN DB 50 DUP(?)
ZHANDING EQU LENGTH ZHAN
STACK1 ENDS
CODE SEGMENT ;代码段开始。

ASSUME CS:CODE,DS:DA TA,ES:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX ;
MOV ES,AX ;
MOV AX,STACK1 ;
MOV SS,AX ;
MOV SP,ZHANDING ;栈顶指针赋初值。

L0: LEA DX,STJ0 ;输入提示
MOV AH,9
INT 21H
HUICHE
LEA DX,STJ3
MOV AH,9
INT 21H
HUICHE
MOV AH,08H
INT 21H
CMP AL,'Q'
JE EXIT
CMP AL,'q'
JE EXIT
JMP L2
EXIT: MOV AH,4CH
INT 21H
L2: MOV DX, OFFSET TX1
MOV AH,9
INT 21H
HUICHE
HUICHE
MOV DX, OFFSET STRING1
MOV AH,0AH ;用10号功能输入第1个字符串。

INT 21H
HUICHE
HUICHE
MOV DX, OFFSET TX2
MOV AH,9
INT 21H
HUICHE
HUICHE
MOV DX, OFFSET STRING2 ;输入第2个字符串。

MOV AH,0AH
INT 21H
HUICHE
HUICHE
LEA DX,STJ4
MOV AH,9
INT 21H
HUICHE
CLD ; 方向标志位清0,按增址方向操作。

MOV SI, OFFSET STRING1[2]
MOV BX,0
MOV CL, STRING1[1]
MOV CH,0 ; 将第1个字符串的实际长度赋给CX. L1: PUSH CX
MOV DI, OFFSET STRING2[2]
MOV CL, STRING2[1]
MOV CH,0
MOV AL,[SI]
REPNZ SCASB
JZ A1
INC SI ;SI加1,指向第1个字符串的下一个字符。

INC BX ;记下第1个字符串已经被搜索过的字符的个数。

POP CX
CMP CX,BX
JNZ L1
MOV DX, OFFSET STJ2 ;显示"NO MACTH"。

MOV AH,9
INT 21H
HUICHE
LEA DX,STJ4
MOV AH,9
INT 21H
HUICHE
JMP START
A1: MOV DX, OFFSET STJ1 ;显示"MACTH"。

MOV AH,9
INT 21H
HUICHE
LEA DX,STJ4
MOV AH,9
INT 21H
HUICHE
HUICHE
JMP START
MOV AH,4CH ;返回DOS系统,准备结束程序。

INT 21H
CODE ENDS
END START ;程序从此处结束。

图5-1 附录说明图
本科生课程设计成绩评定表
指导教师签字:
年月日。

相关文档
最新文档