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