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