DIVISION 32 BIT / 32BIT Beispiel (Assembler) ATmega8

OP #371341
Lesenswert?
• ▲
▼
In diesem Beispiel habe ich die Divisionsroutine als Funktion
umgeschrieben.

Temp1...4 Divident (0...4.294.967.295)
Temp5...8 Divisor  (1...4.294.967.295)

Das Divisionsergebnis befindet sich anschließend in:

Temp1...4 Quotient (0...4.294.967.295)

In dieser Form gestalte ich gern Funktionen, da sich diese anschließend
wunderbar aneinander reihen lassen.

Bsp:
Eine Funktion multipliziert einen Wert mit 1000
die nächste dividiert das Ergebnis durch 1024


Bernhard
Angehängte Dateien:
Gast #371344
Lesenswert?
• ▲
▼
Und auch die Multiplikation kann man noch optimieren, da ja ein Faktor
nur 16-Bittig sein darf, wenn kein Überlauf erfolgen soll.

D.h. es reicht eine 32Bit * 16Bit Multiplikation aus, wo man bei Bedarf
die Faktoren vertauscht.

Im Anhang der Code.


Peter
Angehängte Dateien:
OP #371346
Lesenswert?
• ▲
▼
@peter dannegger

Danke für Deine wertvolle Ergänzung. Habe mir Deine Routinen gerade
angeschaut.

>Oftmals will man das Ergebnis gerundet haben, dazu addiert man vorher
>die Hälfte des Divisors.

Ich frage mich immer wieder, wie man auf solche eleganten Lösungen
kommt?

Mir fällt es immer sehr schwer, solche komplizierten Berechnungen zu
deuten, wenn ich das Prinzip noch nicht verstanden habe.

Bernhard
Gast #601123
Lesenswert?
• ▲
▼
Hallo (auch wenn der Beitrag schon etwas älter ist)

habt ihr evtl. auch noch eine Assemblerroutine für die Division von 2 
Floats?
Hab mir vor einiger Zeit eine Routine zur Float-Multiplikation 
geschrieben. Mit der Division hakt es irgendwie noch. Müsste man für 24 
"gültige" Bits ernsthaft den Dividend auf 48 Bit erweitern, oder steh 
ich einfach nur aufm Schlauch?

Gruß
Wolfgang
Gast #669959
Lesenswert?
• ▲
▼
Hallo,

ich hab die Divisions-Routine im avr studio 4 mal durchlaufen lassen, 
aber irgendwie nimmt die kein Ende - Endlosschleife ? Muss man im avr 
studio noch vorher was umstellen oder so ?

gruß
Gast #1816890
Lesenswert?
• ▲
▼
Hallo zusammen,

Hat denn jemand von euch eine echte 32 Bit Multiplikation mit 64 Bit 
Ergebnis in Assembler ? Ich müsste Werte grösser als 25 000 000 
miteinander Multiplizieren. Aber wo ich auch suche das grösste war 
bisher 24 * 24 Bit was ich gefunden habe.
Wäre dankbar für jede Hilfe.

Gruß, Andy

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.