Всегда! Само собой, программист должен быть более аккуратным, используя ассемблер. Комментарии в программе должны быть сделаны достаточно подробно. Но...
При вложенных функциях информация о том, какие функции какие регистры используют, требует более тщательного и глубокого анализа, чтобы избежать подводных камней. Можно сэкономить пару регтстров в самой процедуре обработки прерываний, но потерять время на сохранение/восстановление регистров во вложенных функциях. Когда регистров много, то потребуется ввести определенные соглашения по их использованию в функциях. Альтернативой порядку может быть только беспорядок. В своем опусе я об этом уже упоминал.
В компиляторе, имеются вполне определенные соглашения. Они логично и обоснованно следуют из особенностей архитектуры AVR. Почему бы и нам им не последовать?
Компилятор делает это не втихую. Все есть в документации. Плохо, конечно, когда совсем нет выбора. Но не лучше, когда выбор слишком большой. Трудно сделать нормальную программу, когда в одних модулях используются одни соглашения (компилятор, скажем, дает такую возможность), в других - другие. Возьмите, например, AVR GCC. Опций у него превеликое множество, есть свобода выбора. Можно использовать этот компилятор
Что касается меня, то я не чувствую каких-либо ограничений, используя IAR. Я научился понимать его, а он, видимо, - меня.