Menu
Методы адресации операндов в командах Ассемблера AVR-контроллера
В AVR-микроконтроллере существует три области памяти, каждая со своей системой адресации, начинающаяся с нулевого адреса до конечного:
1. ПЗУ – постоянное запоминающее устройство, предназначенное для хранения машинных кодов управляющих программ. Сюда загружаются объектные hex-файлы, создаваемые пакетом AVR Studio. Ассемблерные команды не могут обращаться к ячейкам памяти ПЗУ.
2. EEPROM – энергонезависимое ОЗУ. Ассемблерные команды позволяют обращаться к ячейкам памяти EEPROM.
3. ОЗУ. Ячейки памяти ОЗУ используются во всех ассемблерных командах. Эта область состоит из 3-х подобластей, которые имеют последовательную сквозную адресацию.
3.1. Первая подобласть состоит из 32 регистров, которые имеют двоякую адресацию: по имени регистра (R0-R31) или по ее числовому адресу ( или от до ). Они используются для оперативного хранения результатов промежуточных вычислений.
3.2. Следующей подобластью ОЗУ являются регистры ввода/вывода, предназначенные для обмена информацией с периферийными устройствами (таймеры, компараторы, АЦП, порты дискретного ввода/вывода информации). Регистры ввода/вывода также как и регистры имеют двойную адресацию: по имени регистра ввода/вывода и по его числовому адресу. Числовой адрес регистра ввода/вывода также имеет двойное представление. Если регистр ввода/вывода используется в командах in или out, то адреса регистров ввода/вывода находятся в диапазоне с по или с по . Эти команды принадлежат к группе команд передачи данных. Если к регистрам ввода/вывода обращаются другие команды языка ассемблера, то используется адресация в диапазоне от до или от до .
Содержимое регистров и регистров ввода/вывода, определенное их именами, мы можем наблюдать в окне «Workspace». В этом окне приведена также двойная числовая адресация регистров ввода/вывода. Содержимое регистров и регистров ввода/вывода, определенное их числовыми адресами, мы можем наблюдать в окнах Memory, Register, I/O.
3.3. Область «Data». В этой области расположены ячейки памяти ОЗУ, которые используются для оперативного хранения результатов промежуточных операций. Эти ячейки имеют лишь числовую адресацию. Адрес младшей ячейки этой области или , размер этой области определяется типом контроллера.
При работе в пакете AVR Studio при установке курсора на любую ячейку памяти ОЗУ появляется всплывающая «подсказка», в которой расположено 4 элемента, разделенных знаком двоеточие. Слева от двоеточия стоит адрес ячейки памяти в 16-ой системе исчисления, а справа – содержимое ячейки памяти в 16-ой, 10-ой, 2-ой системах исчисления.
Первый тип адресации, который используется в командах AVR ассемблера называется» регистровый тип адресации» и подразумевает, что мы определяем расположение операнда в регистровом файле по имени регистра.
Пример №1:
ldi R16, 100 – операнд получатель или первый операнд адресуется именем регистра.
mov R1, R16 – оба операнда (и регистр получатель и регистр источник – второй операнд) определены именем регистра.
Второй тип адресации – непосредственный тип адресации – используется лишь для операнда источника (LDI R16, 100) и задает содержимое операнда в самой команде. Под непосредственным типом адресации операнда в любой команде Ассемблера мы понимаем ее определение не через адрес распространения эпого операнда (в ОЗУ), а через ее значение в самой команде (в ПЗУ).
Пример №2:
ldi R16, 100; здесь число сто загружается в регистр R16.
Третий тип адресации – прямой тип адресации. При этом числовая константа в команде обозначает адрес ячейки памяти, содержимое которой является операндом команды.
Пример №3:
lds R16, 100,
где 100 – адрес ячейки памяти, содержимое которой загружается в регистр R16.
Определить тип адресации в командах ldi и lds можно двумя способами:
Первый способ - Мы должны запомнить, что непосредственный тип адресации в команде передачи данных используется лишь в команде ldi.
Второй способ - Пользуясь Хелпом пакета AVR Studio в строке функции команды мы видим, что функции команды ldi символьно записываются в виде:
R16←K, а в команде lds – R16←(K),
где (K) обозначают содержимое ячейки памяти , адрес которой равен числовой константе К.
Четвертый тип адресации - Косвенный тип адресации, когда в команде указываются наименование парного регистра (или X или Y или Z), содержимое которых определяет адрес ячейки памяти, содержимое которой участвует в качестве операнда. Символьно эта операция записывается в виде: R16←((Х)).
Пример №4:
ld R16, X
R16←((X))
Косвенный тип адресации с пост инкрементом или с пред декрементом.
Этот тип адресации используется для адресации циклических вычислений и включает в себя выполнение одновременно двух действий: пост инкремент или пред декремент содержимого парного регистра и передача одного байта информации из одного места в другое.
Пример №5:
ld R16, X+
Первое действие: R16←((X)). Второе действие: парный регистр Х наращивается на 1: Х=Х+1.
st – X,R16
Первое действие: Х=Х-1. Второе действие: ((X))← R16.
Добавлять комментарии могут только зарегистрированные пользователи.
Регистрация Вход