Цитата(Jenya7 @ Sep 24 2014, 11:20)

Листинг получился малоинформативный, для меня по крайней мере
Ваш компилятор достаточно умен - видя, что внутри if() ничего нет, он выкинул и сам if(). А вот чтение регистра PORTC выкинуть не имел права, поэтому все свелось к одной команде IN.
Попробуйте так:
Код
if(mot_state == UP)
// do something
asm(" nop ");
if(PORTC_Bit1)
// do something
asm(" nop ");
Цитата(Mihey_K @ Sep 24 2014, 11:43)

Доступ в регистр всегда быстрее. Для принудительного размещения переменной в регистре используйте ключевое слово register.
Если бы вы прочитали не только заголовок, но и сам вопрос, вы бы поняли, что автор спрашивал не о регистре общего назначения, а о регистре ввода-вывода. Причем для регистров ядра таких команд нет.
Цитата(MrYuran @ Sep 24 2014, 12:33)

А если периферийный - то ничем не отличается от памяти, только шина другая.
Для первых 32 периферийных регистров регистров у AVR есть короткие команды доступа (IN, OUT) и команды проверки отдельных битов.
Цитата(Jenya7 @ Sep 24 2014, 13:00)

Проблема что ног не хватает
Покажите схему, если это не государственная тайна. Возможно мы сможем найти другие места, где сэкономить ноги.