Forum: Mikrocontroller und Digitale Elektronik Suche Routine zum Dividieren zweier 16 Bit Zahlen


von Hans (Gast)


Lesenswert?

Ich benötige eine Routine zum Teilen zweier 16 Bit Zahlen durcheinander, 
habe bisher mit den Beispielen in der Codesammlung recht wenig anfangen 
können(8Bit)...
Wahrscheinlich ist es gar nicht sonderlich schwer aber irgendwie komme 
ich nicht drauf.

Vorab schon mal Danke für alle helfenden Beiträge

-Hans

von Hans (Gast)


Lesenswert?

Ach sollte übrigens in Assembler sein!!!

von Norbert Lieven (Gast)


Lesenswert?

Eine Division ist doch eine fortgesetzte Subtraktion.
Statt a:b wird solange b von a subtrahiert bis ein Überlauf entsteht. 
Nach jedem Subtraktionsvorgang musst du einen zuvor auf 0x00-gesetzten 
Zähler um 1 inkrementieren. Entsteht ein Überlauf
(Carrybit gesetzt) war b schon kleiner als a. Also zum Schluß wird b mit 
a addiert und der Zähler um 1 dekrementiert.
Im Zähler steht nun der Quotient aus a:b, und Sumationregister
(von a - b)steht der Rest.

Ein Nachteil dieser Softwaredivision ist erkennbar: Wenn du
65535 : 1 rechnest, dann wird die Summationsschleife 65535mal
durchlaufen. Naja, je nach Clock könne das einige mSek. sein.

Schönen Gruß   Norbert

von Norbert Lieven (Gast)


Lesenswert?

sorry, hab'n Fehler in Zeile 4. Dort muß es heißen:
......war a schon kleiner als b.

Norbert

von hammer_c (Gast)


Lesenswert?

Hallo!

die alte Subtraktions-Methode ist derbe langsam...

schau besser mal hier: http://elm-chan.org/column_list_e.html

ciao Christian

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

AVR Applikation 200 und 200b sind fertige Routinen.

Mike

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch 200b

von Hans (Gast)


Lesenswert?

@Mike:

Hast Du die 16/16 unsigned Routine schon mal ausprobiert??
Bei mir klappt das irgendwie nicht...

von Hans (Gast)


Lesenswert?

@hammer_c

Vielen Dank, da ist eine brauchbare Routine bei, funktioniert auch 
einwandfrei...

Gruß Hans

von Mike (Gast)


Lesenswert?

Ja, habe ich, diese Woche, geht.

Ist mit Rest, bei Komma Zahlen mußt Du den Rest mal 10 und wieder 
Dividieren usw..

Mike

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
Noch kein Account? Hier anmelden.