Используемые регистры

Обсуждение проекта на ассемблере(avra) операционной системы реального времени для Atmega
w5277c
Сообщения: 18
Зарегистрирован: 16 мар 2022, 11:18

Используемые регистры

Непрочитанное сообщение w5277c »

В этом решении программисту доступна только часть регистров(точнее все 16 старших и 2 младших в виде констант).
Так было сделано по следующим соображениям.
  • В первые 16 регистров не может быть напрямую записана константа, что не очень удобно.
  • Для работы с ядром по большему счету программисту достаточно 16 регистров.
  • Чем больше регистров отдано программисту, тем больше задача отъедает памяти и медленней процедуры переключения задач.
  • Некоторым критическим процедурам ядра(например диспетчеру) необходимо несколько регистров гарантированно не используемых нигде больше. Вероятно их количество можно снизить или вообще освободить, но это повлияет на производительность. А может быть - это просто задача на будущее. Но как сказал ранее, я не вижу большой потребности в этом.
С0x00 - константа со значением 0x00(регистр r7)
С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 - в основном используется для работы с портами
Ответить