AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anzahl eines Zeichens im String ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl eines Zeichens im String ermitteln

Ein Thema von DevidEspenschied · begonnen am 27. Jun 2008 · letzter Beitrag vom 17. Jul 2018
 
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11

AW: Anzahl eines Zeichens im String ermitteln

  Alt 14. Jul 2018, 20: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 18:21 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz