AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Ein bisschen InlineAssembler hilfe :)
Thema durchsuchen
Ansicht
Themen-Optionen

Ein bisschen InlineAssembler hilfe :)

Ein Thema von Spiderpig_GER_15 · begonnen am 17. Nov 2009 · letzter Beitrag vom 9. Dez 2009
 
Benutzerbild von himitsu
himitsu

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

Re: Ein bisschen InlineAssembler hilfe :)

  Alt 17. Nov 2009, 21:11
Delphi macht etwa das daraus
Delphi-Quellcode:
00461AF3 EB1F jmp @@Loop
@@Start:
// Unit1.pas.32: Zahl:= Zahl +1/n;
00461AF5 D905381B4600 fld 1
00461AFB DC3424 fdiv &n
00461AFE DC442408 fadd &Zahl
00461B02 DD5C2408 fstp &Zahl
00461B06 9B wait
// Unit1.pas.33: n:= n+1;
00461B07 DD0424 fld &n
00461B0A D805381B4600 fadd 1
00461B10 DD1C24 fstp &n
00461B13 9B wait
@@Loop:
// Unit1.pas.30: while Zahl < i do
00461B18 DB442410 fild &i
00461B1C DC5C2408 fcomp &Zahl
00461B20 9B wait
00461B21 DFE0 fstsw ax
00461B23 9E sahf
00461B24 77CF jnbe @@Start
Eine Optimierung, welche mir einfällt ... kann man das n denn nicht auch als Integer auslegen?
Delphi-Quellcode:
// Unit1.pas.33: n:= n+1;
00461B07 DD0424 fld &n
00461B0A D805381B4600 fadd 1
00461B10 DD1C24 fstp &n
00461B13 9B wait
Hier würde ja alles in einen winzigen Befehl (INC &i) reinpassen und das dan auch noch sofort und ohne warten auf die FPU.

Mit der ASM-Programmierung der Fließkommaeinheit kenn ich mich nicht grade aus, aber vielleicht kann man da ja die Zahl gleich da drinne lassen und nicht immer rein- und wieder rauskopieren.
Wenn man das n als Integer hätte, dann würde in der FPU ja nur vorranging mit Zahl gerechnet, wärend n, zusammen mit i womöglich sogar nur in den Registern rumgammeln könnte.


PS: wir hatten hier schon ein paar Mal, daß die hochoptimierten (Versuche von Menschen) ASM-Codes wesentlich langsamer oder wenigstens/zumindestens genauso schnell waren, wie die optimierten Delphi-Codes aus 'nem Pascal-Compiler.
Ein Therapeut entspricht 1024 Gigapeut.
  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 06:21 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 by Thomas Breitkreuz