- •Внутренняя архитектура и
- •Цель и содержание работы
- •Архитектура микроконтроллера
- •2.2.2 Регистры общего назначения.
- •2.2.3 Регистры специального назначения.
- •3. Адресация команд.
- •3.1 Относительная адресация.
- •3.2 Прямая адресация
- •3.3 Косвенная табличная адресация
- •3.4 Регистровая адресация
- •4. Адресация операндов.
- •4.1 Неявная адресация.
- •4.2 Регистровая адресация
- •4.3 Прямая адресация
- •4.4 Короткая прямая адресация
- •4.5 Адресация регистров специального назначения (sfr)
- •4.6 Косвенная регистровая адресация
- •4.7 Базовая адресация
- •4.8 Относительная индексная адресация
- •4.9 Стековая адресация
- •5 Система команд.
- •5.1 Операции
- •5.2 Соглашения при описании команды
- •5.3 Перечень команд процессора сгруппированный по видам адресации
- •5.4 Описание инструкций.
- •6. Контрольные вопросы
4.6 Косвенная регистровая адресация
При косвенной регистровой адресации происходит доступ к ячейке памяти, адресуемой регистровой парой, указанной в качестве операнда. В теле инструкции регистровая пара кодируется специальным кодом , с учётом флагов выбора банка регистров (RBS0, RBS1). При использовании данного вида адресации может быть получен доступ к любой ячейке памяти, входящей в адресное пространство микроконтроллера.
В качестве операндов могут быть использованы регистровые пары DE и HL.
Пример:
MOV A, [DE]; При этом DE осуществляет адресацию ячейки памяти
![]()

Рисунок 21 – схематическое представление команды MOV A, [DE]
4.7 Базовая адресация
При базовой адресации происходит доступ к ячейке памяти, адрес которой получается в результате сложения 8-разрядного смещения непосредственно заданного в команде и значения базовой регистровой пары HL. При сложении смещение расширяется до положительного 16 разрядного числа. Перенос, который может возникнуть в результате сложения, игнорируется. При использовании данного вида адресации может быть получен доступ к любой ячейке памяти, входящей в адресное пространство микроконтроллера.
Формат операнда записывается как [HL + byte]
Пример:
MOV A, [HL+10H]; При этом byte соответствует значению 10H


Рисунок 22 – схематическое представление команды MOV A, [HL+10h]
4.8 Относительная индексная адресация
При этом виде доступа содержимое регистра C или В, указанное в слове команды добавляются к содержимому базового регистра, то есть регистровой паре HL указанной флагами выбора банка регистра (RBS0 и RBS1). Сумма используется для обращения к памяти. Добавление выполняется расширением содержимого регистра C или В как положительное 16-разрядное число. Перенос 16-ого бита игнорируется. Эта адресация может быть выполнена для всего пространства памяти.
Формат операнда имеет вид [HL+B] либо [HL+C].
Пример:
MOV A, [HL + B] – в качестве операнда выбран регистр В.
Код
операции
![]()

Рисунок 23 – схематическое представление команды MOV A, [HL + B]
4.9 Стековая адресация
При стековой адресации происходит доступ к ячейке памяти, адрес которой хранится в указателе стека (SP). Этот метод адресации используется при выполнении команд PUSH, POP, вызове подпрограмм и возврате из подпрограмм, а также при автоматическом сохранении/восстановлении регистра PSW при обработке прерываний. При стековой адресации доступ может осуществляться только к внутреннему высокоскоростному ОЗУ.
Пример:
PUSH DE
![]()

Рисунок 24 – сохранение данных в стек.
5 Система команд.
5.1 Операции
При написании программы на языке ассемблера большинство команд имеют операнды, записанные в определенном формате. Причем действия, выполняемые некоторыми командами, могут отличаться в зависимости от формы представления операндов данной команды. Некоторые символы (модификаторы) такие как #, !, $ и [] являются зарезервированными. Применение модификаторов следует трактовать следующим образом:
• # – Непосредственно заданные данные
• ! – Абсолютный адрес
• $ - Относительный адрес
• [] – Косвенный адрес
В качестве непосредственно заданных данных в команде можно использовать соответствующее числовое значение или метку. При использовании метки обязательно следует указать какой-либо из модификаторов #, !, $ или [].
При описании команд, в качестве операндов вместо функциональных (Х, А, С и т.д.) или абсолютных (в таблице приведены в скобках R0, R1, R2 и т.д.) имен регистров, возможно использование обозначения r и rp для регистров и регистровых пар соответственно.
Операнды и принимаемые ими значения приведены в таблице 6.
Таблица 6 – Операнды и принимаемые ими значения.
|
Операнд |
Значения операнда |
|
r rp sfr sfrp |
X (R0), A (R1), C (R2), B (R3), E (R4), D (R5), L (R6), H (R7) AX (RP0), BC (RP1), DE (RP2), HL (RP3) Регистр специального назначения Регистры специального назначения |
|
saddr saddrp |
0хFE20 – 0хFF1F непосредственно заданный адрес или метка 0хFE20 – 0хFF1F непосредственно заданный адрес или метка (только четные адреса). |
|
addr16
addr11 addr5 |
0х0000– 0хFFFF непосредственно заданный адрес или метка (для команд передачи 16-разрядных данных только четные адреса). 0х0800 – 0х0FFF непосредственно заданный адрес или метка 0x0040 – 0x007F непосредственно заданный адрес или метка (только четные адреса). |
|
word byte bit |
Непосредственно заданные 16-разрядные данные или метка Непосредственно заданные 8-разрядные данные или метка Непосредственно заданные 3-разрядные данные или метка |
|
RBn |
RB0 – RB3 |
Внимание! Данными операндами нельзя обратиться к адресам 0хFFD0 – 0xFFDF
