En el ejemplo a continuación :
ldi ZL, low(2*label)
ldi ZH, high(2*label)
label:
.db "Hello world", 0
lpm
¿Por qué se necesita la etiqueta de multiplicación con 2? Entiendo que la memoria del programa está direccionada por palabras, y supongo que la etiqueta: ¡tiene una longitud de 16 bits (!?).
Aquí hay un texto citado del autor del ejemplo:
"Si la dirección no se multiplica por dos y la etiqueta está en la dirección de byte 0x60 (dirección de palabra 0x30), Z apuntará al código almacenado allí. Espero que esto aclare el problema de direccionamiento. Otras versiones son ..."
Puedes aclarar.