unter
http://www.delphipraxis.net/51284-te...n-zaehlen.html gibt es super schnelle String-Funktionen,
leider bei mir nicht mit Delphi XE2 compilierbar
a) um prinzpiell im x32 und x64 bit mode zu kompilieren müssten doch die $IFDEF Definition richtig sein?
b) keyword
ASM erzeugt bei mir einen Fehler im x64 bit modus
c) unter x32 bekomme ich folgenden Fehler
[DCC Fehler] _faststrings.pas(1467): E2116 Ungültige Kombination von Opcode und Operanden (bei TEST &SubStr, &SubStr) ??
Delphi-Quellcode:
///
/// Counts number of substr in S
/// source: [url]http://www.delphipraxis.net/51284-teil-string-anderem-string-suchen-zaehlen.html[/url]
///
/// failure with XE2 compiler !!!
function CountString(
Const substr, s: AnsiString): Word;
begin
{$IFDEF CPUX86}
ASM
PUSH ESI
PUSH EDI
PUSH EBX
TEST &SubStr, &SubStr
JE @Exit
TEST &S, &S
JE @Exit0
MOV ESI, &SubStr
MOV EDI, &S
PUSH EDI
MOV ECX, [EDI - 4]
MOV EDX, [ESI - 4]
DEC EDX
JS @Fail
XOR EAX, EAX
MOV AL, [ESI]
INC ESI
SUB ECX, EDX
JLE @Fail
@Loop:
REPNE SCASB
JNE @Ready
MOV EBX, ECX
PUSH ESI
PUSH EDI
MOV ECX, EDX
REPE CMPSB
POP EDI
POP ESI
JNE @noInc
CMP EAX, $FFFF0000
JAE @Ready
ADD EAX, $00010000
@noInc:
MOV ECX, EBX
JMP @Loop
@Fail:
POP EDX
@Exit0:
XOR EAX, EAX
JMP @Exit
@Ready:
POP EDX
SHR EAX, 16
@Exit:
POP EBX
POP EDI
POP ESI
end;
{$ENDIF CPUX86}
/// x64 bit code
{$IFDEF CPUX64}
/// ????
asm
end;
{$ENDIF CPUX64}
End;