1. 程式人生 > >彙編:組合語言實現判斷一個字串是否是另一個字串的字串

彙編:組合語言實現判斷一個字串是否是另一個字串的字串

 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