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


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... :-)

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.