汇编:汇编语言实现判断一个字符串是否是另一个字符串的字串

本文介绍了一种使用汇编语言实现的字符串匹配算法,通过循环程序设计,判断一个字符串是否完全包含在另一个字符串中。该算法首先比较两个字符串的首个字符,如果相等,则继续比较后续字符;如果不等,则从下一个字符重新开始比较,直到找到匹配的字符串或遍历完目标字符串。
 1 ;==========================================
 2 ;循环程序设计
 3 ;判断一个字符串是否出现在另一个字符串中
 4 DATAS SEGMENT
 5 string1 db "your finger can change the world",0
 6 string2 db "finger",0
 7 flag db ?   ;存在为1 不存在为0
 8 DATAS ends
 9 CODES SEGMENT
10     ASSUME CS:CODES, DS:DATAS
11     START:
12         mov AX,DATAS     
13         mov DS,AX          
14         ;正式的代码开始
15         mov BX,offset string2   
16         mov AX,offset string1   ;si存放目标字符串的偏移地址
17         
18         dec AX
19     while1:         ;while1判断string2的首字母与string1 的哪一个首字母相等
20         mov si,AX
21         mov di,BX               ;di存放带判断字符串的偏移地址
22         inc si
23         inc AX
24         xor cx,cx
25         mov ch,[si] ;ch存放string1中的一个字符
26         mov cl,[di] ;cl存放string2中的一个字符
27         cmp ch,0
28         jz flag0    ;判断是否已经为最后一个字符,如果是则跳转
29         cmp ch,cl
30         jnz while1
31 
32     while2:         ;while2判断string2的其余字母与string1 的其余字母是否相等
33         inc di
34         inc si
35         inc dx      ;si di自增判断其余字符
36         xor cx,cx
37         mov ch,[si] ;ch存放string1中的一个字符
38         mov cl,[di] ;cl存放string2中的一个字符
39         cmp cl,0    
40         jz flag1    ;string2已经到最后一个字符说明相等
41 
42         cmp ch,0    ;string1已经是最后一个字符
43         jz flag0
44         
45         cmp ch,cl
46         jz while2   ;如果两个字符相等则继续循环判断一个字符
47         jnz while1  ;不等则进行循环1
48 
49     flag0:
50         mov flag,0
51         jmp exit
52     flag1:
53         mov flag,1
54         jmp exit
55     exit:
56         xor cx,cx
57         mov cl,flag
58         add cl,30h
59         mov flag,cl
60     print:          ;向屏幕打印输出判断结果
61         lea si,flag 
62         mov byte ptr[si+1],'$'  ;加上结束符
63         mov dx,si
64         mov ah,09h
65         int 21H
66         mov ah,4ch
67         int 21H
68 CODES ends
69     end START

 

转载于:https://www.cnblogs.com/roseAT/p/10250320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值