微机原理字符串匹配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大学学生实验报告
(2010 —2011 学年第二学期)
课程名称:微型计算机原理与接口技术开课实验室:205 2011年 5 月 30 日年级、专业、班电信091 学号姓名成绩
实验项目名称字符匹配程序指导
教师
教
师
评语教师签名:
年月日
一、实验目的、要求
1.掌握提示信息的使用方法及键盘输入信息的用法。
二、实验原理及基本技术路线图或实验内容
1.编写程序,实现两个字符串比较。如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。
2.程序框图
段寄存器及堆栈初始化
显示“请输入字符串1”
使用INT 21H的0A号子功能,
接收键入的字符串
显示“请输入字符串2”
指针SI指向串1的首字符
SI指向的字符串和串2中所有字符作比较
Y
相等?
N
SI+1,指向串1中下一字符
N
串1中的字符已取完?
Y
显示“NO MATCH”显示“MATCH”
返回DOS
三、所用仪器、材料和软件
软件名称为:MASM FOR Windows 集成实验环境2009.7
四、实验方法、步骤
根据实验的目的在该环境中编写出源代码,在进行调试、运行后,看能否得出结果。
五、源码程序编制及分析注释
程序清单及注释
CRLF MACRO ;宏定义
MOV AH,02H ;AH=02H
MOV DL,0DH ;DL=0DH
INT 21H ;系统功能调用来输出个回车字符
MOV AH,02H ;AH=02H
MOV DL,0AH ;DL=0AH
INT 21H ;系统功能调用来输出一个换行符ENDM ;宏定义结束
DATA SEGMENT ;数据段定义
MESS1 DB 'MATCH',0DH,0AH,'$' ;定义8个存储单元的数据
MESS2 DB 'NO MATCH',0DH,0AH,'$' ;定义11个存储单元的数据MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' ;定义17个存储单元的数据MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' ;定义17个存储单元的数据MAXLEN1 DB 81 ;字符串1的缓冲区最大字符数ACTLEN1 DB ? ;字符串1的实际输入字符的个数STRING1 DB 81 DUP (?) ;用来存储字符串1的81个单元MAXLEN2 DB 81 ;字符串2的缓冲区最大字符数ACTLEN2 DB ? ;用来存放字符串2的实际字符个数STRING2 DB 81 DUP (?) ;用来存储字符串2的81个单元DATA ENDS ;数据段定义结束
STACK SEGMENT STACK ;堆栈段定义
STA DB 50 DUP (?) ;在堆栈段定义50个空字符TOP EQU LENGTH STA ;TOP=50
STACK ENDS ;堆栈段定义结束
CODE SEGMENT ;代码段定义
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;段分配
START: MOV AX,DATA ;
MOV DS,AX ;将数据段的段地址赋给DS
MOV ES,AX ;将数据段的段地址赋给ES
MOV AX,STACK ;
MOV SS,AX ;将堆栈段的段地址赋给SS
MOV SP,TOP ;SP=50
MOV AH,09H ;AH=09H
MOV DX,OFFSET MESS3 ;
INT 21H ;输出'INPUT STRING1:
MOV AH,0AH
MOV DX,OFFSET MAXLEN1
INT 21H ;(DS:DX)=最大字符数,(DS:DX+1)=实际的字符数
CRLF
MOV AH,09H
MOV DX,OFFSET MESS4
INT 21H ;输出INPUT STRING2:
MOV AH,0AH
MOV DX,OFFSET MAXLEN2
INT 21H ;(DS:DX)=最大字符数,(DS:DX+1)=实际的字符数
CRLF ;宏调用
CLD ;DF=0,则串操作有低地址向高地址方向进行
MOV SI,OFFSET STRING1 ;将字符串1的偏移地址赋给SI
MOV CL,[SI-1] ;将字符串1的字符实际个数赋给CL
MOV CH,00H ;CH=00H
KKK: MOV DI,OFFSET STRING2 ;将字符串2的偏移地址赋给DI PUSH CX ;将CX中的值即为字符串1的字符个数压入堆栈
MOV CL,[DI-1] ;将字符串2的字符个数赋给CL
MOV CH,00H ;CH=00H
MOV AL,[SI] ;取出字符串1的第一个字符给AL
MOV DX,DI ;将字符串2的第一个字符赋给DX
REPNZ SCASB ;CX!=0(没有查完)和ZF=0(不相等)时重复
JZ GGG ;ZF=1,表示已经搜到了相等的字符,则转出
INC SI ;SI=SI+1
POP CX ;弹出原先字符串1中剩下未被进行比较的字符个数
LOOP KKK ;CX-1!=0则继续返回到子过程KKK
MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H ;否则CX=0时的系统功能调用将显示NO MATCH
JMP PPP ;将跳转到PPP
GGG: MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H ;系统功能调用将显示MATCH
PPP: MOV AX,4C00H
INT 21H ;系统功能调用显示控制台的操作界面
CODE ENDS ;代码段结束
END START ;伪指令结束