А... забыл, что ещё есть инструкция TBLRD и TABLAT ни разу не индексный регистр. Ниже что сохраняется для самого быстрого и приоритетного прерывания:
movff fsr0l,saved_regsh+6
movff fsr0h,saved_regsh+5
movff tblptrh,saved_regsh+4
movff tblptrl,saved_regsh+3
movff tablat,saved_regsh+2
movff prodh,saved_regsh+1
movff prodl,saved_regsh
goto int_func
Не успевает 1-wire slave на 16МГц. :-( Хоть на ассемблере переписывай. От PROD не избавиться (есть умножение), от FSR0 тоже, от TBLRD тоже. До чего уродская архитектура. В приличных есть второй банк регистров для быстрых прерываний.