Rev 1467 | Rev 7577 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1467 | Rev 3244 | ||
---|---|---|---|
Line 49... | Line 49... | ||
49 | ; Copyright (c) 2009 Igor Afanasiev |
49 | ; Copyright (c) 2009 Igor Afanasiev |
Line 50... | Line 50... | ||
50 | 50 | ||
51 | linlen: |
51 | linlen: |
52 | push ecx edi |
52 | push ecx edi |
53 | pushfd |
53 | pushfd |
54 | cld ; ! |
54 | cld |
55 | mov ecx,eax |
55 | mov ecx,eax |
56 | inc ecx |
56 | inc ecx |
57 | mov edi,esi ; find terminating zero |
57 | mov edi,esi ; find terminating zero |
58 | mov al,13 |
58 | mov al,13 |
59 | repne scasb |
59 | repne scasb |
60 | mov eax,edi ; calculate string length |
60 | mov eax,edi ; calculate string length |
61 | sub eax,esi |
61 | sub eax,esi |
62 | dec eax |
62 | dec eax |
63 | popfd |
63 | popfd |
64 | pop edi ecx |
64 | pop edi ecx |
- | 65 | ret |
|
- | 66 | ||
- | 67 | ;description: |
|
- | 68 | ; проверяет содержится ли строка str1 в строке str0 |
|
- | 69 | ; проверка делается только начиная с первых символов, указанных в str0 и str1 |
|
- | 70 | ; пример 1: если str0='aaabbbccc', str1='bbb' совпадения не будет |
|
- | 71 | ; пример 2: если str0='aaabbbccc', str1='aaa' совпадение будет |
|
- | 72 | ;output: |
|
- | 73 | ; al = 0 если строка str1 содержится в str0 |
|
- | 74 | ; al != 0 если строка str1 не содержится в str0 |
|
- | 75 | align 4 |
|
- | 76 | proc str_instr uses edi esi, str0:dword, str1:dword |
|
- | 77 | ;xor eax,eax |
|
- | 78 | mov edi,[str0] |
|
- | 79 | mov esi,[str1] |
|
- | 80 | cld |
|
- | 81 | @@: |
|
- | 82 | mov al,[esi] |
|
- | 83 | cmp al,0 |
|
- | 84 | je .e1 |
|
- | 85 | inc esi |
|
- | 86 | scasb ;сравниваем символы |
|
- | 87 | jz @b ;если совпали, то переходим к сравнению следующих |
|
- | 88 | ;сюда попадаем если строки не совпали |
|
- | 89 | sub al,[edi-1] |
|
- | 90 | .e1: ;сюда попадаем если строка str1 (esi) закончилась |
|
65 | ret |
91 | ret |