AVR asembler - ne/zarovnanie dat
Jan Waclawek
wek@evona.sk
Středa Prosinec 15 16:35:44 CET 2004
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?
Další informace o konferenci Hw-list