AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Inline Assembler Parameter übergabe
Thema durchsuchen
Ansicht
Themen-Optionen

Inline Assembler Parameter übergabe

Ein Thema von neolithos · begonnen am 16. Sep 2003 · letzter Beitrag vom 16. Sep 2003
Antwort Antwort
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#1

Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 12:06
procedure Prc(var a : Cardinal); a steht in [EAX]

procedure Swap1(var a, b : Cardinal); a steht in [EAX]
b steht in [EDX]

procedure Proc(a, b : Cardinal); a steht in EAX
b steht in EDX

Doch wie sieht es in diesen Fällen aus:

procedure Proc(a : Word); procedure Proc(a, b, c : Integer); function Proc(a, b, c : Integer; d : Byte; var e : Byte; var f : Cardinal) : Word; Wie komme ich jetzt an die Parameter heran?
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 12:54
Delphi-Quellcode:
procedure Prc(var a{[EAX]}: Cardinal);
procedure Swap1(var a{[EAX]},b{[EDX]}: Cardinal);
procedure Proc(a{AX}: Word);
procedure Proc(b{AX}: Word);
procedure Proc(a{EAX}, b{EDX}, c{ECX} : Integer);
function Proc(a{EAX}, b{EDX}, c{ECX} : Integer; d : Byte; var e : Byte; var f: Cardinal) : Word; {EAX} 
// D,E,F liegen auf dem Stack
Im letzten Beispiel entsteht eine Mischübergabe, aus Register und Stack.
Die ersten 3 ordinalen Paramater werden in den Registern EAX,EDX,ECX übergeben. Die restlichen Paramter liegen auf dem Stack. Wobei var E,F Zeiger auf die Speicheradresse sind.

Delphi-Quellcode:
function Proc(a{EAX}, b{EDX}, c{ECX} : Integer; d : Byte; var e : Byte; var f: Cardinal) : Word;
asm
  // compiler erzeugt Stackframe autom.
  // PUSH EBP
  // MOV EBP,ESP
    
      PUSH EBX // EBX sichern
      
      MOV EBX,[A] // == MOV EBX,[EAX]
      MOV EBX,[B] // == MOV EBX,[EDX]
      MOV EBX,[C] // == MOV EBX,[ECX]
     
      MOV BL,D // == MOV BL,[EBP + ?]

      MOV EBX,E // == MOV EBX,[EBP + ?]
      MOV BL,[EBX] // BL := E
     
      MOV EBX,F
      MOV EBX,[EBX] // EBX := F

      MOV AX,BX // Result := BX

      MOV @Result,BX // Result := BX

      POP EBX
  // Stackframe entfernen, autm. durch Compiler
  // POP EBP
end;
Man sieht also das ein cleverer Delphi Programmier versucht seine Proceduren mit maximal 3 ordinalen Paramtern zu versehen. Bei Methoden mit 2 ordinalen Paramtern da in EAX = Self steht. Durch dieses Vorgehen kann der Optimierer innerhalb der Procedure den Stackframe wegoptimieren. Dies spart Stack + Zeit.
Sollte der Programmierer nicht ordinale Parameter benutzen wollen so wird er dann immer diesen Paramter in einen vergleichbaren ordinalen Typ konvertieren. Z.b. Zeiger auf Double, oder var Double;


Gruß Hagen
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 13:31
Danke!
Jetzt lohnt es sich auch die schönen neuen Processor Befehle zu lernen!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#4

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 13:37
Wow! Wo lernt man sowas?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 13:52
1. Assembler lernen
2. Delphi Hilfe lesen
3. Den Quellcode von Borland studieren.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 13:53
Zitat:
Wow! Wo lernt man sowas?
Gute Frage, 15 Jahre Programmiererfahrung, eigene Computer konstruiert und gelötet. Ich glaube das war für mich ausschlaggebend. Der Rest ist Experimentieren, News lesen, Dokus studieren, Sourcen lesen.
Interessanterweise habe ich in meinem Leben nur ein Buch über Assembler gelesen, ziemlich alter Schinken und noch Z80=U880=8080.

Gruß Hagen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 14:15
Moin Hagen,

Zitat von negaH:
Interessanterweise habe ich in meinem Leben nur ein Buch über Assembler gelesen, ziemlich alter Schinken und noch Z80=U880=8080.
etwas das Standardwerk seiner Zeit schlechthin "Programmierung des Z80" von Rodnay Zaks?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: Inline Assembler Parameter übergabe

  Alt 16. Sep 2003, 14:49
Zitat:
etwas das Standardwerk seiner Zeit schlechthin "Programmierung des Z80" von Rodnay Zaks?
Nein, ich bin im Osten aufgewachsen und da hatte man schwerer Zugriff auf diese Bücher, bzw. die ostdeutschen Bücher waren sehr gut.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:30 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