AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi ReverseString für ältere Delphi-Versionen
Thema durchsuchen
Ansicht
Themen-Optionen

ReverseString für ältere Delphi-Versionen

Ein Thema von Wolfgang Mix · begonnen am 11. Dez 2009 · letzter Beitrag vom 12. Dez 2009
 
Amateurprofi

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

Re: ReverseString für ältere Delphi-Versionen

  Alt 12. Dez 2009, 18:25
Und nochmal @himitsu:

Die Systemroutinen kannst du mit z.B.
CALL System.@LStrSetLength
aufrufen.
Zu deiner Assembler Routine:
Hast du die mal getestet ?
Bei Längen im Bereich 1 bis 3 gibts Probleme.
Warum?:
ECX enthält Length(Text).
Wenn ECX<4 ist dann wird ECX durch SHR ECX,2 auf 0 gestellt.
Das Loop senkt dann ECX um 1 und springt zu @@Loop4, bis ECX=0 ist.
Die Schleife wird also 2^32 mal durchlaufen, bzw. bis es 'ne Exception gibt.
Delphi-Quellcode:
    SHR ECX, 2
    XOR EAX, EAX
    @@Loop4:
    MOV EDX, [ESI + EAX * 4]
    BSWAP EDX
    MOV [EDI + ECX * 4], EDX
    INC EAX
    LOOP @@Loop4
Bei Längen > 3 funktioniert die Routine zwar, aber dafür funktioniert danach irgend etwas anderes nicht mehr.
Warum ?: Weil du EDI und ESI veränderst.

Ich hab die Idee mit dem bswap aufgegriffen.
Delphi-Quellcode:
FUNCTION ReverseStr_A(s:string):string;
asm
         test eax,eax
         jne @Start
         mov eax,edx
         jmp system.@LStrClr
@Start: push edi
         mov edi,edx
         push eax
         mov edx,[eax-4]
         mov eax,edi
         call System.@LStrSetLength
         pop edx     // @s[1]
         mov ecx,[edx-4] // Length(s)
         mov edi,[edi] // @result[1]
         jmp @NextDW
@DWLoop: mov eax,[edx+ecx]
         bswap eax
         stosd
@NextDW: sub ecx,4
         jnc @DWLoop
         add ecx,3
         js @End
@BLoop: mov al,[edx+ecx]
         stosb
         sub ecx,1
         jnc @BLoop
@End: pop edi
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  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 15:52 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