mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mathematische Routinen für AVR


Autor: Jackson (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich suche Mathematische Assembler Routinen für z. B. dem AT90S2313 um
mit 16Bit Zahlen zu rechnen (Sub,Mul,Div,Add).

Gruß
Jackson

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Division 24bit durch 16bit:
;bl, ah,al : ch, cl = bl, ah, al    REST in dh, dl
div24_16:
  ldi bh, 24
  clr dh
  mov dl, dh
loop24:
  lsl al
  rol ah
  rol bl
  rol dl
  rol dh
  cp dl, cl
  cpc  dh, ch
  brlo skip24
  sub dl, cl
  sbc dh, ch
  inc al
skip24:
  dec bh
  brne loop24
  ret

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Multiplikation 16bit mal 8bit:
mul16_8:
;multiplicate 16-bit number and 8-bit number
;ch,cl * dh = bl, ah, al
  clr ah
  clr al
  clr bl
  ldi bh, 8
loop16:
  clc
  rol al
  rol ah
  rol bl
  clc
  rol dh
  brcc not_plus
  add al, cl
  adc ah, ch
  brcc not_plus
  inc bl
not_plus:
  dec bh
  brne loop16
  ret

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
16bit mit 16bit vergleichen

cp16_16:
;numbers in dh:dl, ch:cl
;if > set t
  clt
  cp dl, cl
  cpc dh, ch
  brlo weniger
  set
weniger:
  ret

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Addieren 16bit und 16bit:

add16_16:
;numbers in dh:dl, ch:cl, result in dh:dl
    clc
    add dl, cl
    adc dh, ch
    ret

Autor: Khani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Erklärung gibt's den ganzen Kram übrigens in laufzeit- oder
codeoptimierter Form bei Atmel (www.atmel.com). Da gibt es eine
Application-Note zu eben diesem Thema.

MfG, Khani

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Subtragieren 16bit von 16bit:

sub16_16:
;numbers in dh:dl, ch:cl, result in dh:dl
    clc
    sub dl, cl
    sbc dh, ch
    ret

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Aleksej,

Deine Division macht Fehler, wenn Du durch Zahlen größer 32768 teilst.


Peter

Autor: Jackson (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle, das war genau das was ich gesucht habe... :-)

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.