Zamiana liczby dziesiętnej na hex w AVR: optymalny kod w asemblerze dla rejestrów 0-255?

Re: zamiana dec na hex bez dzielenia





Poprzedni Następny
Wiadomość
Spis treści
From: "Jarek" <crystal_at_nospam_kki.net.pl>
Subject: Re: zamiana dec na hex bez dzielenia
Date: Mon, 19 Mar 2001 15:51:39 +0100



Użytkownik "Juliusz" <jul_at_nospam_fom.pl> napisał w wiadomości
news:992174$hoi$1_at_nospam_news.tpi.pl...
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.

Juliusz




Kilka dodatkowych pytań:
1. Z którego zakresu są rejestry zawierające dane (0-15 czy 16-31)?
2. Czy zawartość tych 3 rejestrów może ulec zmianie?
3. Ile bajtów zajmuje aktualnie twój kod?
4. Czy rejestr setek jest ograniczony do zakresu 0-2, jeżeli nie to czy
sygnalizować błąd dla > 2?

Jarek



Poprzedni Następny
Wiadomość
Spis treści
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: zamiana dec na hex bez dzielenia
Date: Mon, 19 Mar 2001 18:43:54 +0100



Kilka dodatkowych pytań:
1. Z którego zakresu są rejestry zawierające dane (0-15 czy 16-31)?

To akurat nie ma znaczenia, uzywam gornych akurat ale i tak te dane laduja w
buforze w ramie. Takich liczb jest kilka do zamiany.

2. Czy zawartość tych 3 rejestrów może ulec zmianie?

Nie, ale zawsze moge je na stos zwalic w przerwaniach jesli bedzie trzeba.

3. Ile bajtów zajmuje aktualnie twój kod?

Hmm zajmuje full i brakuje mi z 30% :-) Wiec szukam wyjscia przerabiajac go
do granic mozliwosci upakowania.

4. Czy rejestr setek jest ograniczony do zakresu 0-2, jeżeli nie to czy
sygnalizować błąd dla > 2?

Nie trzeba sygnalizowac

Tu dokladnie chodzi o LCD w trybie 4 bitowym, klawiature i adresy IP
wprowadzane z klawiatury dziesietnie. Analizowalem kilka warianrow kodu jak
to ma wygladac i co zabiera wiecej kodu jesli wczesniej lub pozniej zaczynam
robic zamiane na hexy. Kazde rozwiazanie ma swoje plusy i minusy.
Np AVR jest ubogi w testowanie bitow i wszelkie MOV'y co robi kod nieco
nadmuchany. Stosowanie flag po rozparcelowaniu np dolnego rejestru na flagi
powoduje, ze kod strasznie puchnie i czasem szybciej zrobic dwie podobne
procedury niz gimnastykowac sie z flagami i testowaniem bitow.
Uzylem AVR'a akurat, bo programuje go w ukladzie i ma SPI oraz z kilku
innych powodow. Nie jest to pierwszy kod na AVR'a jaki pisalem. Robilem duzo
bardziej skomplikowane rzeczy ale mialem wiecej pamieci programu do
dyspozycji.


Juliusz




Poprzedni Następny
Wiadomość
Spis treści
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: zamiana dec na hex bez dzielenia
Date: Tue, 20 Mar 2001 01:08:41 GMT


On Mon, 19 Mar 2001 18:43:54 +0100, Juliusz wrote:
3. Ile bajtów zajmuje aktualnie twój kod?

Hmm zajmuje full i brakuje mi z 30% :-) Wiec szukam wyjscia przerabiajac go
do granic mozliwosci upakowania.

30% ? To raczej czas sie zastanowic nad lepszym prockiem.
Juliusz - przeciez zarabiasz tyle ze sie nie oplaca zebys
optymalizowal kod, wiekszy procek nie jest warty twojej placy :-)

Tu dokladnie chodzi o LCD w trybie 4 bitowym, klawiature i adresy IP
wprowadzane z klawiatury dziesietnie. Analizowalem kilka warianrow kodu jak
to ma wygladac i co zabiera wiecej kodu jesli wczesniej lub pozniej zaczynam
robic zamiane na hexy. Kazde rozwiazanie ma swoje plusy i minusy.
Np AVR jest ubogi w testowanie bitow i wszelkie MOV'y co robi kod nieco
nadmuchany.

Czy ty za bardzo nie kombinujesz ?

[zaladowac do R1 setki]
MOV R2,R1
ADD R2,R2
ADD R2,R2
ADD R2,R1
ADD R2,R2
[zaladowac do R1 dziesiatki]
ADD R1,R2
MOV R2,R1
ADD R2,R2
ADD R2,R2
ADD R2,R1
ADD R2,R2
[zaladowac do R1 jednostki]
ADD R2,R1

I jakos watpie zebys duzo zaoszczedzil inaczej kombinujac.

No chyba ze sie ograniczysz do 0..199 - wtedy setkom wystarczy
NEG R1; ANDI R1, 10

Albo:
[zaladowac do R1 setki]
[zaladowac do R3 dziesiatki]
RCALL muladd
[zaladowac do R3 jednostki]
muladd:
MOV R2,R1
ADD R1,R1
ADD R1,R1
ADD R1,R2
ADD R1,R1
ADD R1,R3
RET

J.


Poprzedni Następny
Wiadomość
Spis treści
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: zamiana dec na hex bez dzielenia
Date: Tue, 20 Mar 2001 21:31:55 +0100



Czy ty za bardzo nie kombinujesz ?

[zaladowac do R1 setki]
MOV R2,R1
ADD R2,R2
ADD R2,R2
ADD R2,R1
ADD R2,R2
[zaladowac do R1 dziesiatki]
ADD R1,R2
MOV R2,R1
ADD R2,R2
ADD R2,R2
ADD R2,R1
ADD R2,R2
[zaladowac do R1 jednostki]
ADD R2,R1

Rzeczywiscie proste :-) A widzisz, czlowiek ma czasem zacmienie i arytmetyki
z podstawowki zapomina :-) Gdyby nie ilosc miejsca na kod to bym nawet o tym
nie pomyslal :-)

Juliusz