И то и другое. Главное, чтоб работало быстрее. Нужна быстрая альтернатива функциям Left, Right, Instr.
Вот алгоритм Бойера-Мура на практике, де-факто самый быстрый алгоритм поиска подстроки в строке (Реализация на FreeBasic с вставкой Asm):
Быстрее в 10 раз обычного Instr.
#INCLUDE "crt.bi"
Function InStrZ naked( start As Integer, _
s1 As Zstring Ptr, _
s2 As Zstring Ptr ) As Integer
Asm
mov ecx, [esp+8] '' get pointer to s1
mov edx, [esp+12] '' get pointer to s2
movzx eax, Byte Ptr [ecx] '' get first char
test eax, eax '' test for null string
jz 0f '' return zero
movzx eax, Byte Ptr [edx] '' get first char
test eax, eax '' test for null string
jz 0f '' return zero
push ecx '' preserve ecx around call
''--------------------------------------------
'' The extra '+4' below is to correct for the
'' effect of the 'push ecx' above on ESP.
''--------------------------------------------
Add ecx, [esp+4+4] '' correct for start position
dec ecx '' correct for change in base
push edx '' push pointer to s2
push ecx '' push corrected pointer to s1
Call StrStr '' call CRT strstr function
Add esp, 8 '' remove parameters from stack
pop ecx '' recover ecx
test eax, eax '' test for substring not found
jz 0f '' return zero
Sub eax, ecx '' subtract address of s1 data
inc eax '' adjust return value to base 1
0:
ret 12 '' return and remove parameters from stack
End Asm
End Function