AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [inline-asm] Ich komm mit den Parametern net klar...
Thema durchsuchen
Ansicht
Themen-Optionen

[inline-asm] Ich komm mit den Parametern net klar...

Ein Thema von dizzy · begonnen am 9. Apr 2004 · letzter Beitrag vom 12. Apr 2004
 
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

[inline-asm] Ich komm mit den Parametern net klar...

  Alt 9. Apr 2004, 21:24
Hi Osterhasis!

Ich spiele wieder ein wenig mit dem Inline-Assembler herum, und hab mir dazu auch mal die D7-Sprachreferenz + Handbuch vor die Nase gelegt. Aber die gehen ja leider leider kaum auf den Assembler ein

Folgende Methoden funktionieren wie gewünscht:
Delphi-Quellcode:
type
  TQuat = record
    x,y,z,w: double;
  end;
.
.
.
function addQ(const a, b: TQuat): TQuat;
asm
  FLD QWORD PTR [EBP-32]; // a.x to stack
  FLD QWORD PTR [EBP-24]; // a.y to stack
  FLD QWORD PTR [EBP-16]; // a.z to stack
  FLD QWORD PTR [EBP- 8]; // a.w to stack

  FADD QWORD PTR [EBP-40]; // result.w := a.w + b.w
  FSTP QWORD PTR [ECX+24];
  FADD QWORD PTR [EBP-48]; // result.z := a.z + b.z
  FSTP QWORD PTR [ECX+16];
  FADD QWORD PTR [EBP-56]; // result.y := a.y + b.y
  FSTP QWORD PTR [ECX+ 8];
  FADD QWORD PTR [EBP-64]; // result.x := a.x + b.x
  FSTP QWORD PTR [ECX ];
end;

function mulQ(const a, b: TQuat): TQuat;
asm
  FLD QWORD PTR [EBP-32]; // a.x to stack
  FLD QWORD PTR [EBP-24]; // a.y to stack
  FLD QWORD PTR [EBP-16]; // a.z to stack
  FLD QWORD PTR [EBP- 8]; // a.w to stack

  FMUL QWORD PTR [EBP-40]; // result.w := a.w * b.w
  FSTP QWORD PTR [ECX+24];
  FMUL QWORD PTR [EBP-48]; // result.z := a.z * b.z
  FSTP QWORD PTR [ECX+16];
  FMUL QWORD PTR [EBP-56]; // result.y := a.y * b.y
  FSTP QWORD PTR [ECX+ 8];
  FMUL QWORD PTR [EBP-64]; // result.x := a.x * b.x
  FSTP QWORD PTR [ECX ];
end;
Das ist ja schonmal ein Anfang! (Geht's nebenbei noch eleganter/schneller??)
Aaaber, nun hab ich eine Prozedur, die nur einen Parameter bekommt, und schon klappt es nicht mehr. Die Prozedur:
Delphi-Quellcode:
function sqrQ(const a: TQuat): TQuat;
asm
  FLD QWORD PTR [EBP-32];
  FLD QWORD PTR [EBP-24];
  FLD QWORD PTR [EBP-16];
  FLD QWORD PTR [EBP- 8];

  FMUL QWORD PTR [EBP- 8];
  FSTP QWORD PTR [ECX+24]; // *
  FMUL QWORD PTR [EBP-16];
  FSTP QWORD PTR [ECX+16];
  FMUL QWORD PTR [EBP-24];
  FSTP QWORD PTR [ECX+ 8];
  FMUL QWORD PTR [EBP-32];
  FSTP QWORD PTR [ECX ];
end;
Ich hab sie genau so aufgebaut wie die anderen beiden, aber folgende Fehlermeldung zur Runtime:
[...] Accessviolation [...] Schreiben von Adresse 00000018
An der mit nem * markierten Zeile wird gehalten.

Was kann/muss ich anders machen? Ich verstehe die Übergabe von nicht-ordinalen Typen an ein function-result nicht so wirklich...


Großes Osterdanke schonmal!
dizzy


\\edit: Nachtrag: Wäre es evtl. sinnvoll hierfür MMX einzusetzen? (Es geht geschwindigkeitstechnisch um die Wurst ) Wie würde man das dann implementieren müssen?
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
 


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 04:45 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-2025 by Thomas Breitkreuz