Forum: Mikrocontroller und Digitale Elektronik Multiplizieren/Dividieren asm


von Anfänger (Gast)


Lesenswert?

Hey Leute!

Ich habe ne Frage:
Wie kann ich in asm (programmiere einen atmega16) zwei 16bit
zahlen dividieren bzw multiplizieren?
Ich konnte bis jetzt leider nichts brauchbares finden.

könntet ihr mir vielleicht helfen?

mfg der anfänger

von GPS (Gast)


Lesenswert?

Eigentlich muesste es ein Appnote bei Atmel darueber geben.

von JanB (Gast)


Lesenswert?

Hallo,

geh mal zu: www.atmel.com

dort findest du:

AVR Applikation Note 200 - Multiply and Divide Routines

und

AVR Applikation Note 201 - 16bit multiply routines using hardware 
multiplier

Gruß Jan

von Anfänger (Gast)


Lesenswert?

Dividieren:
http://www.atmel.com/dyn/resources/prod_documents/doc0936.pdf

Multiplizieren:
http://www.atmel.com/dyn/resources/prod_documents/doc1631.pdf


Um zu Dividieren muss ich einfach das programmieren:

1. Clear remainder and carry.
2. Load Loop counter with 17.
3. Shift left dividend into carry
4. Decrement Loop counter.
5. If Loop counter = 0, return.
6. Shift left carry (from dividend/result) into remainder
7. Subtract divisor from remainder.
8. If result negative, add back divisor, clear carry and go to Step 3.
9. Set carry and go to Step 3.

Und um zu Multiplizieren muss ich nur laut Seite5 (Zeichnung) vorgehen.

Habe ich das richtig verstanden?

mfg der anfänger

von karla (Gast)


Lesenswert?

Oder Du lädst Dir den fertigen Code auch noch von Atmel herunter.

von Anfänger (Gast)


Lesenswert?

Den habe ich aber leider nicht gefunden :-(

Wo gibs den?

mfg der anfänger

von Willi (Gast)


Lesenswert?

Da wo du auch die Applikation Notes gefunden hast.
Direkt neben dem PDF-Symbol gibt es auch ein CD-Symbol.

MfG Willi

von Spess53 (Gast)


Lesenswert?

Hi

In der Liste der Application Notes siehst du ein PDF-Symbol und ein 
Disk-Symbol. Mit letzteren kannst du die Software herunterladen.

MfG Spess

von Anfänger (Gast)


Lesenswert?

Danke!

Ich habe immer nur das PDF Zeichen verwendet.

MFG der Anfänger

von Anfänger (Gast)


Lesenswert?

Hallo Leute!

Ich hätte noch ne frage:

Das Dividieren funktioniert zwar, aber leider nicht in den Kommabereich.

Wie kann man diese Problem am besten lösen?

mfg der Anfänger

von Uhu U. (uhu)


Lesenswert?

Eine Integer-Arithmetik kann das nicht.

von Falk B. (falk)


Lesenswert?

@  Anfänger (Gast)

>Das Dividieren funktioniert zwar, aber leider nicht in den Kommabereich.

Aber sicher.

Festkommaarithmetik

MfG
Falk

von Anfänger (Gast)


Lesenswert?

Gibts die Festkommaarithmetik auch für ASM?

von Falk B. (falk)


Lesenswert?

@  Anfänger (Gast)

>Gibts die Festkommaarithmetik auch für ASM?

Ja, aber nicht als Artikel. Letztendlich ist es "normale" 
Integerarithmetik, "nur" der Programmierer muss etwas umdenken.

MfG
Falk

von Anfänger (Gast)


Lesenswert?

Ich stehe zur zeit leider auf der Leitung.

Ich möchte zum Beispiel  5 / 1024 dividieren.

Wenn ich das mache kommt heraus:
Result: Low Byte- 000
        HighByte -000

Remainder: Low Byte -  005
           Hgih Byte - 000

?!?

mfg der Anfänger

von Simon K. (simon) Benutzerseite


Lesenswert?

Anfänger wrote:
> Ich stehe zur zeit leider auf der Leitung.
>
> Ich möchte zum Beispiel  5 / 1024 dividieren.
>
> Wenn ich das mache kommt heraus:
> Result: Low Byte- 000
>         HighByte -000
>
> Remainder: Low Byte -  005
>            Hgih Byte - 000
>
> ?!?
>
> mfg der Anfänger

Und wo ist das Problem? Bzw. Was stimmt daran nicht?

Du kannst ja (wie schon mit dem Festkommaarithmetik-Link) angedeutet 
5000/1024 teilen. Das Ergebnis ist dann nur um 3 Stellen nach links 
verschoben (Im Dezimalsystem natürlich).

von Uhu U. (uhu)


Lesenswert?

Na ja, wie ich schon sagte, kann Integerarithmetik nicht mit 
Nachkommastellen umgehen.

Wenn du sie dafür benutzen willst, muß du die Kommaschiebereien selbst 
machen und die Eingangsoperanden/Ergebnis so geschickt 
zurechtmultiplizieren/dividieren, daß die gewünschte 
Nachkommagenauigkeit dabei herauskommt.

Die int-Artihmetik schmeißt alles weg, was kleiner als 1 ist.

von GPS (Gast)


Lesenswert?

@ Anfänger (Gast),

div 1024 ist dasselbe wie binaer 10 positionen nach rechts schieben.

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.