Поиск , используя ASM вставки
Этот код я написал уже давненько. Обычный поиск путем сравнения каждого символа. Да алгоритм не очень. На самом деле просто хотелось написать эту функцию и сравнить с имеющейся в FreeBasic INSTR. Результат конечно разочаровал меня, но все таки при поиске в небольших объемах текста FindString быстрее чем INSTR. Но на больших отстает , при том заметно!
Code
Function FindString(ByVal dest As String, ByVal search As String, ByVal pos_ As Integer) As Integer Export
Dim As Integer return__
Dim As Integer ptr return_=@return__,add_=@pos_
Asm
push ebp
mov edi,[add_]
push edi
mov edi,[return_]
push edi
mov edx,[dest]
Add edx,[pos_]
dec edx
mov ebx,[search]
Xor edi,edi
Xor esi,esi
Xor ebp,ebp
mov ecx,-1
main:
mov al,[ebx+esi]
mov ah,[edx+edi]
cmp al,0
jz finish
cmp ah,0
jz finish
cmp al,ah
jz Yes
cmp ebp,0
jz ret__
mov edi,ebp
ret__:
Xor ebp,ebp
Xor esi,esi
inc edi
jmp No_
Yes:
cmp ebp,0
jnz EBPNONULL
mov ebp,edi
inc ebp
EBPNONULL:
inc edi
inc esi
No_:
loop main
finish:
cmp ebp,0
jz Err
Not ecx
jmp Valid
Err:
pop eax
pop ebx
mov [eax],ebp
jmp END_
Valid:
pop eax
pop ecx
Add ebp,[ecx]
dec ebp
mov [eax],ebp
END_:
pop ebp
End Asm
Return return__
End Function
Print FindString("FreeBasic","Bas",1):Sleep