![]() |
Re: Inline Asm Problem
Ist auch kein Wunder, eine Stringvariable ist ein Zeiger auf eine etwas kompliziertere Struktur.
Insbesonder gehören dazu Integer für Größe des reservierten Speicher, Referenzzähler, Länge und die Zeichen selbst. Schreib einfach mal in Delphi was die Funktion machen soll und schau das Ergebnis im CPU-Fenster an. |
Re: Inline Asm Problem
Abgesehen davon wird Test überhaupt nicht instanziert.
|
Re: Inline Asm Problem
Dazu wird dein Functionsergebnis nicht ( wie sonst üblich ) in EAX zurückgegeben
|
Re: Inline Asm Problem
Zitat:
|
Re: Inline Asm Problem
Zitat:
Zitat:
Delphi-Quellcode:
program Project;
{$apptype console} uses SysUtils, Dialogs; function ShowText: string; begin asm jmp @start //str = 'Hello World', 0 // alle zeichen hab ich in ascii umgewandelt // und so word also 16 bit unicode zu erzeugen // dachte ich @str: dw 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 0 @start: lea eax, @str end; ShowMessage(Result); end; begin try Writeln('Text: ' + (ShowText)); Readln; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. |
Re: Inline Asm Problem
Zitat:
Außerdem ist das EAX nur in Bezug auf das Funktionsende das Result, aber Strings und dynamiache Arrays sind kein Result, sondern werden als Parameter übergeben ... das Ganze ist also eine Prozedur mit einem VAR-Parameter für den String ... ergo, du kannst nicht einfach via EAX so das Result zuweisen, da A) String ... also steckt Result wo anders und B) liegt nach deinem ASM-Block nicht das Funktionsende. Schau dir bitte erstmal genauer an, wie das mit den Funktionsparametern, dem Result, speziell auf Methoden bezogen und vorallem wie das mit dem String genau funktioniert, bevor hier noch mehr "gefährlicher Code entsteht. eine eingache Lösung:
Delphi-Quellcode:
function ShowText: PWideChar;
asm lea eax, @str ret @str: dw 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 0 end; |
Re: Inline Asm Problem
ich hab nun endlich geschafft
Delphi-Quellcode:
program Project;
{$apptype console} uses SysUtils, Dialogs; function ShowText: PChar; begin asm jmp @start @str: dw 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 0 @start: lea eax, @str mov Result, eax; end; end; begin try Writeln('Text: ' + ShowText); Readln; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. |
Re: Inline Asm Problem
Zitat:
|
Re: Inline Asm Problem
Darf man fragen, wozu das ganze?
Delphi-Quellcode:
Das sollte doch genau so funktionieren und ist deutlich lesbarer.
function ShowText: PWideChar;
const str: WideString = 'Hello World!'; begin Result := PWideChar(str); end; |
Re: Inline Asm Problem
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 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 by Thomas Breitkreuz