supernicky
Goto Top

Fließkommazahlen mit der FPU berechnen

Ergebnis einer Fließkommaberechnung liegt nur als Integer vor...

Hallo,

auch wenn ich nicht viel Hoffnung habe das hier jemand antwortet, hier mal meine Frage.

Ich lege 2 Zahlen auf den FPU Stack ab (2.5 und 4.0)
Nach einer Multiplikation erhalte ich auch als Ergebnis 10.

Sobald ich aus der 4.0 eine 4.5 mache, erhalte ich genau 11... (11.25 ist das genaue Ergebnis)

Nun habe ich in meinem Buch stehen daß das Komma im Exponenten abgelegt wird und der eigentliche Zahlenwert in der Mantisse steht.

Sollte die Mantisse dann nicht den Wert 1125 und der Exponent (16bit groß) den Wert 2 haben?

Weiß jemand wie man das 80bit Ergebnis ausliest das ich wie oben auf meine 11.25 komme?

Nicky


hier noch der Code für FPU:
zahl1 ist 4.5 und zahl2 ist 2.5. Das Ergebnis der Multiplikation wird am Ende wieder nach zahl1 geschrieben, die ich dann ausgeben möchte.


fld zahl1
fld zahl2
fmul
fist zahl1
wait

Content-Key: 168434

Url: https://administrator.de/contentid/168434

Printed on: April 23, 2024 at 16:04 o'clock

Mitglied: 76109
76109 Jun 22, 2011 at 08:31:37 (UTC)
Goto Top
Hallo supernicky!

Mit
FIST
bekommst Du nur Ganzzahlen und keine Fließkommazahlen geliefert.

Mit
FBSTP Buf
bekommst Du den Fließkomma-Wert im BCD-Format geliefert. Zum umwandeln ist der Befehl 'AAM' von nutzen.

Gruß Dieter

PS. Der Buffer muss die Größe QWord (64-Bit) oder TByte (80-Bit) haben.
Member: supernicky
supernicky Jun 22, 2011 at 14:10:33 (UTC)
Goto Top
Hallo Dieter,

Der Befehl AAM funktioniert nur mit 16bit Registern.

Muss ich die Variable Buf wortweise in das AX Register kopieren und dann mit AAM umwandeln?

Gruß Nicky
Mitglied: 76109
76109 Jun 22, 2011 at 22:46:55 (UTC)
Goto Top
Hallo Nicky!

Nö, Byteweise in AL.
mov AL, byte ptr Buf[x]
aam 
AAM splittet die Einer nach AL und die Zehner nach AH

Gruß Dieter