微机报告字符串匹配

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

微机实验报告
实验三循环程序的设计
一、实验目的
1、掌握提示信息的使用方法和键盘输入信息的用法;
2、掌握循环程序的设计方法。

二、实验内容
编写程序,从键盘分别输入两个字符串,进行比较,若相同,则显示‘MATCH’,否则,显示‘NO MATCH’。

三、实验原理
强迫CPU重复执行一指令序列的程序结构是循环程序。

循环程序结构分成四部分:
1、初始化部分
2、循环处理部分
3、循环控制部分
4、结束部分
四、程序流程图
五、程序代码
CRLF MACRO
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV AH, 02H
MOV DL, 0AH
INT 21H
ENDM
DATA SEGMENT
MESS1 DB'INPUT STRING1:',0DH,0AH,'$'
MESS2 DB'INPUT STRING2:',0DH,0AH,'$'
MESS3 DB'NO MATCH',0DH,0AH,'$'
MESS4 DB'MATCH',0DH,0AH,'$'
MAXLEN1 DB 81
ACTLEN1 DB ?
STRING1 DB 81 DUP(?)
MAXLEN2 DB 81
ACTLEN2 DB ?
STRING2 DB 81 DUP(?)
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
STA DB 50 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, ES:DATA, SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV ES, AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H
MOV AH, 0AH
MOV DX,OFFSET MAXLEN1
INT 21H
CRLF
MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H
MOV AH, 0AH
MOV DX,OFFSET MAXLEN2
INT 21H
CRLF
MOV SI,OFFSET ACTLEN1
MOV BX,OFFSET ACTLEN2 ;字符串2长度单元首地址送BX MOV AL,[SI] ;字符串1长度送AL
CMP AL,[BX] ;比较实际长度
JNZ NOMA ;不等就跳转
MOV CL,[BX] ;实际长度作为比较次数
COM: INC SI
INC BX ;SI,BX每循环依次加1
MOV AL,[SI]
CMP AL,[BX]
JNZ NOMA
DEC CL ;CL每循环依次减1
CMP CL,0
JNZ COM
MOV AH,09H
MOV DX,OFFSET MESS4
INT 21H
JMP DEND
NOMA:
MOV AH,09H
MOV DX,OFFSET MESS3
INT 21H
DEND:
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
六、程序调试
调试思路:
1、生成exe文件;
2、观察初始化是否正常;
3、观察字符串是否输入;
4、
观察比较字符串长度处是否跳转(相同不跳,反之,不同就跳,不匹配);5、
循环体中看是否比较了字符串长度次数,是否有不匹配跳出循环体;6、显示
结果是否正常。

两字符串是否匹配有三种情况:1、完全相同——MATCH;2、有个别字符不同——NO MATCH;
3、字符串长度不同则——NO MATCH
调试过程:
通过MASM ZY.ASM 和LINK ZY.OBJ 命令即可生成exe文件;
DEBUG ZY.EXE 进行调试,结合U命令反编译结果(下图1)可将断点设在 000F:
MOV AH, 09处(即G F)检查初始化;
D0命令显示存储内容(下图2),可见MESS1 'INPUT STRING1:',MESS2 'INPUT
STRING2:',MESS3 'NO MATCH',MESS4'MATCH'已经存入寄存器。

即程序初始化
完成。

1、输入完全相同字符串AASSDD和AASSDD
如下图:断点设在0016 : MOV AH,0A处(即G 16)提示“INPUT STRING1:”,断点设在001D: MOV AH,02(即G 1D)处输入字符串AASSDD,然后D0命令,由下图可看出,51,06 ,41 41 53 53 44 44,0D 分别为字符串最大长度81、实际长度6、AASSDD回车的ASCII码。

故字符串1已经正常存入。

如下图:断点设在G 37时完成字符串2:AASSDD的输入,结合D20命令可见存储内容。

0030行有第一个字符串AASSDD,0080行有第二个字符串AASSDD.故程序写入过程调试完成,正常。

如下图:断点设在004B:CMP AL,[BX](即G 4B)时字符串实际长度已送入AL=6,[BX]=6,即将进行比较,不相同则跳转(显然此处两字符串长度都为6,不跳转)。

然后用P 命令逐步运行,连续运行三步,可见程序顺序执行,未跳转。

长度比较相同后,即将进行循环对比,则可将断点设在循环体外G 60处如下图,可知CL=00,即比较了6次,而后G 直接运行出结果,显示MATCH。

程序正常。

2、输入长度相同的不同字符串AASSDD和AASSWD
如下图:由于1 中已经初始化、输入检查完毕,故将断点直接设在G 37,完成AASSDD 和AASSWD输入,由D20可见地址0BAC:0035和0BAC:0088处开始存入两字符串最大长度、实际长度、内容、回车的ASCII码
如下图:同1 ,G 4B,逐步运行,长度相同,不跳转
如下图:进入循环体,用P 命令逐步运行直到AL=44=D,[BX]=[008E]=W时,两字符不同,跳转至006A, 运行G命令至结束显示NO MATCH。

程序正常。

3、输入两程度不同的字符串AA和AASSDD
如下图:断点设在G 37完成输入,D20可见AA和AASSDD均已存入。

如下图:断点设在G 4B处两字符串长度AL=2,[BX]=[0089]=6,即将比较,用P命令逐步运行可知,运行第二次P是跳转至006A,G命令直到结束,显示NO MATCH. 程序正常。

综合程序调试过程1,2,3表明了程序在能够判断两个字符串是否匹配,程序无误。

七、实验结果、数据及现象
由调试过程可知,经过三次调试分别比较1、AASSDD和AASSDD;2、AASSDD 和AASSWD;3、AA和AASSDD,依次显示结果MATCH,NO MATCH, NO MATCH.
故程序检验正常。

八、思考题
1、总结伪指令和子程序的异同。

答:相同:使用伪指令和子程序均可简化源程序设计,增强程序的可读性和可维护性。

不同:伪指令无对应的机器代码,汇编过程中由汇编器进行处理,用来指示汇编后的数据存储分配、变量赋值、逻辑段的分段以及源程序的结束等信息。

子程序有对应的机器代码,并通过相关的指令直接操作数据存储分配,变量赋值、逻辑段分段等步骤。

2、指出用DEBUG命令跟踪循环程序时,使用G、T和P命令中的哪几个?并简
要地予以总结。

答:使用了G命令和P命令。

G命令运行时从指定地址开始运行程序,如不指定,则从当前的CS:IP开始执行,直至遇到断点或者程序正常结束。

T命令也称为单步命令,从指定地址起执行一条或指定条数的指令后停下。

如未指定地址,则从当前的CS:IP开始执行。

P命令用于逐步执行指令。

相关文档
最新文档