AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Einfache Funktion in asm übersetzen...
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache Funktion in asm übersetzen...

Ein Thema von sniper_w · begonnen am 5. Okt 2005 · letzter Beitrag vom 6. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#1

Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 15:34
Delphi-Quellcode:
function VectorLength( const v:array of single ):single;
begin
  Result := sqrt (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
end;
Ich bräuche asm Version dieser Funktion. Wer kann helfen ? Danke.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 15:36
Setze da doch einfach einen Haltepunkt hin und schau dir zur Laufzeit da die CPU ansicht an, da steht der asm Code, glaube ich..
Benjamin
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 16:28
Bist du sicher, dass du wirklich asm brauchst? Wenn's dir nur um die Geschwindigkeit geht, wirst du da gegenüber einem modernen Compiler wie Delphi nicht mehr viel rausholen können.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 16:36
Bei diser Funktion ist die Geschwiendigkeitsgewinn gering, aber sonst gibt es immer ein Geschwindigkeitsgewinn.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 16:39
Das wollte ich ja auch gar nicht anzweifeln. Bloß ist mittlerweile der von Compilern erzeugte Code schon so weit optimiert, dass im Allgemeinen (also nicht nur bei diesem Beispiel) nur noch geringe Geschwindigkeitsvorteile erzielt werden können. Da muss man dann halt wissen, ob einem das noch den Aufwand wert ist.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#6

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 16:45
guck dir im debugger erstmal an, was der compiler aus der funktion macht.
das kannst du ja hier mal posten.
eventuell ist das auch schon die optimierteste variante.
(kein debug=build, auf release-build stellen!)
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 17:20
Ich versuch mal mein Glück, muss aber auf keinen Fall stimmen. Das letzte mal, das ich FP-Routinen in Assembler geschrieben hab ist schon ne Weile her

Delphi-Quellcode:
function VectorLength(const v:array of single ):single;
asm
  fld dword ptr [eax]
  fmul st(0), st(0)
  fld dword ptr [eax+4]
  fmul st(0), st(0)
  fld dword ptr [eax+8]
  fmul st(0), st(0)
  fadd
  fadd
  fsqrt
end;
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 17:21
... wird so nicht klappen, du hast die Additionen vergessen!
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 17:22
Habs grad gemerkt und korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

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

Re: Einfache Funktion in asm übersetzen...

  Alt 5. Okt 2005, 22:46
Ich würde "faddp" benutzen, dann bleibt aufm FPU-Stack nachher nix über. Ich weiss nicht ob das schlimm wäre, aber folgende Variante verrichtet bei mir oft und gut ihre Arbeit:
Delphi-Quellcode:
function VectorLength(const v:array of single ):single;
asm
  fld dword ptr [eax]
  fmul st(0), st(0)
  fld dword ptr [eax+4]
  fmul st(0), st(0)
  fld dword ptr [eax+8]
  fmul st(0), st(0)
  faddp
  faddp
  fsqrt
  fstp result;
end;
Und du hast die Zuweisung an Result vergessen .
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:27 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