Gast
#90916
Hallo, ich suche Mathematische Assembler Routinen für z. B. dem AT90S2313 um mit 16Bit Zahlen zu rechnen (Sub,Mul,Div,Add). Gruß Jackson
|
Anzeige
|
Mathematische Routinen für AVR
Gast
#90916
Hallo, ich suche Mathematische Assembler Routinen für z. B. dem AT90S2313 um mit 16Bit Zahlen zu rechnen (Sub,Mul,Div,Add). Gruß Jackson
Gast
#90917
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
Gast
#90918
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
Gast
#90919
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
Gast
#90920
Addieren 16bit und 16bit:
add16_16:
;numbers in dh:dl, ch:cl, result in dh:dl
clc
add dl, cl
adc dh, ch
ret
Gast
#90921
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
Gast
#90922
Subtragieren 16bit von 16bit:
sub16_16:
;numbers in dh:dl, ch:cl, result in dh:dl
clc
sub dl, cl
sbc dh, ch
ret
@Aleksej, Deine Division macht Fehler, wenn Du durch Zahlen größer 32768 teilst. Peter
Gast
#90924
Danke an alle, das war genau das was ich gesucht habe... :-) Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|