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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jackson (Gast)


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

von Aleksej (Gast)


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

von Aleksej (Gast)


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

von Aleksej (Gast)


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

von Aleksej (Gast)


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

von Khani (Gast)


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

von Aleksej (Gast)


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

von Peter D. (peda)


Lesenswert?

@Aleksej,

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


Peter

von Jackson (Gast)


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]
  • [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.