Hi i am new in avr asm programming,in the example below, i have few questions:
1) Is it label: 8 bit or 16bit long?
2) Why multiplication label with 2 is needed?
3) Instruction LPM is placing their result in register R0? If so, what does that have to do with Z?
4) Can you explaine the quoted text from the provided link:
"If the address is not multiplied by two and label is at byte address 0x60 (word address 0x30), Z will point at the code stored there. I hope this clarified the addressing problem. Other versions are"
ldi ZL, low(2*label)
ldi ZH, high(2*label)
label:
.db "Hello world", 0
lpm
Thanks.
LPM needs byte address. Note that not all assemblers do this, notably gas that's used by avr-gcc, doesn't. Then you don't need the multiplication.LPM automatically loads into R0, and it takes the address from Z. See the instruction set reference.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With