Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Cheebi am 26. March 2007, 23:48
-
Hi,
sagt mal, kann ich nicht eine einfach Division wie zum Beispiel 5 / 2 im OS benutzen, ohne auf die FPU zurückgreifen zu müssen?
Weil bei mir ergibt folgender Code immer Null:
sGDTInfo->ProzentBelegt = (int)(((AnzEintr / MAX_DESCS)*100));
Kann dafür kein richtiges Ergebnis kommen, wenn ich nicht irgendetwas spezielles aktiviere?
Gruß Cheebi
-
sGDTInfo->ProzentBelegt = (int)(((AnzEintr / MAX_DESCS)*100));
Warum machst du es nicht einfach so:
sGDTInfo->ProzentBelegt = (int)((AnzEintr * 100/ MAX_DESCS));
Die Klammern um AnzEintr / MAX_DESCS waren ja eh unnötig. Und da es alles Punkt-Operationen sind, kannst du sie ja in der Reihenfolge beliebig vertauschen.
-
Hi,
ich weiß nu, was das Problem war und warum immer 0 als Ergebnis kam... Es ist nämlich nicht egal, ob ich die Punktrechenarten vertausche. Da ich die FPU nicht benutze, ist die Division in C trotzdem eine normale Division, weil sie ja später in ASM als DIV Befehl auftritt. Deshalb ist die Division durch MAX_DESCS erst nach der Multiplikation mit 100 durchzuführen, sonst kommt ein Wert < 1 raus, der dann einfach als 0 interpretiert wird. (Nachkommastellen werden gelöscht)
Und 0 * 100 ist nunmal 0; zumindest in meiner Region^^...
Aber ich habe in dieser Situation gleich nach FPU-Programming ausschaugehalten. Habe aber wenig (bis gar nichts) gefunden. Habt ihr Links zur FPU-Programmierung?
Gruß,
Cheebi
-
http://maven.smith.edu/~thiebaut/ArtOfAssembly/CH14/CH14-1.html
-
hihi.... hab selbst was tolles gefunden:
http://www.homix-online.de/Tutorials/FPU1.php