2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编字符串查找

时间:07-29来源:作者:点击数:48
汇编实现字符串查找

键盘输入一段正文串text(长度为n)和模式串pattern(长度为m),且n>>m,显示模式串pattern在正文串text中所有出现的首位置,若不出现则显示-1。

  • include io.inc
  • .model small
  • .stack
  • .data
  • text db 100 dup(?);定义缓存区,用于存放输入的字符串
  • pattern db 10 dup(?);定义缓存区,用于存放待搜索的字符串
  • A db 'please input string1:',0
  • B db 'please input string2:',0
  • flag db '-1'
  • count dw 1
  • n db 0;用于存放输入的待查找字符串的长度
  • i dw 0;用于存放字符串长度
  • j dw 0
  • .code
  • .startup
  • mov ax,offset A
  • call dispmsg;输入提示
  • lea ax,text
  • call readmsg;输入字符串
  • mov i,ax;保存字符串长度
  • mov ax,offset B
  • call dispmsg;输入提示
  • lea ax,pattern
  • call readmsg;输入字符串
  • mov j,ax;保存待搜索串长度
  • mov dx,offset text;text的首地址
  • mov di,dx;
  • mov cx,i;text的长度,作为loop的跳出循环条件
  • cld
  • again1:xor bx,bx;使用bx指示逐个字符比较,
  • again2: mov al,pattern[bx]
  • cmp al,[bx+di]; 比较一个字符
  • jne next;不相等就跳转
  • inc bx;指向下一个字符
  • cmp bx,j;比较bx和search的数量
  • je found;字符串比较完,仍相等,则查找到,相等则跳转
  • jmp again2;无条件转移,再次循环
  • next: Inc di;偏移地址+1
  • loop again1;出现了不等的情况,回到again重新比较 每执行一次loop指令,cx-1.当cx为0,即text被遍历了一遍后停止
  • dec count;标识count-1
  • jz print;如果为0则表示没有找到,跳转输出-1
  • jmp done
  • found: mov ax,di;将偏移地址传给ax
  • sub ax,dx;减法,得到带搜索串的首地址,此时dx等于带搜索串长度
  • add ax,1;输出控制,+1
  • call dispuiw
  • call dispcrlf
  • add count,1;每次找到count就+1
  • ;Inc di
  • jmp next;返回next继续运算
  • done: ;出口
  • .exit
  • print   proc;输出-1
  • mov ax,offset flag
  • call dispmsg
  • jmp done
  • ret
  • print endp
  • End

运行结果:

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门