Вопрос конечно еще в силе, потому что я так и не понял что значит проблема с non-constant, или это относится к тому что секция - bss (тогда неясно почему пример из книги с ошибкой), либо к какой-то ошибке которую допустил я.
Если поменять строки таким образом: %assign a array -> %assign a 0 inc word [a] -> inc word [array + a]
, то работает
The expression passed to %assign is a critical expression (see section 3.8), and must also evaluate to a pure number (rather than a relocatable reference such as a code or data address, or anything involving a register)