一、实验内容

已知任意长度字符串str,以00h结束,长度小于200h,编写汇编程序,实现在该字符串中搜索匹配子串substr(以00h结束,长度小于80),若找到,则将found单元置为ffh,并将匹配位置(匹配位置以字符串str首地址为0参考点)存放在pos单元中;否则,将found单元置为00h。要求编写完整程序,并上机通过调式能运行。

二、算法思想

搜索查找采用了Brute-Force算法,一个简单而广泛使用的暴力搜索,它在文本中对可能匹配模式串的任何位置检查匹配是否存在。一个指针SI跟踪文本,另一个指针DI跟踪模式串。对于每一个SI都会启动一次匹配搜寻,若模式匹配则将found单元置为ffh,并将匹配位置存放于pos单元。否则重置DI为0并将SI移动到下一个位置进行下一次匹配。若最后未找到匹配,则found单元置为00h。
BF算法虽然在最坏情况下的运行时间与MN成正比,但在实际应用场景中,大部分情况它的运行时间一般与M+N成正比。它在一般情况下都工作良好(Java的String类型的indexOf()方法使用的就是BF算法)。

三、运行结果截图

  • 能找到匹配的情况:FOUND=FFH,POS存放匹配位置,如下图所示:
  • 未能找到匹配的情况:FOUND=00H,如下图所示:

四、程序源码

DATA SEGMENTSTR DB "ACCCUB3121NA31CBB098621XXJDB"DB "SZ57BVVC3ACBBXXJDBSZ4329AX56"DB "SZACM34XAAB565757BVVC356CNKJ"DB "POACM8901AB565098HNKJD56CNK0"DB "I8930934MHBDV27839B4501B48YZ",00hSUBSTR DB "ACBBXXJDBSZ43S29AX",00hFOUND DB 0POS DW 0
DATA ENDSCODE SEGMENTASSUME:CS:CODE,DS:DATA
START:MOV AX,DATAMOV DS,AXLEA SI,STRLEA DI,SUBSTR
COMPARE:                     ;源串循环CMP BYTE PTR[SI],00h   ;检测源串是否结束JZ DONE1               ;若结束,则说明未找到匹配MOV DL,BYTE PTR[SI]CMP DL,BYTE PTR[DI] JNZ L1INC DI         CMP BYTE PTR[DI],00h   ;检测匹配子串是否结束JZ DONE2               ;若结束,则说明找到了匹配
L1:   INC SI JMP COMPAREDONE1: MOV CL,00HMOV FOUND,CLJMP NEXT
DONE2: MOV CL,0FFHMOV FOUND,CL LEA BX,SUBSTR  ;计算匹配位置SUB DI,BXSUB SI,DIADD SI,1MOV POS,SI
NEXT:MOV AH,4CHINT 21H
CODE ENDSEND START

emu8086汇编——字符串匹配算法程序相关推荐

  1. CCF - 201409-3 - 字符串匹配

    问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你 ...

  2. 字符串匹配shiftand算法

    令人惊叹的Shift-And/Shift-Or 写在前面:Shift-And/Shift-Or是如此令人惊叹的算法,在KMP基础上开始一段神奇之旅. 目的:以Shift-And算法为载体,试图在减少思 ...

  3. 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全

    文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...

  4. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  5. Rabin-Karp ( 字符串匹配 )详解

    字符串匹配,例从 字符串S 中( 长度为 n ),找到 字符串T ( 长度为 m ) 经典思路:遍历 字符串 S,对于每个都为起点,匹配一次,则 O( n m )的复杂度 但是这样我们就对 字符 重复 ...

  6. 字符串匹配KMP算法

    字符串匹配KMP KMP过程其实就是去找下一个更好的状态的过程,省略去了中间穷举的无用过程,直接跳到下一个更好的状态,通过模式串本身的信息,站在模式串的角度来考虑问题 取长的一对 若想让模式串直接从S ...

  7. c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  8. R语言stringr包str_count函数计算字符串匹配个数实战

    R语言stringr包str_count函数计算字符串匹配个数实战 目录 R语言stringr包str_count函数计算字符串匹配个数实战 #导入stringr包 #仿真数据

  9. 三十五、字符串匹配问题--KMP算法

    一.暴力匹配算法实现字符串匹配 如果用暴力匹配的思路,并假设现在 str1 匹配到 i 位置,子串 str2 匹配到 j 位置,则有: 如果当前字符匹配成功(即 str1[i] == str2[j]) ...

  10. iptables实现字符串匹配

    iptables实现字符串匹配 分类: SHELL&linux命令2012-07-03 18:25 3172人阅读 评论(0) 收藏 举报 stringinputtcpoutputhexlin ...

最新文章

  1. panda.read_csv的常用参数说明
  2. haproxy负载均衡_基于mycat+haproxy+keepalived搭建mysql数据库高可用负载均衡
  3. Java Swing Mysql学生成绩管理系统
  4. oracle扩充字段长度的SQL语句,sql语句修改字段长度
  5. 神策2021秋招数据分析笔试
  6. 倍福plc控制器修改地址
  7. WPS按Tab键无效果
  8. 面向数字孪生城市的智能化全息测绘(论文摘抄)
  9. 微信小程序云开发之云函数与本地数据库获取数据
  10. 学习RabbitMQ[上]
  11. 什么叫同步,什么叫异步?
  12. python vba 秒出结果_从Python运行VBA代码:宏可能被禁用
  13. JAVA热部署神器,JRebel破解版,JRebel免费实用插件
  14. UVa 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
  15. 如何使用Python将PDF转换为Word文档?
  16. voip 软电话 csipsimple
  17. Cookie详解与跨域问题
  18. 激活函数relu、leaky-relu、elu、selu、serlu比较
  19. c++中strtok函数
  20. 光模块价格由带宽还是距离决定_光模块传输距离估算方法

热门文章

  1. 推荐阅读投资理财经典55本
  2. SPSS统计分析行业应用实战--SPSS 24.0新增
  3. cs用服务器运行,如何搭建自己的CS服务器(插件配置篇)
  4. Python简单实现微博自动点赞
  5. 机器学习训练数据集图片标注工具推荐
  6. 勒索病毒自救在线工具
  7. 最新老韩泰牛PHP基础班+大牛班+大牛班高级课程
  8. 串口硬盘如何应用于并口硬盘计算机,串口硬盘和并口硬盘如何区别?
  9. 20130830sqlplus使用及联机文档
  10. WinForm超市商品管理系统