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