Занятный такой forward reference в AVRASM2. Потребовалось отрихтовать старый исходник такого вида:
main.asm
...
.org 0h
...
.include sub1.inc
...
...
code_end: // метка конца кода программы
sub1.inc
...
...
ldi ZL,low(code_end+.....)
ldi ZH,high(code_end+.....)
...
...
Решил, в числе прочего, вынести в файле "sub1.inc" константу "code_end+....." отдельно, в директиву ".equ":
...
.equ labelNN = code_end+.....
ldi ZL,low(labelNN)
В результате - появилось преупреждение о forward reference в строке с ".equ". А если не использовать ".equ" - его нет.
Кто-нть разбирался, сколько проходов делает атмеловский ассемблер и как вычисляет метки?