www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Multiplizieren/Dividieren asm


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: GPS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich muesste es ein Appnote bei Atmel darueber geben.

Autor: JanB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dividieren:
http://www.atmel.com/dyn/resources/prod_documents/...

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


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

Autor: karla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder Du lädst Dir den fertigen Code auch noch von Atmel herunter.

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den habe ich aber leider nicht gefunden :-(

Wo gibs den?

mfg der anfänger

Autor: Willi (Gast)
Datum:

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

MfG Willi

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Ich habe immer nur das PDF Zeichen verwendet.

MFG der Anfänger

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Integer-Arithmetik kann das nicht.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Anfänger (Gast)

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

Aber sicher.

Festkommaarithmetik

MfG
Falk

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts die Festkommaarithmetik auch für ASM?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: GPS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Anfänger (Gast),

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.