Nicht ausgiebig getestet, sollte aber funktionieren - und auch recht schnell.
Gibt True zurück wenn in s ab zeichen p ein mit substr identischer text steht. wenn p=0 dann wird p=1 angenommen
Gibt False zürück wenn s oder substr leer sind oder p>Length(s) ist oder nicht die obige bedingung zutrifft.
Delphi-Quellcode:
FUNCTION StrAtPos(
const substr,s:
string; p:integer):boolean;
asm
push edi
push esi
test eax,eax
je @Fail
// substring leer
test edx,edx
je @Fail
// s leer
test ecx,ecx
jne @1
mov ecx,1
@1: mov esi,eax
// @substr
lea edi,[edx+ecx-1]
// @s[p]
mov eax,ecx
// p
mov ecx,[esi-4]
// Lenght(substr)
test ecx,ecx
je @Fail
// Lenght(substr)=0
lea eax,[eax+ecx-1]
// p+Length(substr)-1
cmp eax,[edx-4]
jbe @Cmp
// Lenght ok
@Fail:
xor eax,eax
jmp @
End
@Cmp: mov edx,ecx
shr ecx,2
repe cmpsd
// (Lenght(substr) div 4) mal 4 Bytes vergleichen
jne @SetRes
@Bytes: mov ecx,edx
and ecx,3
repe cmpsb
// (Lenght(substr) and 3) Bytes vergleichen
@SetRes: sete al
@
End: pop esi
pop edi
end;