ТЕСЕЙ (архитектура микроконтроллера)/Адресация

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 18:11, 28 февраля 2016.

Адресация в ТЕСЕЙ сильно отличается от адресации в x86.

Существует два основных принципа взаимодействия:

  1. принцип разделения памяти(разные устройства отображаются в физической памяти компьютера)
  2. принцип разделения портов ввода/вывода(адрес --> регистр порта --> внутреннее устройство; внутреннее устройство --> порт)

Адресация памяти данных

Разрядность пространства (то есть величина памяти, которая может адресовать)

mov B, A - указываем место в физической памяти(взаимодействие процессора с внутренними устройствами).

CMOS - энергозависимая (ранее 64 бита), при старте компьютера: сравнивает пароли BIOS'а и получает список загрузки.

CMOS взаимодействует с процессором через порты ввода/вывода. В таблице 1 приведено выделение участков памяти под устройства.

Адрес 16 Устройство Адрес 16 Устройство
0 Регистр состояния процессора 1В 1С свободный адрес
1 Рабочий регистр порта А 1D Регистр управления сторожевого таймера
2 Рабочий регистр порта В 1Е+37 Свободные адреса
3 Свободный адрес 38 Регистр управления блока ЭСППЗУ
4 Регистр управления таймера 39 Регистр адрема блока ЭСППЗУ
5 Рабочий регистр таймера 3А+3Е Свободные адреса
Свободные адреса 3F Регистр данных блока ЭСППЗУ
19 Регистр конфигурации порта А 40+BF Оперативная пасять
Регистр конфигурации порта В С0+FF Свободные адреса

Процессор работает только с памятью (пишет значение и пр.), то есть непосредственно с внутренними устройствами не взаимодействует.

Свободные адреса - зарезервированы (к ним не подключены устройства), запись по таким адресам ни к чему не приведет. Свободные места закладывались для расширения архитектуры (размеров регистров и пр.).

Intel уделяет этому аспекту больше внимания (так как при создании процессоров большей разрядности необходимо предусмотреть режим обратной совместимости).

Кроме памяти есть 7 управляющих регистров. 32 бита под переменные доступны программатору во время программирования. Существует 4 сегмента памяти, отвечающих за расположение доступных программатору 32 бит (таблица 2).

Сегмент А Сегмент В Сегмент С Сегмент D
A0 B0 C0 D0
A1 B1 C1 D1
A2 B2 C2 D2
A3 B3 C3 D3
A4 B4 C4 D4
A5 B5 C5 D5
A6 B6 C6 D6
A7 B7 C7 D7'

Программатор выделяет в оперативной памяти пространства под сегменты. Управление переключением сегментов управляют семь управляющих регистров SR0...SR7.

Стек данных и стек команд располагаются раздельно.

Обработка прерываний (по условию или по времени) сохраняет текущее состояние процессора: текущие команды и текущие данные. В стек записывается адрес начала сегмента, при восстановлении - переход на начало сегмента. Служебные управляющие регистры SR0...SR7.

  • SR0...SR3 - задает начало сегмента в пространстве данных.
  • SR4...SR7 - регистры для косвенной адресации.
№ Регистра Назначение
SR0 Регистр адреса сегмента А
SR1 Регистр адреса сегмента В
SR2 Регистр адреса сегмента С
SR3 Регистр адреса сегмента D
SR4 Регистр адреса 0-го косвенного регистра
SR5 Регистр адреса 0-го косвенного регистра
SR6 Регистр адреса 1-го косвенного регистра
SR7 Регистр адреса 1-го косвенного регистра

Регистры SR0...SR3:

7 6 5 4 3 2 1 0
х х х Старшие 5 разрядов адреса

Сегмент должен быть выровнен по границе 8 байт.

Косвенная адресация:

mov A,B - прямая адресация. mov D7,B - обращаемся не к D7, а к регистру который находится по адресу содержащийся в D7, то есть для организации циклов и прочих переходов.

Сегменты A,B,C,D можно использовать традиционно, но: D6,D7 могут выступать кроме того, как операнды косвенной адресации.

Режим работы IRO Режим работы IR1
Значение битов 7 и 6 Режим работы IRO Значение битов 7 и 6 Режим работы IR1
00 Отключение регистра 00 Адресация памяти команд
01 Автоинкремент адреса 01 Автоинкремент адреса
10 Автоинкремент адреса 10 Автоинкремент адреса
11 Чистая косвенность 11 Чистая косвенность

В зависимости от того что записано в SR6 и SR7 работа IR0 и IR1 повлияет на результат:

mov D6 Mem - значение в следующий раз станет на единицу больше.

mov D6+1 Mem+1

SR5 - используется только два бита. Регистр состояния процессора (нулевой адрес физической памяти).

7 6 5 4 3 2 1 0
Режим IR0 х х х х х x

Выполнили арифметическую команду, надо выставить флаги:

с - признак переноса;

z - равенство 0 результата операции;

s - знаковый разряд (если результат отрицательный, то s=1);

IE(Interrupt Enable) - флаг, разрешающий прерывание от внешних устройств;

OF(Over Flow) - флаг переполнения;

DC - тетрадный перенос.

Регистры D6 и D7 - регистры косвенной адресации и могут работать в 4-х режимах:

  1. BASE_D+6 -значение D6 определяется традиционным образом(режим косвенной адресации отключен);
  2. IR0 - адрес куда надо обратиться в IR0;
  3. IR0 - - - адрес, куда надо обратиться в старших битах регистра.
  4. IR0 ++ - адрес, куда надо обратиться в старших битах регистра.

Регистр D7: D7 никогда не указывает на значение BASE_D+const! (D7 ассоциируется с памятью данных или памятью команд, но не с BASE_D+const).

ROM (IR1)

DATA (IR1--)

DATA (IR1++)

DATA (IR1) //по умолчанию в IR1 7 и 6 биты равны 00

Распределение адресного пространства: архитектура гарвардская.

Память команд

Память команд: хранение команд + констант(доступны только для чтения).

Регистр IR1 (он же - SR7) предоставляет возможности для работы с памятью команд. Для осуществления доступа к памяти команд требуется поставить состояние битов 6 и 7 в регистре IR1 в 0 (см. таблицу выше).

ЭСППЗУ

Обращение к ЭСППЗУ происходит так же, как и к прочим периферийным устройствам (см. мануал).


Более подробно с данным материалом можно ознакомиться здесь:

Подробное описание - Принципы адресации - стр. 8-13 [1]