微机原理字符串匹配

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ;伪指令结束

相关文档
最新文档