On 29 Sep 2006 at 10:34, David VanHorn wrote: > > > > > > ldi ZH, high(TABLE*2) > > ldi ZL, low(TABLE*2) > > > > lpm temp, Z+ > > lpm temp, Z+ > > lpm temp, Z+ > > lpm temp, Z+ > > lpm temp, Z+ > > > > Question: > > > > - What is the current value of ZH:ZL? > > > You could just walk that through the sim and see how it works. > Z increments byte by byte, not word, so it's 2.5 words up from the start of > TABLE > > When you set Z, you're loading in Table*2, and the LSB selects which byte > you get, 0=low, 1=high > This is why we have the ELPM instruction, for the larger chips. > > Hi David, thanks for the explanation. My problem is how to find the LPM passed the end of table by looking at the ZH:ZL register. I tried the code below, but it is not working: read: lpm register, Z+ ldi temp, high(ENDTABLE*2) cp ZL, low(ENTABLE*2) cpc ZH, temp brlo read ret TABLE: .db "Hello world!" .db "Hello world!" .db "Hello world!" .db "Hello world!" .db "Hello world!" .db "Hello world!" ENDTABLE:
Message
Re: [AVR-Chat] Reading tables from flash
2006-09-29 by Mark Jordan
Attachments
- No local attachments were found for this message.