Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#4

AW: LastPos Varianten

  Alt 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....
  Mit Zitat antworten Zitat