AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Inkrementieren von Eax geht nicht

Ein Thema von mr_emre_d · begonnen am 14. Feb 2009 · letzter Beitrag vom 15. Feb 2009
Antwort Antwort
Seite 3 von 3     123   
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#21

Re: Inkrementieren von Eax geht nicht

  Alt 15. Feb 2009, 22:38
mr_g

kannst du mir dann ein bsp. geben wo ein

Delphi-Quellcode:
begin
asm
end;
end;
was anderes ist als ein

Delphi-Quellcode:
asm
end;
würde mich mal interessieren
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Inkrementieren von Eax geht nicht

  Alt 15. Feb 2009, 23:22
Wie gesagt... bei einer Funktion oder Prozedur:
Delphi-Quellcode:
function Foo(Bar:Integer): Boolean;
asm
end;
Das ist nicht gleich dem:
Delphi-Quellcode:
function Foo(Bar:Integer): Boolean;
begin
  asm
  end;
end;
Die OH sagt dazu:
Zitat:
Der Compiler führt für diese Routinen [erstere ^^] verschiedene Optimierungen durch:
  • Der Compiler erstellt keinen Code zum Kopieren von Wert-Parametern in lokale Variablen. Dies betrifft alle Wert-Parameter vom Typ String und alle anderen Wert-Parameter, deren Größe nicht ein, zwei oder vier Byte beträgt. Innerhalb der Routine müssen derartige Parameter als var-Parameter behandelt werden.
  • Der Compiler weist keine Funktionsergebnis-Variable zu, und eine Referenz auf das Symbol @Result ist ein Fehler. Eine Ausnahme bilden Funktionen, die eine Referenz auf einen String, eine Variante oder ein Interface zurückliefern. Die aufrufende Routine weist diesen Typen immer einen @Result-Zeiger zu.
  • Der Compiler generiert nur Stackframes für verschachtelte Routinen, für Routinen mit lokalen Parametern oder für Routinen, die über Parameter im Stack verfügen.
  • Locals ist die Größe der lokalen Variablen, Params die Größe der Parameter. Wenn sowohl Locals als auch Params Null ist, existiert kein Eintrittscode, und der Austrittscode besteht nur aus einer RET-Anweisung.
...
Gruß Mr_G
Jan
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#23

Re: Inkrementieren von Eax geht nicht

  Alt 15. Feb 2009, 23:28
Zitat von Apollonius:
Dumm ist allerdings, dass der Compiler selbst in einer reinen Assembler-Routine meint, einen Stackframe generieren zu müssen, was extrem lästig sein kann.
Ich lehn mich mal aus dem Fenster und behaupte, er machts nicht in wirklich jedem Fall (aber in fast jedem), ich meine mich zu erinnern, dass ich das mal durchprobiert hatte und bei bestimmten Kombinationen der Basepointer nicht gepusht wird.
Bloß der abschließende Rücksprung wird immer generiert.


Zitat von Dax:
Wie sonst soll es vom Compiler verwaltete lokale Variablen geben?
Wer braucht die schon. Wenn ich schon eine asm-Routine einbau, dann verwalte ich auch meine Variablen und den Frame selbst.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 16:36 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