Optymalizacja zamiany liczby dziesiętnej 0-255 na bajt w assemblerze AVR
Re: zamiana dec na hex bez dzielenia
From: Wojciech Piechowski <wojt_at_nospam_gnu.univ.gda.pl>
Subject: Re: zamiana dec na hex bez dzielenia
Date: Mon, 19 Mar 2001 11:26:21 +0100
On Sun, 18 Mar 2001, Juliusz wrote:
Witam.
Jak robicie koledzy zamiane liczby dziesietnej, z przedzialu 0-255,
siedzacej w 3 rejestrach AVR'a na bajt ?
Chodzi mi o mozliwie optymalny kod pod wzgledem ilosci uzytych rozkazow
assemblerowych.
Jak chcesz zminimalizowac ilosc zuzytych slow, to nie pomoge, bo nie znam
AVR, ale jesli chodzi o szybkosc wykonania, to cos takiego proponuje:
zakladam, ze liczba jest w r0 (setki), r1 (dziesiatki) i r2 (jednostki)
dwie tablice:
T0 = [0,100,200]
T1 = [0,10,20,...,90]
wynik = T0[r0] + T1[r1] + r2
czyli zadnego mnozenia, 3 dodawania (moze 5, jesli AVR nie ma
odpowiedniego trybu adresowania). Pod wzgledem ilosci kodu powinno wypasc
calkiem niezle, tylko te tablice gdzes trzeba upchnac
--
-- Wojciech Piechowski - wpiechowski_at_nospam_acm.org - Gadu-Gadu 494156 --
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: zamiana dec na hex bez dzielenia
Date: Mon, 19 Mar 2001 12:54:43 +0100
dwie tablice:
T0 = [0,100,200]
T1 = [0,10,20,...,90]
wynik = T0[r0] + T1[r1] + r2
czyli zadnego mnozenia, 3 dodawania (moze 5, jesli AVR nie ma
odpowiedniego trybu adresowania). Pod wzgledem ilosci kodu powinno wypasc
calkiem niezle, tylko te tablice gdzes trzeba upchnac
Ja po prostu pytam o to, bo moze sie ktos jakas chytroscia weza wykazal i ma
jakis sposob mniej lub bardziej elegancki ale z minimalna iloscia bajtow.
Procek to 2313 i zabraklo mi w nim miejsca. Nie chodzi tu zupelnie o czas
wykonywania i wlasciwie metode tablicowa to wlasnie mam. Korzystajac z
EEPROM'u przepisuje ja do ramu kiedy akurat wolam ta procedure ale to i tak
zajmuje kupe miejsca, bo samo przeliczanie tego to nie tylko kilka dodawan,
jeszcze jest cala otoczka tego.
Juliusz
From: "Irek K." <ixkuczek_at_nospam_friko6.onet.pl>
Subject: Re: zamiana dec na hex bez dzielenia
Date: Mon, 19 Mar 2001 13:42:10 +0100
Juliusz wrote:
dwie tablice:
T0 = [0,100,200]
T1 = [0,10,20,...,90]
wynik = T0[r0] + T1[r1] + r2
czyli zadnego mnozenia, 3 dodawania (moze 5, jesli AVR nie ma
odpowiedniego trybu adresowania). Pod wzgledem ilosci kodu powinno wypasc
calkiem niezle, tylko te tablice gdzes trzeba upchnac
Ja po prostu pytam o to, bo moze sie ktos jakas chytroscia weza wykazal i ma
jakis sposob mniej lub bardziej elegancki ale z minimalna iloscia bajtow.
Procek to 2313 i zabraklo mi w nim miejsca. Nie chodzi tu zupelnie o czas
wykonywania i wlasciwie metode tablicowa to wlasnie mam. Korzystajac z
EEPROM'u przepisuje ja do ramu kiedy akurat wolam ta procedure ale to i tak
zajmuje kupe miejsca, bo samo przeliczanie tego to nie tylko kilka dodawan,
jeszcze jest cala otoczka tego.
Juliusz
To nie przeliczaj tylko zliczaj:
Liczbe hex incrementuj a dec dekrementuj tyle az dec dojdzie do zera.
Trochę to trwa. Nie zastanawiałem ile toz zajmnie na 2313 ale
na 6502 to bajka.
Irek
Irek