DIVISION 32 BIT / 32BIT Beispiel (Assembler) ATmega8

#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:
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren