Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Inline ASM --> mov edi, 'HalloWelt' Problem

  Alt 13. Sep 2005, 22:11
Ah, ai das wird kompliziert. Du hast also den Eingabestring modifiziert ? Das ist nicht so gut da du auf diese Weise das "Copy on Write Demand" Feature und das Refernececounting der LongStrings umgangen hast. Sprich du hast den Originalstring und alle eventuelle ddoppelten Referenzen darauf geändert.

Am besten ist es vor dem Aufruf deiner ASM Routine eine neue Kopie des Strings anzulegen und dann diese Kopie zu verändern.

Delphi-Quellcode:
var
  S,R: String;
begin
  SetString(R, S[1], Length(S));
// oder
  R := S;
  UniqueString(R);
  
  asm
      MOV EAX, R
  end;
end;
R wäre dann dein Resultstring.

Noch besser wäre es von vornhinein auf die Manipulation komplexer Datentypen, wie eben LongStrings, innerhalb von Assembler zu verzichten. So bleibst du Versionsunabhängig und die Performance leidet auch nicht enorm darunter.

Deine spezialisierte Assembler-Funktion arbeitet also nur auf preallozierte Strings und bekommt diese als Parameter des Types Pointers oder PChar übergeben. Im Grunde das was ich oben schon andeutete.

Gruß Hagen
  Mit Zitat antworten Zitat