Sin, Con, Tan?
-
Hi,
wie kann man Sin, Con und Tan in Assembler schreiben?
-
Indem man die FPU benutzt. Die Befehle dazu sind fsin, fcos und fptan. Wenn du sowohl Sinus als auch Cosinus benötigst, wäre es sinnvoll den Befehl fsincos zu verwenden, da dieser schneller als zwei separate Aufrufe ist.
-
Das würde mich auch interessieren.
Kannst du das mit einem Beispiel untermauern
Ich habe hier ein Buch in dem steht: "FSINCOS berechnet den Sinud und den Kosinus des Wertes, der in ST(0) steht."
Einem ASM-Leien sagt das nichts
-
Hrhr, alles eine Fragte der Doku. Also fsin und fcos isnd ja klar, der Wert liegt vorher auf ST(0) und nacher liegt auf ST(0) der sinus bzw. cosinus. Bei fsincos liegt vorher der Wert auf ST(0). Danach liegt auf ST(0) der Cosinus und auf ST(1) der Sinus (d.h. der TOS wird um einen erhöht).
-
Wenn man noch nie mit der FPU gearbeitet hat, sollte man bei Google mal nach einem Tutorial danach suchen. Da man das Grundprinzip der verwendeten Register schon verstanden haben sollte.
Grundsätzlich gibt es 8 Register die als Stack aufgebaut sind, ST(0) bis ST(7) (ja ja, ich weiß, dass sind eigentlich nur Alias-Namen). Das heißt, wenn ein Wert auf den Stack gepusht wird, 'wandert' alles ein Register 'runter'.
Dann könnte der SinCos Befehl ungefähr so implementiert werden:;DatenSegment var1 dd 0.5 varsin dd ? varcos dd ? ;CodeSegment fninit ;FPU initialisieren fld var1 ;Variable auf den FPU-Stack pushen fsincos ;sinus und kosinus von st(0) bilden ; Cosinus ist nach dem Befehl in st(0) gespeichert und Sinus in st(1) fstp varcos ;Cosinus vom Stack poppen und in der Variable varcos speichern (der sinus liegt danach durch das pushen wieder in St(0)) fstp varsin ;Sinus vom Stack in die Variable varsin poppen
Wer sonst Delphi besitzt, sollte mal ein Blick in die Unit Math werfen (unter \Borland\Delphi7\Source\Rtl\Common), da wird auch recht viel mit Assembler rum handiert und größtenteils auch kommentiert.
-
schaut mal unter www.docjunior.de
im Assembler-Bereich hab ich ne txt dazu (münze das gerade um, dass man auch html-Tutz hat..)Vergessen:
Da wird nicht erklärt, wie man Sinus, etc. errechnet, sondern nur die allgemeine Funktionsweise der FPU. Die Befehle dazu wurde ja aber genannt und der Rest sollte dann kein Problem mehr darstellen.cYa
DjR[ Dieser Beitrag wurde am 03.04.2003 um 09:35 Uhr von DocJunioR editiert. ]