ATmega328P assembler inline text and assembelr ALIGN

I have a program in assembler like this:

        lots of code
......

.ORG \$7000 ;;  (or somewhere)

atext:   .DB    "this is a test string 1"

.ALIGN EVEN

Btext:   .DB    "this is a test string 2"

1. QUESTION : Assuming the length of text 1 is ODD- Is it possible to ALIGN Btext using some kínd of ALIGN command ( like above). The Atmel Assembler (studío 6.2) says NO - but I wonder....

(Problem easily solved by manually alignment like this:

atext:   .DB    "this is a test string 1",0,0
//            01234567890123456789012  3 4


And adding zeroes where needed to align.

1. QUESTION :

I now want to write the text to my serial monitor.

So I do this;

      ldi zh,High (text1)
ldi zl,LOW (text1)
push ZH
push ZL
lsl ZL
rol ZH  ;; to ensure LPM later

WRTE: lpm R16,Z+ ; get byte/data
cpi R16,0
breq wrte2
call output
rjmp wrte
wrte2:

pop zl
pop zh
ret


Now I wonder: If I use

      ......
WRTE: LD   R16,Z+      ; get byte/data /// BAD - DON'T

.....


What will I get in R16?

• Note that Z indexes the program memory as bytes. The assembler will ensure instruction opcodes are aligned, but for data it doesn't matter. – Jon Jan 24 '16 at 15:09
• Thanks for aligning my code examples - something went terrible wrong during my writing. Kris – KRIS-Norway Jan 24 '16 at 16:47
• What do you want to align Btext  too, even, odd, or something else? Why? I think @Jon has answered your question - aligning data doesn't matter as data is byte addressable. Maybe Jon should promote the comment to an answer? – gbulmer Jan 24 '16 at 18:29

.db automatically puts the text at an 'even' address (padding the string with a zero if necessary) because the Byte equivalent of all program memory addresses is even (the actual address may be odd or even, depending on which WORD is being referenced). Therefore there is no need for an 'ALIGN EVEN' directive.