Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
Delphi XE2 Professional
|
AW: LastPos Varianten
18. Feb 2013, 15:55
Oder noch mal deutlich schneller so:
(Nicht wirklich optimiert und nur flüchtig überprüft)
Delphi-Quellcode:
FUNCTION LastPosA( const SearchFor,SearchIn:AnsiString):integer;
asm
test eax,eax
je @Ret
test edx,edx
je @ReturnZero
cmp eax,edx
je @ReturnOne // Strings identisch
push ebp
push ebx
push edi
push esi
mov ecx,[eax-4] // Length(SearchFor)
mov ebp,[edx-4] // Length(SearchIn)
sub ebp,ecx
js @Fail // SearchFor länger als Searchin
mov bl,[eax] // erstes Zeichen aus SearchFor
sub ecx,1
je @CharLoop
lea eax,[eax+ecx+1] // hinter SearchFor
neg ecx
@OuterLoop: cmp [edx+ebp],bl
je @FirstFound
@NextOuter: sub ebp,1
jns @OuterLoop
jmp @Fail
@FirstFound: lea edi,[edx+ebp+1]
sub edi,ecx
mov esi,ecx
@InnerLoop: mov bh,[eax+esi]
cmp bh,[edi+esi]
jne @NextOuter
add esi,1
jne @InnerLoop
jmp @Found
@CharLoop: cmp [edx+ebp],bl
je @Found
sub ebp,1
jns @CharLoop
@Fail: xor eax,eax
jmp @ End
@ReturnZero: xor eax,eax
jmp @Ret
@ReturnOne: mov eax,1
jmp @Ret
@Found: lea eax,[ebp+1]
@ End: pop esi
pop edi
pop ebx
pop ebp
@Ret:
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
|
|
Zitat
|