danrok Opublikowano 8 Maja 2009 Zgłoś Opublikowano 8 Maja 2009 Witam, programuję kalkulator na procesorze ATMEGA32 w assemblerze i mam pewien problem. Procesor ten jest 8bitowy, a musze wykonywać mnożenie 16bitowe. Ma ktoś jakiś pomysł jak to wykonać? Widziałem różne algorytmy, ale jest problem z ich implementacją, gdyż operacje wykonywane są na dwóch rejestrach. Ktoś pomoże?:) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość <account_deleted> Opublikowano 8 Maja 2009 Zgłoś Opublikowano 8 Maja 2009 Po pierwsze: czytamy dokumentację, najlepiej ze zrozumiieniem ;) Przykład: <avr asm> ;z=x*y:;reg defs:.def xh=r17.def xl=r16.def yh=r19.def yl=r18.def zhh=r31.def zhl=r30.def zlh=r29.def zll=r28;clr result clr zll clr zlh movv zhh:zhl,zlh:zll;16 by 16bit multiplication: mul xl,yl movw zlh:zll,r1:r0 mul xl,yh add zlh,r0 adc zhl,r1 mul xh,yl add zlh,r0 adc zhl,r1 mul xh,yh add zhl,r0 adc zhh,r1;.undef regs... chyba nic nie spieprzyłem - sprawdzisz sobie w symulatorze. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
danrok Opublikowano 8 Maja 2009 Zgłoś Opublikowano 8 Maja 2009 o. dzięki wielkie! :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość <account_deleted> Opublikowano 9 Maja 2009 Zgłoś Opublikowano 9 Maja 2009 he, he, w moich wypocinach są 2 błędy - movv zamiast movw, ale drugi? - ciekawe czy zauważyłeś... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
danrok Opublikowano 11 Maja 2009 Zgłoś Opublikowano 11 Maja 2009 z tym R0 i R1? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość <account_deleted> Opublikowano 11 Maja 2009 Zgłoś Opublikowano 11 Maja 2009 ...no trafiłeś ;) ;reg defs:....def zero=r2;clr result clr zhl clr zhh; movv zhh:zhl,zlh:zll ;<< to jest niepotrzebne;) clr zero;16 by 16bit multiplication: mul xl,yl movw zlh:zll,r1:r0 mul xl,yh add zlh,r0 adc zhl,r1 mul xh,yl add zlh,r0 adc zhl,r1 adc zhh,zero; <<---- tego brakowało;) mul xh,yh add zhl,r0 adc zhh,r1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
danrok Opublikowano 11 Maja 2009 Zgłoś Opublikowano 11 Maja 2009 Dzięki wielkie jeszcze raz!:) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...