Hallo, ich suche Mathematische Assembler Routinen für z. B. dem AT90S2313 um mit 16Bit Zahlen zu rechnen (Sub,Mul,Div,Add). Gruß Jackson
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
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
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
Addieren 16bit und 16bit: add16_16: ;numbers in dh:dl, ch:cl, result in dh:dl clc add dl, cl adc dh, ch ret
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.