Registriert seit: 12. Jun 2002
3.483 Beiträge
Delphi 10.1 Berlin Professional
|
AW: Anzahl eines Zeichens im String ermitteln
14. Jul 2018, 21:31
Dann möchte ich meine schnell zusammengeschrieben Assembler-Rountine auch noch ins Rennen werfen.
Delphi-Quellcode:
function AH_CharCountAsm( const S: string; Ch: Char): Cardinal;
asm
{$IFNDEF CPUX64}
test eax, eax
jz @@Empty // wenn S = '' dann gibt es nichts zu tun
push ebx
push esi
mov esi, eax
xor eax, eax
xor ebx, ebx
// Stringlänge ermitteln
//mov ecx, DWORD PTR [esi-skew].StrRec.Length
mov ecx, DWORD PTR [esi-$04]
// ESI auf das String-Ende zeigen lassen und ECX negieren damit ESI+ECX*2 das erste Zeichen ergibt
lea esi, [esi+ecx*2]
neg ecx
@@Loop:
cmp WORD PTR [esi+ecx*2], dx
sete bl
add eax, ebx
inc ecx
jnz @@Loop
pop esi
pop ebx
@@Empty:
{$ELSE}
xor rax, rax // Rückgabewert auf 0 setzen
test rcx, rcx
jz @@Empty // wenn S = '' dann gibt es nichts zu tun
mov r8, rcx
xor ecx, ecx
// Stringlänge ermitteln
//movsxd r9, DWORD PTR [r8-skew].StrRec.Length
movsxd r9, DWORD PTR [r8-$04]
// R9 auf das String-Ende zeigen lassen und R9 negieren damit R8+R9*2 das erste Zeichen ergibt
lea r8, [r8+r9*2]
neg r9
@@Loop:
cmp WORD PTR [r8+r9*2], dx
sete cl
add eax, ecx
inc r9
jnz @@Loop
@@Empty:
{$ENDIF ~CPUX64}
end;
Code:
00000 Calibrate
03237 1234588 miep
05421 Ydobon
02629 marabu
03317 Missionar
03232 alzaimar
02661 Uwe Raabe StringCountChar
02629 Uwe Raabe StringCountCharFor
02144 KodeZwerg CountCharInString
07170 KodeZwerg CharInStringA
03498 Neutral General CharCountAsm
01993 Uwe Raabe CharCount
01772 Andreas Hauladen CharCountAsm *****
02696 Egon Hugeist CharCount_1
03242 Egon Hugeist CharCount_2
02556 Egon Hugeist CharCount_Double_Sided_3
02681 Egon Hugeist CharCount_Double_Sided_4
03318 Delphi CountChar
Geändert von jbg (15. Jul 2018 um 19:21 Uhr)
|
|
Zitat
|