Цитата(MmX12345 @ Jun 14 2011, 15:28)

CLI // запретить прерывания
OUT 0x3E,R25 // запись старшего байта в указателя стека
OUT 0x3F,R0 // восстановить SREG
OUT 0x3D,R24 // запись младшего байта в указателя стека
Вся эта последовательность инструкций выполнится атомарно (при запрещённых прерываниях) в любом случае. Две последние инструкции поменяны местами с целью выиграть время (быстрее разрешить прерывания). Ибо архитектура AVR устроена таким образом, что после разрешения прерываний, даже при активном запросе на прерывание от любой периферии, ядро гарантировано выполнит одну инструкцию до обработки запроса на прерывание. И этой инструкцией в вашем случае будет OUT 0x3D,R24.
Это сделано насколько я понимаю с целью чтобы фоновая программа не зависла вусмерть при каком-то "залипшем" источнике прерываний.
Цитата(_guardianangel @ Jun 14 2011, 16:44)

Всё зависит от того что в R0.
Ошибаетесь. Никак не зависит от содержимого R0.
Цитата
время реакции на прерывание 4 такта.
Снова ошибаетесь. Время реакции на прерывание никак не связано с вопросом. Пусть хоть 44 такта или 1 такт. Время реакции на прерывание - это то сколько тактов нужно процессору с момента запроса прерывания до начала выполнения обработчика прерывания. И всё это время процессор уже не выполняет фоновую программу как вы подумали, а помещает в стек адрес возврата и совершает переход на вектор прерывания. И только. Хотя мог бы и регистр статуса сохранить аппаратно, да и регистровые пары некоторые, а нет...