天天看點

彙編:彙編語言實作判斷一個字元串是否是另一個字元串的字串

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://sugarat.top

繼續閱讀