Цитата(Alex ma @ Dec 24 2006, 12:27)

Необходимо загрузить константу в Z регистр и косвенно вызвать подпрограмму.
Для этого не нужен inline-asm
Код
((void (*)(void))0x104)();
25 ((void (*)(void))0x104)();
\ 00000000 E0E4 LDI R30, 4
\ 00000002 E0F1 LDI R31, 1
\ 00000004 9509 ICALL
Только не забываем, что у IAR адреса байтовые, а в Z надо грузить адрес слова, т.е. байтовый пополам.
А с параметрами inline-asm не работает. Более того, умный оптимизатор глубоко плюет на asm. Например, такой пример:
Код
static void func(uint8_t param) // параметр должен передаваться в R16, static чтобы заинлайнить
{
asm("STS TestCell, R16");
}
void main()
{
func(123);
}
Тут оптимизатор видит, что в func памаметр не используется и в main его просто не загружает в r16 перед асм-вставкой. Они так и пишут в доке - инлайн-асм можно сказать что не получился, на него "забили", поэтому пользуйте либо имеющиеся intrinsic -функции, либо пишите всю функцию на асме и прилинковывайте к проекту.