Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Was bedeutet FPU-Status? (https://www.delphipraxis.net/85713-bedeutet-fpu-status.html)

Cöster 3. Feb 2007 18:50


Was bedeutet FPU-Status?
 
Hi!

Auf die Frage in der Überschrift konnte ich nirgends eine Antwort finden. Ich vermute, dass damit die Flags in der FPU gemeint sind. Aber welche gibt es da und in welcher Reihenfolge werden sie gespeichert?
In der CPU gibt es 17 Flags, in der FPU aber nur 16, da sie in einen 16bit-Register passen. Welches Flag gibt es hier weniger?

marabu 3. Feb 2007 20:59

Re: Was bedeutet FPU-Status?
 
Hallo Christian,

kein Wunder, dass du nichts richtiges findest, wenn du nach FPU-Status suchst. Der terminus technicus ist FPU Control Word und die Status-Bits (genauer: exception status bits) sind ein Teil davon. Das genaue Register-Layout muss dich nicht interessieren (wenn doch, gib Bescheid), da du die entsprechenden Bits in Delphi über die Konstanten und Funktionen (SetExceptionMask) der Math-Unit manipulierst. Der Einstieg in die Online Hilfe ist bei mir (D7) "FPU-Steuerung".

Grüße vom marabu

Cöster 3. Feb 2007 21:43

Re: Was bedeutet FPU-Status?
 
Ah jo, nun seh ich auch, dass Delphi mir nicht nur das CPU-, sondern auch das FPU-Fenster bietet :-D
Da kann ich ja auch selber sehen, wie die Status-Flags angeordnet sind.

Die Frage hab ich mir gestellt, als ich versucht hab, die Implementierung von Hypot nachzuvollziehen. Eine Stelle hab ich aber nicht ganz verstanden:
Code:
TEST   AH,$45
Hier werden ein paar Status-Bits der FPU (das "FPU Control Word" :wink: ist unter AX gespeichert) ausgewertet, um nachher zu prüfen, ob der Parameter X größer ist als Y. Wegen der $45 handelt es sich bei diesen Flags um das Zero, das Parity und das Carry Flag. Gesetzt wurden diese Flags vorher durch den Vergleich X - Y. Nur wenn alle drei Flags den Wert 0 enthalten, soll das bedeuten, dass X > Y. Dass eine Aktivierung des Zero Flags X=Y bedeutet und eine Aktivierung des Carry Flags X<Y, verstehe ich.
Aber was sagt denn das Parity Flag über das Verhältnis von X und Y aus?

Robert Marquardt 4. Feb 2007 05:22

Re: Was bedeutet FPU-Status?
 
Die JCL hat dazu eine Unit, die umfassnde Kontrolle ermoeglicht. Gelegentlich gibt es Komponenten, die das FPU-Control Word umstellen und danach funktioniert das Delphi-Programm nicht mehr richtig. Die JCL Unit ermoeglicht dann das man das FPU-Control Word sichert und restauriert.

Cöster 5. Feb 2007 15:45

Re: Was bedeutet FPU-Status?
 
Zitat:

Zitat von Robert Marquardt
Die JCL hat dazu eine Unit, die umfassnde Kontrolle ermoeglicht. Gelegentlich gibt es Komponenten, die das FPU-Control Word umstellen und danach funktioniert das Delphi-Programm nicht mehr richtig. Die JCL Unit ermoeglicht dann das man das FPU-Control Word sichert und restauriert.

Ich versteh nicht ganz, was das mit meiner Frage zu tun hat. Welche Werte im FPU Control Word gespeichert sind, kann ich - wie ich jetzt weiß - auch bequem über das FPU-Fenster einsehen.

Meine Frage aus Beitrag #3 ist weiterhin unbeantwortet (oder soll ich dafür extra nen neuen Beitrag aufmachen?): Warum heißt es
Code:
TEST   AH,$45
und nicht
Code:
TEST   AH,$41
?

Hawkeye219 5. Feb 2007 19:14

Re: Was bedeutet FPU-Status?
 
Hi,

vielleicht findest du auf dieser Seite eine Antwort auf deine Frage.

Gruß Hawkeye

Cöster 5. Feb 2007 19:33

Re: Was bedeutet FPU-Status?
 
Zitat:

Zitat von Hawkeye219
Hi,

vielleicht findest du auf dieser Seite eine Antwort auf deine Frage.

Gruß Hawkeye

Leider nicht, aber trotzdem danke für den Link, denn die Seite könnte mir bei anderer Gelegenheit vll nochmal behilflich sein.

Robert Marquardt 5. Feb 2007 19:40

Re: Was bedeutet FPU-Status?
 
Also auf der Seite ist bei FCOMI genau beschrieben welche Flags wann gesetzt werden. ZF = Zero Flag, PF = Parity Flag und CF = Carry Flag.

Cöster 5. Feb 2007 20:06

Re: Was bedeutet FPU-Status?
 
Zitat:

Zitat von Robert Marquardt
Also auf der Seite ist bei FCOMI genau beschrieben welche Flags wann gesetzt werden. ZF = Zero Flag, PF = Parity Flag und CF = Carry Flag.

In Hypot wird FCOM aufgerufen. Dort wird das Parity Flag der FPU (=C2) nur dann gesetzt, wenn der Vergleich nicht möglich ist. Aber in dem Fall sind die beiden anderen Flags (C3=ZF und C0=CF) ebenfalls gesetzt. C0, C2 und C3 sind die drei Flags, die durch TEST $45 geprüft werden. TEST $41 würde nur C0 und C3 prüfen, was in jedem Fall zu den selben Ergebnissen führen würde.
Ich werd mich wohl damit abfinden müssen, dass egal ist, was ob nun alle drei oder nur 2 geprüft werden, da es zum gleichen Ergebnis führt.
Oder könnte es sein, dass $45 aus optimierungstechnischen Gründen zu bevorzugen ist, weil es vll schneller ist, 3 Flags zu prüfen als nur 2?

Robert Marquardt 6. Feb 2007 04:25

Re: Was bedeutet FPU-Status?
 
Es ist voellig egal wieviele Flags geprueft werden. Das ist alles gleich schnell. Die Aussage der Tabelle ist halt das alle drei Flags 0 sind fuer A > B.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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