Скачиваний:
232
Добавлен:
16.04.2015
Размер:
3.75 Mб
Скачать

2.10.3. Методы адресации операндов

Одним из важных моментов при программировании является организация работы с адресами, от которой во многом зависит эффективность программ. В МК семейства 8051 используются следующие способы адресации операндов: неявная, регистровая, прямая, косвенно-регистровая, непосредственная, индексная, относительная и страничная.

Рассмотрим теперь конкретные способы адресации более подробно.

Рис. 2.26. Прямая адресация

Прямая адресация. Этот тип адресации со схемой, показанной на рис. 2.26, используется для обращения к ячейкам резидентной памяти данных DSEG и к регистрам специальных функций, а также к битовому содержимому 16 ячеек области BSEG или 11 РСФ, допускающих побитовое обращение. Старший бит байта кода прямого адреса выбирает одну из двух групп отдельно адресуемых битов, расположенных в РПД и РСФ.

Прямо адресуемые биты с адресами 0…127 (00H…FFH) расположены в блоке из 32 ячеек РПД, имеющих адреса 20H…2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта.

Отдельно адресуемые биты в РСФ пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самого регистра, а три младших – определяют позицию отдельного бита внутри регистра.

Прямой адрес может быть задан числом, символическим именем, выражением, принятым именем РСФ и битов РСФ.

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

Чаще всего в качестве неявного адреса используется аккумулятор, в связи с чем в зависимости от способа адресации его обозначают двумя символическими именами: A – при неявной адресации, и ACC – при прямой.

Рис. 2.27. Регистровая адресация

Регистровая адресация. При регистровой адресации, схема которой показана на рис. 2.27, операнд расположен в одном из восьми рабочих регистров (R0…R7) выбранного банка регистров общего назначения. В каж­дом банке восемь регистров, и для их адресации необходим всего лишь трехбитовый прямой адрес. Это самый простой и наиболее быстрый способ извлечения операнда. Использование регистровой адресации позволяет получать двухбайтовый эквивалент трехбайтовых команд прямой адресации.

Косвенно-регистровая адресация. Косвенно-регистровая адресация, схема которой показана на рис. 2.28, используется для обращения к ячейкам памяти, прямой адрес которых расположен в регистре-указателе данных DPTR или в регистрах общего назначения R0 и R1 выбранного банка регистров.

Рис. 2.28. Косвенно-регистровая адресация

При обращении к резидентной памяти данных в качестве регистров-указателей используются регистры R0 и R1 выбранного банка регистров.

Для обращения к любой ячейке адресного пространства ВПД объемом до 64 Кбайт используется 16-разрядный регистр-указатель данных DPTR. Операнд, определяющий косвенно-регистровую адресацию данных, задается именем регистра-указателя DPTR или символическими именами регистров R0 и R1 с обязательным префиксом @.

Рис. 2.29. Непосредственная

адресация

Непосредственная адресация. В этом способе адресации, схема которого иллюстрируется рис. 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 ячеек.

139

Соседние файлы в папке Микроконтроллеры