Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Система команд

Микроконтроллеры AVR имеют систему сокращенного набора команд RISC, хотя целиком и не полностью попадают под это определение.
Система RISC подразумевает полную симметрию между ресурсами памяти разного типа. Это, в частности, позволяет обращаться к регистрам, портам и памяти данных одними и теми же командами, что и обуславливает их небольшое количество. Однако, не смотря на то, что адресное пространство памяти AVR действительно непрерывно, всё же три разных его области используются только для своих специфических целей. РОН – преимущественно для математических операций, РВВ – для управления процессором, ОЗУ – только как хранилище информации. В связи с этим существуют группы команд как для работы с каждым видом памяти в отдельности, так и для пересылки данных из одной области памяти в другую. Поэтому и количество команд AVR достаточно велико. В фирменной документации, где много говорится про ортогональность ядра, в первую очередь имеется в виду полная равноправность именно РОН.

Система команд линейки ATtiny является подмножеством системы команд старшего семейства ATmega. В ряде старых моделях ATtiny могут отсутствовать некоторые аппаратные узлы (индексные регистры X,Y, программный стек, память ОЗУ и др.) и, соответственно, отсутствовать связанные с ними команды. Система же команд ATtiny более позднего времени выпуска практически аналогична семейству ATmega. Главное отличие обеих семейств – отсутствие встроенного умножителя у ATtiny (отсутствие группы команд умножения).

Разные модели ATtiny могут иметь (90…120) команд. ATmega поддерживают (130…135) инструкций. Так заявлено в спецификациях Atmel. Но фактическое число, на самом деле, значительно меньше.

Это связано с тем, что в ассемблере AVR встроен ряд макроопределений, эквивалентных реальным командам, но имеющих иной символический вид. Так, например, у команды ori Rd,K существует команда двойник sbr Rd,K, которая выполняет тоже действие (Rd = Rd OR K) и имеет такой же код операции. Аналогичные псевдокоманды существуют и для разных случаев применения bset s, bclr s, brbs s,k, brbc s,k, и мн. др.

Способы адресации

Большинство команд ассемблера используют различные ячейки памяти микроконтроллера и, соответственно, содержат кроме кода операции (КОП) также их адреса. В зависимости от того в каком виде в команде хранится адрес различают два способа адресации: прямую и косвенную. В первом случае адрес ячейки задан явно, а во-втором он находится в одном из регистров-указателей (у AVR это 16-разрядные регистры X,Y,Z). У микропроцессоров различного типа, оба способа адресации могут иметь множество вариаций. Ниже приведены характерные только для микроконтроллеров AVR.

Разновидности прямой адресации

Прямая адресация регистра общего назначения

В команде присутствует адрес регистра приемника либо источника результата. Примерами команд могут служить inc Rd, dec Rd, lsl Rd, lsr Rd и т.д. Адресацию, где в команде кроме адреса регистра находится еще и константа (ldi  Rd,K, ori Rd,K  и т.д.), называют также непосредственной, а в случае сохранения/восстановления данных в стеке (push Rr и pop Rd) – стековой. Адрес РОН находится в пределах 0…31 (в командах с непосредственной адресацией 0…15).

Прямая адресация двух регистров общего назначения

Команды данного типа содержат адреса двух  РОН, один из которых является источником, а другой приемником результата в арифметических операциях, а также операциях пересылки. Примеры команд: mov Rd, Rr, add Rd, Rr, sub Rd, Rr, and Rd,Rr и т.д. Адреса обоих регистров лежат в пределах 0…31, но в некоторых командах умножения могут использоваться только РОНы 16…31 (muls Rd,Rr и fmuls Rd,Rr) или 16…23 (mulsu Rd,Rr и fmulsu Rd,Rr).

Прямая адресация регистра ввода-вывода

Прямую адресацию регистра ввода-вывода у AVR используют команды двух типов. Это копирование РВВ в РОН in Rd,P и пересылка в противоположном направлении out P,Rr. В обоих случаях могут быть использованы любые регистры общего назначения 0…31 и регистры ввода-вывода 0…63.

Прямая адресация ОЗУ

Прямая адресация ОЗУ встречается в командах lds Rd,k и sts k,Rr. Первая инструкция пересылает байты из SRAM микроконтроллера в один из РОНов, вторая копирует содержимое РОНа в ячейку SRAM. В обеих командах под поле адреса ячейки памяти отводится 16 битов, а значит, имеется возможность напрямую обращаться к любому адресу SRAM из диапазона 0…65535. Инструкции работают со всеми РОНами 0…31 и имеют размер в 2 слова (4 байта).

Разновидности косвенной адресации

Простая косвенная адресация

Простая косвенная адресация применяется для копирования данных из SRAM в РОН одной из команд ld Rd,X/Y/Z, а также для пересылки в обратном направлении st X/Y/Z,Rr. В 2-байтовых регистрах-указателях X,Y,Z содержится адрес ячейки приемника либо источника в диапазоне 0…65535.

Косвенная адресация с преддекрементом

Этот вид адресации подобен простой косвенной адресации за исключением одного отличия. Перед выполнением операций пересылки значения индексных регистров X,Y,Z аппаратно уменьшаются на единицу, что и символизирует знак “-” в командах ld Rd,-X/-Y/-Z и st -X/-Y/-Z,Rr.

Косвенная адресация с постинкрементом

При косвенная адресации с постинкрементом значения указателей X,Y,Z аппаратно увеличивается на единицу (знак “+” перед указателями) после пересылки байта командами ld Rd,X+/Y+/Z+ и st X+/Y+/Z+,Rr.

Относительная косвенная адресация

Относительная косвенная адресация также используется для пересылки данных между РОН и SRAM. Однако адрес ячейки памяти определяется здесь как сумма содержимого указателей Y,Z и фиксированного смещения q. Для пересылки байта из SRAM в РОН применяются команды ldd Rd,Y+q/Z+q, а для пересылки в обратном направлении st Y+q/Z+q,Rr. Величина q может лежать в пределах 0…63.

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Игорь #
Не совсем понятно ограничение в смещении =0..63!?
В моем случае смещение возможно было бы применить в пределах 0...127 или даже 0.....256! Размер SRAM позволяет. В моем даташите такое же ограничение 0...63 и нет объяснения почему. У меня закрадывается смутное предположение что смещение может иметь как положительное значение, так и отрицательное.
Ответить
0
Андрей #
Потому смещение записывается непосредственно в опкод.
Команда
ldd Rd, Y + q
Будет иметь опкод:
10q0 qq0d dddd 1qqq

q - это биты числа q (смещения). Их здесь 6 штук. Максимальное число записанное на 6 битах - это 63 (0011 1111)
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Конструктор - темброблок на LM1036 Лазерный модуль 650нм 5мВт
вверх