Так было сделано по следующим соображениям.
- В первые 16 регистров не может быть напрямую записана константа, что не очень удобно.
- Для работы с ядром по большему счету программисту достаточно 16 регистров.
- Чем больше регистров отдано программисту, тем больше задача отъедает памяти и медленней процедуры переключения задач.
- Некоторым критическим процедурам ядра(например диспетчеру) необходимо несколько регистров гарантированно не используемых нигде больше. Вероятно их количество можно снизить или вообще освободить, но это повлияет на производительность. А может быть - это просто задача на будущее. Но как сказал ранее, я не вижу большой потребности в этом.
С0xff - константа со значением 0xff(регистр r8)
TEMP_L - младший регистр общего назначения(регистр r16)
TEMP_H - старший регистр общего назначения(регистр r17)
TEMP - регистр общего назначения(регистр r18)
TEMP_EL - младший расширенный регистр общего назначения(регистр r19)
TEMP_EH - старший расширенный регистр общего назначения(регистр r20)
LOOP_CNTR - счетчик циклов(регистр r21)
FLAGS - регистр флагов(регистр r22)
TRY_CNTR - счетчик ошибок/попыток(регистр r23)
ACCUM - аккумулятор(регистр r24)
PID - уникальный идентификатор процесса(регистр r25)
XL,XH - регистровая пара X(регистр r26 и r27)
YL,YH - регистровая пара Y(регистр r28 и r29)
ZL,ZH - регистровая пара Z(регистр r30 и r31)
При использовании драйверов рекомендую следующее использование регистров:
Z - адрес данных для чтения, источник(он также используется для адресации на RAM и FLASH память).
X - адрес данных для записи, получатель
это применимо для передачи по UART или для различных процедур, например, копирование строки.
Y - адрес на выделенную память задачи
Регистры TEMP_EH, TEMP_EL, TEMP_H, TEMP_L, TEMP часто используются как регистры без особой спецификации, но как правило:
TEMP_EH - часто хранит длину данных для чтения(т.е. используется совместно с Z),
TEMP_EL - аналогично TEMP_EH, хранит длину данных для записи.
TEMP_H, TEMP_L - используются для передачи таймаута и других временных меток.
TEMP - чаще всего используемый регистр, он же часто хранит результат операции.
Если результат операции 16 бит - используются TEMP_H, TEMP_L, для 32 бит TEMP_EH, TEMP_EL, TEMP_H, TEMP_L.
ACCUM - в основном используется для работы с портами