Цитата(IgorKossak @ May 21 2007, 21:58)

1. И внутри одного файла компилятор следует указанному правилу.
2. Смотря какие регистры. Рабочие регистры (Вы их привели) не сохраняются, об этом заботится участок кода, вызывающий данную функцию. Остальные используемые регистры должны сохраняться в стеке данных. Параметры передаются через R16-R23, через пары X и Z(при вызове функций с аттрибутами __x_z) и через стек данных если регистров оказалось мало. Но если до этого уже дошло, то уж лучше на С писать.
Простите что отрываю, но хотелось бы разобраться по лучше, так как к асму перешёл для повышения эффективности и было бы глупо вылизывать не разобравшись.

По поводу п.1. разобрался. Там почему-то приведено две таблицы размещения параметров и я в них подзапутался.
Далее вопрос, возникший в связи с Вашим ответом 2. Значит ли это, что чем больше регистров я использую, тем больше их сохраняется или это означает, что сохраняются все перечисленные регистры вне зависимости от использования?
И последний мелкий вопрос. На Си объявлен след. массив:
uint8_t static Ekr[2][SIZE_EKR];
На асме я его объявляю как
EXTERN SizeXb, Ekr, NEkr
И пытаюсь использовать типа
Код
add R30,LOW(Ekr) // Сместить от начала экранной области
adc R31,HIGH(Ekr)
Возникает ошибка
Error[43]: Illegal effective address D:\work\AVR IAR C\Panno\driv_graf.asm 49
Что я сделал неверно?