Wie berechnet man beim Mega 8 Fliesskommazahlen in Assembler? Konkretes Problem: Es sollen (umgerechnet in dezimal) 5-stellige Fliesskommazahlen miteinander multipliziert oder dividiert werden. Kennt von euch jemand einen Ansatz oder einen Link? Kann ich evt. die Berechnung in einer anderen Programmiersprache viel leichter lösen und die Ergebnisse in mein Assemblerprogramm einbinden? Für jede Hilfe bin ich dankbar
Fliesskommazahlen in asm - Du bist ein maso oder ? Jetzt hauen mir warscheinlich einige Könner eins auf die Nase (zu Recht). Aber ich verwende eben gerade wegen dem unglaublichen Aufwand den den Fliesskommazahlen brauchen lieber C. Damit aber der Programmspeicher nicht Platz, nehme ich dann doch manchmal lieber ein selbstdefiniertes Festkomma Format. Ich rechne einfach mit Int oder Long etc. und muss dan allerdings das Komma selber setzen. Bsp. 1,725 V = 1725 mV . Gruß Bernhard
Fliesskommazahlen werden in Assembler sehr selten verwendet. Das hat den Grund, daß der Assembler keine Fliesskomma Symbole unterstützt, sondern nur bis 32 Bit Ganzzahl. Deshalb rechnet man in Assembler fast nur mit Ganzzahlen oder Festkomma (=Ganzzahl der zehntel oder hundertstel, je nach gewünschter Genauigkeit). Und hat man den Divisions- oder Multiplikationsalgorithmus kapiert, kann man ihn auch ganz leicht aufbohren. Für meinen Frequenzmesser habe ich z.B. eine 56Bit/24Bit Division gemacht. Du mußt nur beachten, zuerst die Multiplikationen und dann die Divisionen. Zum Runden bei der Division addiert man einfach die Hälfte des Divisors. Peter
Dazu empfehle ich das Buch: Jorke, G.; Lampe, B.; Wengel, N.: Arithmetische Algorithmen in der Mikrorechentechnik, 1. Auflage, VEB Technik Verlag Berlin 1989 Ist hier zwar für einen Z80 beschrieben, kann man aber natürlich auf einen AVR portieren. Gruß Andreas
Also, man kann's auch komplizierter machen als es ist. Dezimalpunkte wegdenken und in Integer rechnen. Dann Dezimalpunkt wieder hindenken. Also z.B. 14,52 * 23,18 = 336,5736: 1. 1452 (dez) mit 2318 (dez) malnehmen, gibt 3365736 (dez) (malnehmen wenigstens in 24-Bit programmieren) 2. Binärergebnis in Dezimal umwandeln, Komma an der richtigen Stelle setzen. Die Methode in Assembler zu programmieren ist recht einfach und schlägt zeitmäßig jede Hochsprachen-Fließkomma-Routine um Längen. Sowohl was den Programmieraufwand angeht als auch was die nötige Debug-Zeit angeht als auch in Sachen Resourcenfresserei als auch laufzeitmäßig. MfG Gerd
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.