Проба поиска строк на ассемблере
Участников: 2
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Проба поиска строк на ассемблере
Решил попробовать реализовать подобие функции Instr на ассемблерных вставках, но результат меня разочаровал. Скорость поиска получилась медленнее, но наверно оно и понятно... Ладно выкладываю код, может найдется кто-то заинтересованный и оптимизирует его.
- Код:
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
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Проба поиска строк на ассемблере
судя по всему это брутфорс. Соответственно, хоть код и маленький, но быстротой не блещет, ибо делает len(dest)*len(search) сравнений... нужно менять алгоритм... эт раз... потом если уж писать на асме, то хоть оптимайзить надо..эт два. имхо, но и для брутфорса можно сделать меньше переходов.
Потом посмотрю, перепишу, попытаюсь...
Потом посмотрю, перепишу, попытаюсь...
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|