文档详情

实验二查找匹配字符串.doc

发布:2017-04-17约2.74千字共5页下载文档
文本预览下载声明
20001542 罗阳 00级计算机二班 实验二 查找匹配字符串 实验目的:查找匹配字符串 实验要求:程序接收键入的一个关键字和一个句子,若句子中不包含关键字,则显示‘NO MATCH’;若句子包含关键字则显示‘MATCH’,并把该关键字在句子中的位置用十六进制数显示出来。程序以输入CTRL+C退出。 实验设计思想:①输入关键字和一个句子,应分别存入相应的缓冲区,可调用功能0AH。 ②在句子中查找关键字,可用串比较指令。SI:存放关键字的指针;DI:存放句子中正相比较的字段的指针;CX:存放关键字的字母个数(长度)。③整个比较过程可用一个循环结构完成。循环次数:(句子长度-关键字长度)+1,注意:在计算循环次数时,遇到句子长度关键字长度,转向显示“NO MATCH”。循环中还需用到BX寄存器,用来保存句子中当前正在比较字段的首地址。④输出信息:用功能调用09H分别显示不同的信息。若找到,还要显示匹配字符串在句子中的位置。找到时,BX寄存器的内容为匹配字符串的首地址,将其减去句子的首地址,再将差值加一即是所要的匹配字符串在句子中的位置。可将位置值转换为十六进制数从屏幕中显示出来。 源程序框图: (见下页) 程序开始 按照要求输入关键字,并保存。 输入句子,并保存 将句子首地址放到bx和di寄存器中,si指向关键字首地址,并将dl寄存器值赋0 CX寄存器中存放关键字长度,用串比较指令,结果为0? N AL内容赋(关键字长度-句子长度 Y (AL)0? Y N (AL)=(AL)+1 (BX)=(BX)+1,(DI)=BX Y (DL)=(DL)+1,(DL)(AL)? N 执行NOT MATCH 无 条 件 执行MATCH,并将关键字在句子中的位置转化为十六进制数输出 跳 转 结束返回 5、实验源程序: newline macro mov ah, 02h mov dl, 0dh int 21h mov ah, 02h mov dl, 0ah int 21h endm data segment maxlenk db 8 ;max key_word length factlenk db ? ;key_word length to enter key_word db 8 dup(?) maxlens db 32 ;max sentence length factlens db ? ;sentence length to enter sentence db 32 dup(?) info1 db Enter Key_word:$ info2 db Enter sentence:$ mess0 db Match at location:$ mess1 db No match.$ mess2 db ?,?,H of the sentence.$ data ends stack segment stack stack ends code segment main proc far assume cs:code, ds:data, es:data, ss:stack start: push ds sub ax, ax push ax mov ax, data mov ds, ax mov es, ax mov ah, 09h lea dx, info1 int 21h mov ah, 0ah lea dx, maxlenk int 21h ; read the keyword begin: newline mov ah, 09h lea dx, info2 int 21h mov ah, 0ah lea dx, maxlens int 21h ; read the sentence newline lea si, key_word lea bx, sentence lea di, sentence mov dl, 00h cld again: mov cl, factlenk repz cmpsb jz match mov al, factlens sub al,factlenk
显示全部
相似文档