mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16Bit Multiplikation


Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo..
Ich möchte gern eine 16Bit Zahl mit 2 multiplizieren. Bei 8Bit ist dies
ja  mit einem Linksshift erledigt aber bei 16Bit will es nicht
funktionieren. Habe versucht erst das Register mit den 8 niederen Bits
nach links zu schieben. Vorher hatte ich das Carry Bit gelöscht und
nach dem linksshift das Carry gelesen. Wenn ein überlauf stattgefunden
dann habe ich das Register mit den 8 höherwertigen Bits incrementiert
und danach ebenfalls einen linksshift ausgeführt. Leider kommt als
Ergebnis nur quatsch raus.. ist es überhaupt möglich bei 16Bit werten
mit dieses einfache verfahren anzuwenden ?
Ach ja.. Ich sollte noch dazu sagen, das ich den Wertebereich nicht
voll ausnutze und es zu keinem Überlauf kommen kann. Die werte die mit
2 multiplizieren will liegen im bereich von 0 - 2000.

Autor: C. Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AFAIK solltest du die höheren 8Bit erst shiften und dann inkrementieren,
auch wenn es dafür sicher einen Spezial Assembler-Befehl (rotate w/
carry) gibt. Ich progge fast nur C, also bin ich da überfragt, aber
andere Architekturen haben sowas auch.

- cl

Autor: C. Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich denke mal, der Befehl den Du brauchst ist ROL. Aber legt mich
nicht drauf fest.

Siehe auch
http://www.atmel.com/dyn/resources/prod_documents/...

Autor: Hartmut Gröger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

geht ganz einfach:

    lsl lowregister
    rol highregister

  und fertig.

Mfg HG

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder

add  rl, rl
adc  rh, rh

gruß Hagen

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na klar add kann ich ja auch benutzen...hätt ich ja auch selbst drauf
kommen müssen...Also danke an alle...
Aber eine Frage hätte ich da noch und zwar zu der Antwort von Hartmut.
Er schreibt das man zuerst das lowregister linksschieben soll und
danach das highregister nach rechts.. Warum nach rechts???

Autor: C. Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso nach rechts?
ROL rotiert doch nach Links ebenso wie LSL nach links shifted.

Ich glaube, Du bist von den Mnemonics verwirrt :)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo schreibt er das? Ich sehe nur:

lsl lowregister  ; linksschieben
rol highregister ; linksrotieren mit carry

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Ok...Ich bin völlig raus.. Hab da grad was völlig durcheinander
gebracht..

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.