AVR asembler - ne/zarovnanie dat

Miroslav Sinko sinkomiro@rocketmail.com
Čtvrtek Prosinec 16 11:06:56 CET 2004


Ak je ten text naozaj ASCII text, nie je vyhodnejsie nedrzat si k nemu
dlzku, ale zakoncit ho nulou? Vysielacia rutina potom bude vysielat az
kym na nu nenarazi.

TxTabText:
            push  ZL
            push  ZH
            ldi   ZL,LOW(TextTab*2)
            ldi   ZH,HIGH(TextTab*2)
este:       lpm   r4,Z+
            tst   r4
            breq  koniec
            rcall TxText    ;ak je vstupom TxText znak v r4...
            rjmp  este
koniec:     pop   ZH
            pop   ZL
            ret
 
TextTab:
            .db "prvy text",0

V tabulke ak bude pocet znakov textu neparny, netreba ani 0 pridavat,
zarovnanie ju tam vlozi samo. No pre prehladnost a pokoj v dusi by som
ju pisal vsade.

miro



--- Jan Waclawek <wek@evona.sk> wrote:

> Jan Kral wrote:
> > Ten NOP tam je samozrejme jen aby bylo neco za navestim. I kdyby ty
> stringy narovnal nejaky prekladac za sebe bez doplneni nulou na sudou
> delku, tak jak by jste adresoval string, ktery by zacinal na liche
> adrese?
> > Rekl bych, ze je to dano organizaci pameti, ktera je slovo=2bytum.
> 
> Pri LPM sa samozrejme adresuje bytovo.
> 
> Vynatok z kodu pracujuceho nad tymito datami (schvalne pripajam aj 
> komentar ktory tam naozaj mam, som nastvany :-) :
> 
> 
> TxTabText:
>            push  ZL
>            push  ZH
>            ldi   ZL,LOW(TextTab*2)
>            ldi   ZH,HIGH(TextTab*2)
>            clr   r4
>            add   acc,acc
>            add   acc,acc
>            add   ZL,acc
>            adc   ZH,r4
>            lpm   r4,Z+
>            lpm   acc,Z+
>            lpm   acc,Z+
>            lpm   ZH,Z
>            mov   ZL,acc
>            rcall TxText
>            pop   ZH
>            pop   ZL
>            ret
> 
> TextTab:
>            .dw 2*(Text0E-Text0), 2*Text0
>            .dw 2*(Text1E-Text1), 2*Text1
>            .dw 2*(Text2E-Text2), 2*Text2
>            .dw 2*(Text3E-Text3), 2*Text3
>            .dw 2*(Text4E-Text4), 2*Text4
>            .dw 2*(Text5E-Text5), 2*Text5
> 
> Text0:    .db  "Test start...",13   ;make all texts even length... 
> (stupid avr assembler)
> Text0E:
> Text1:    .db  "Testing bit "
> Text1E:
> Text2:    .db  " - OK. ",13
> Text2E:
> Text3:    .db  " - error to bit "
> Text3E:
> Text4:    .db  " - short.",13
> Text4E:
> Text5:    .db  " - open. ",13
> Text5E:
> ;----------------
> 
> Jasne, toto je trivialne a da sa to napisat aj inak; ale v pripade co
> 
> som popisoval, t.j. ze chcem mat za sebou rozne data roznej dlzky a 
> chcem si to zapisat nejako pekne prehladne - a nechcem plytvat
> flashkou 
> - to proste nejde.
> 
> Cely AVR je taky akysi asymetricky - tu chyba toto a tam sa zas
> nesmie 
> hento a hentam zasa cosi vycnieva.
> Fakt je to dobre len pre to blbe cecko, pre cloveka sa to nehodi.
> 
> wek
> 
> 
> PS. V tom C je to lepsie?
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 



		
__________________________________ 
Do you Yahoo!? 
Send holiday email and support a worthy cause. Do good. 
http://celebrity.mail.yahoo.com



Další informace o konferenci Hw-list