Как я обошелся с верхними регистрами

Не знаю насколько пригодится эта придумка, но мне показалось удобным:

Мы имеем 10 регистров, от R16 до R25, которые «лучше чем остальные», ибо в них можно пихать
константы. То есть их удобно использовать как промежуточные при вычислениях. А чтобы не сохраняться в стеке при вызове прерываний, можно отдать 4 регистра на откуп обработчикам прерываний — то есть просто условиться для себя, что вот эти 4 регистра юзаем ТОЛЬКО в прерываниях.

Вот так:

.def TMPI0 = R16;
.def TMPI1 = R17
.def TMPI2 = R18
.def TMPI3 = R19

Остальные 6 я поделил так

Вот так:

.def TMP0 = R20; TMP0-TMP3 — для всяких 8-битных вычислений
.def TMP1 = R21;
.def TMP2 = R22; TMP_LOL — TMP_HOH — для 16 и 32 битных,
.def TMP3 = R23;
.def TMP_LOL = R22;
.def TMP_HOL = R23;
.def TMP_LOH = R24;
.def TMP_HOH = R25;
.def NULL = R5; ну и нолик вечный, инициализируем нулем в начале, и более
на запись не трогаем.

Вряд ли я открыл Америку, скорее изобрел очередной велик, но определенный порядок в голове и в коде появился. А то все эти LDI R16, CPI R21, R22 — очень тяжелочитабельны.