AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Inline Asm Problem

Ein Thema von JnZn558 · begonnen am 8. Mär 2010 · letzter Beitrag vom 10. Mär 2010
Antwort Antwort
Seite 2 von 3     12 3   
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Inline Asm Problem

  Alt 8. Mär 2010, 17:39
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Inline Asm Problem

  Alt 8. Mär 2010, 17:42
Abgesehen davon wird Test überhaupt nicht instanziert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#13

Re: Inline Asm Problem

  Alt 8. Mär 2010, 18:13
Dazu wird dein Functionsergebnis nicht ( wie sonst üblich ) in EAX zurückgegeben
Glückauf
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#14

Re: Inline Asm Problem

  Alt 8. Mär 2010, 18:16
Zitat von JnZn558:
Zitat:
Project Project.exe raised exception class EInOutError with message 'I/O error 105'.
{$apptype console} fehlt für writeln!
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#15

Re: Inline Asm Problem

  Alt 8. Mär 2010, 21:50
Zitat von gammatester:
Zitat von JnZn558:
Zitat:
Project Project.exe raised exception class EInOutError with message 'I/O error 105'.
{$apptype console} fehlt für writeln!
jo, das is es, was zum absturz macht, danke

Zitat von DeddyH:
Abgesehen davon wird Test überhaupt nicht instanziert.
achja, Delphi, vergiss ich fast immer, komme von C++, so es is kein absturz mehr da, aber es zeigt auch nichts an.

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.
Peace on the world
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#16

Re: Inline Asm Problem

  Alt 8. Mär 2010, 22:20
Zitat von JnZn558:
aber es zeigt auch nichts an.
Dir wurde schon mehrmals gesagt, daß ein String eine komplexere interne Struktur besitzt ... das kann so einfach nichts werden.

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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#17

Re: Inline Asm Problem

  Alt 8. Mär 2010, 22:35
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.
Peace on the world
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#18

Re: Inline Asm Problem

  Alt 8. Mär 2010, 22:40
Zitat von himitsu:
Zitat von JnZn558:
aber es zeigt auch nichts an.
Dir wurde schon mehrmals gesagt, daß ein String eine komplexere interne Struktur besitzt ... das kann so einfach nichts werden.

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;
danke sehr, dieser code gefaellt mir sehr gut. vielen dank fuer die muehe und hilfen an alle beteiligten
Peace on the world
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#19

Re: Inline Asm Problem

  Alt 8. Mär 2010, 22:50
Darf man fragen, wozu das ganze?
Delphi-Quellcode:
function ShowText: PWideChar;
const
  str: WideString = 'Hello World!';
begin
  Result := PWideChar(str);
end;
Das sollte doch genau so funktionieren und ist deutlich lesbarer.
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#20

Re: Inline Asm Problem

  Alt 9. Mär 2010, 08:36
Zitat von NamenLozer:
Das sollte doch genau so funktionieren und ist deutlich lesbarer.
Und schneller
Glückauf
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz