- •2. Архитектура микроконтроллеров семейства 8051
- •2.1. Общие сведения
- •2.2. Структурная схема микроконтроллера
- •2.3. Процессорное ядро
- •2.4. Организация памяти
- •2.5. Регистры специальных функций
- •2.6. Модуль системы прерываний
- •2.7. Модуль параллельных портов ввода-вывода
- •2.8. Модуль таймеров/счетчиков
- •2.9. Модуль универсального асинхронного приемопередатчика
- •2.10. Система команд микроконтроллеров семейства 8051
- •2.10.1. Общие сведения о системе команд
- •2.10.2. Описание команд
- •2.10.3. Методы адресации операндов
2.10.3. Методы адресации операндов
Одним из важных моментов при программировании является организация работы с адресами, от которой во многом зависит эффективность программ. В МК семейства 8051 используются следующие способы адресации операндов: неявная, регистровая, прямая, косвенно-регистровая, непосредственная, индексная, относительная и страничная.
Рассмотрим теперь конкретные способы адресации более подробно.
|
|
|
Рис. 2.26. Прямая адресация |
Прямо адресуемые биты с адресами 0…127 (00H…FFH) расположены в блоке из 32 ячеек РПД, имеющих адреса 20H…2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта.
Отдельно адресуемые биты в РСФ пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самого регистра, а три младших – определяют позицию отдельного бита внутри регистра.
Прямой адрес может быть задан числом, символическим именем, выражением, принятым именем РСФ и битов РСФ.
Неявная адресация. При неявной адресации в команде не содержится явных указаний об адресе участвующего в операции операнда и в самом коде операции содержится лишь неявное (по умолчанию) указание на место расположения одного или даже двух операндов.
Чаще всего в качестве неявного адреса используется аккумулятор, в связи с чем в зависимости от способа адресации его обозначают двумя символическими именами: A – при неявной адресации, и ACC – при прямой.
|
|
|
Рис. 2.27. Регистровая адресация |
Косвенно-регистровая адресация. Косвенно-регистровая адресация, схема которой показана на рис. 2.28, используется для обращения к ячейкам памяти, прямой адрес которых расположен в регистре-указателе данных DPTR или в регистрах общего назначения R0 и R1 выбранного банка регистров.
|
|
|
Рис. 2.28. Косвенно-регистровая адресация |
При обращении к резидентной памяти данных в качестве регистров-указателей используются регистры R0 и R1 выбранного банка регистров.
Для обращения к любой ячейке адресного пространства ВПД объемом до 64 Кбайт используется 16-разрядный регистр-указатель данных DPTR. Операнд, определяющий косвенно-регистровую адресацию данных, задается именем регистра-указателя DPTR или символическими именами регистров R0 и R1 с обязательным префиксом @.
|
|
|
Рис. 2.29. Непосредственная адресация |
При непосредственной адресации операнд может быть представлен числом, символическим именем или выражением с обязательным использованием префикса #.
Индексная адресация. При индексной адресации, схема которой представлена на рис. 2.30, прямой адрес операнда определяется по содержимому двух регистров – базового и индексного. При этом исполнительный адрес задается суммой содержимого базового регистра (регистр PC или DPTR), задающего базовый адрес, и содержимого индексного регистра (аккумулятор А), задающего смещение (индекс) от базового адреса. Индексная адресация упрощает просмотр таблиц констант, размещенных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого регистра-указателя данных DPTR или счетчика команд PC и содержимого аккумулятора А.
|
|
|
Рис. 2.30. Индексная адресация |
Относительная адресация. При относительной адресации прямой адрес формируется путем сложения содержимого счетчика команд PC с адресным полем команды, в котором содержится восьмиразрядное смещение rel (relative – относительный). Число rel интерпретируется командой как целое со знаком с диапазоном представления –128...+127. Относительная адресация широко используется в командах передачи управления, что позволяет создавать перемещаемые программные модули. Команды передачи управления с относительной адресацией позволяют организовать ветвление относительно текущего положения счетчика команд PC в обе стороны на –128...+127 байт.
В командах ветвления на языке ассемблера поле смещения заполняется транслятором на основе вычисления расстояния от команды до метки, на которую производится переход.
Страничная адресация. При использовании страничной адресации вся память разбивается на ряд страниц одинаковой длины. Адреса страниц задаются регистром страниц, а адресация ячеек памяти внутри страницы осуществляется однобайтовым адресом в R0 или R1, номер которых задан в команде. Прямой адрес формируется сложением адреса страницы и адреса ячейки памяти внутри страницы. В МК 8051 такой способ адресации используется только в команде MOVX A, @Ri, в которой номер страницы задает порт P2, а содержимое регистра Ri задает адрес внутри страницы, состоящей из 256 ячеек.





