汇编语言学习笔记03

这篇博客记录了使用汇编语言进行句子中关键字查找的实验过程。实验要求程序接收用户输入的关键字和句子,若句子包含关键字则显示匹配及位置(十六进制)。博主介绍了实验思路,包括字符串输入、比较指针移动,以及如何获取关键字位置并转换为十六进制输出。此外,还提供了实验代码,尽管代码片段以C++高亮显示,但实际为MASM汇编语言编写。
摘要由CSDN通过智能技术生成

汇编语言程序设计——句子中关键字查找与匹配

一、实验要求

程序接受用户键入的一个关键字以及一个句子。如果句子中不含关键字则显示no match,如果句子中包含关键字则显示match,且把该字在句子中的位置用十六进制数显示出来。

二、实验思路

  1. 字符串的输入和上个实验如出一辙,仍然使用DOS的9号功能调用。详情可见笔者文章汇编语言程序设计——分类统计字符个数
  2. 分别用DI和SI指向句子中和关键字中正在比较的字段,指针的移动来逐一判断是否能够匹配。
  3. AX存放关键字,BX存放句子每次匹配不上时句子首地址下移,句子长度减1,最后BX减去句子的首地址加一得到关键字所在位置。
  4. 将获得的关键字位置的二进制信息转化为十六进制输出的子程序也是一个创新点。同样也可转为十进制输出,方法类似上一个实验中的display子程序,上个实验已经阐述过,此处不再赘述。上个实验点此查看

三、实验代码

DATAS SEGMENT
    ;此处输入数据段代码  
    string1 db 'Please input your sentences:','$'
    string2 db 'Please input your keywords:','$'
    string3 db 'Match at location in the sentence is:','$'
    string4 db 'NO Match',13,10,'$'
    string5 db 'H of the sentence',13,10,'$'
    change  db 13,10,'$'  ;回车 换行 字符串结束符
  keys label byte
  max1 db 10
  act1 db ?
  key db 10 dup(?) 
  sens label byte
  max2 db 50
  act2 db 
程序接收用户键入一个关键字以及一个句子。如果句子包含关键字显示’no match’;如果句子包含关键字显示‘match’,且把该字在句子的位置用十六进制数显示出来,要求程序的执行过程如下: enter keyword :abc enter sentence :we are studying abc match at location :11H of the sentence enter sentence: xyz ,ok? no match enter sentence :^c 四. 方法说明: 程序可由三部分组成: (1 ) 输入关键字一个句子,分别存入相应的缓冲区,可用功能调用0AH。 (2) 在句子查找关键字。 1. 关键字一个句子相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这样,相应的寄存器内容也有了确定的含义,如下: SI 寄存器为关键字的指针 DI 寄存器为句子正相比较的字段的指针 CX寄存器存放关键字的字母个数(长度) 2. 整个句子关键字的比较过程可以用一个循环结构来完成。循环次数为: (句子长度--关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示“no match”,循环还需要用到BX寄存器,它用来保存句子当前正在比较字段的首地址。 (3) 输出信息: 用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。在“找到”时,还要求显示出匹配字符串在句子的位置,在“找到”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1 即是所要的匹配字符串在句子的位置,可将位置转换为十六进制数从屏幕上显示出来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值