Особенности системы команд
Система команд микроконтроллеров AVR семейства Mega весьма развита и насчитывает в различных моделях от 130 до 135 различных инструкций. Несмотря на то, что микроконтроллеры AVR являются микроконтроллерами с RISC-архитектурой (процессор с сокращенным набором команд), по количеству реализованных инструкций и их разнообразию они больше похожи на микроконтроллеры с CISC-архитектурой (процессор с полным набором команд). Практически каждая из команд (за исключением команд, у которых одним из операндов является 16-битный адрес) занимает одну ячейку памяти программ. Причем это достигнуто не за счет сокращения числа команд процессора, а за счет увеличения разрядности памяти программ. Программа для любого микроконтроллера представляет собой последовательность команд, записанных в памяти программ. Большинство команд при выполнении изменяют содержимое одного или нескольких регистров общего назначения, регистров ввода/вывода или ячеек ОЗУ. Доступ к регистрам ввода/вывода осуществляется по их адресам, являющихся операндами команды. Однако при написании программ гораздо удобнее обращаться к регистрам, используя вместо числовых значений адресов их стандартные, принятые в документации символические имена. Чтобы задать соответствие этих имен реальным адресам, необходимо подключить в начале программы (при помощи директивы ассемблера INCLUDE) файл определения адресов регистров ввода/вывода. Помимо всего прочего, такое решение облегчит перенос программного обеспечения с одного типа кристалла на другой. Эти файлы (для каждой модели микроконтроллеров семейства) свободно распространяются фирмой Atmel вместе с документацией на микроконтроллеры (в частности, включаемые файлы для всех выпускаемых микроконтроллеров AVR входят в комплект бесплатно распространяемой интегрированной среды AVRStudio). Для РОН, используемых в индексных регистрах, в этих файлах определяются также дополнительные символические имена XH, XL, YH, YL, ZH, ZL.
Названия этих включаемых файлов унифицированы и определяются следующим образом: <номер_модели>def.inc Например, программа для микроконтроллера ATmega8535 должна содержать следующую директиву ассемблера: .include "m8535def.inc" Необходимо только помнить, что если для обращения к регистру ввода/вывода используются команды обмена с ОЗУ, то к символическому имени требуется прибавить число $20. В ряде случаев значение операнда-источника может содержаться непосредственно в коде операции, а не в регистре. Это происходит в том случае, когда операндом-источником является константа. Способы адресации Микроконтроллеры AVR семейства Mega поддерживают 8 способов адресации для доступа к различным областям памяти данных (РОН, РВВ, ОЗУ). 4 способа представляют собой разновидности прямой адресации: прямая адресация одного РОН, прямая адресация двух РОН, прямая адресация РВВ, прямая адресация ОЗУ. В кодах команд, оперирующих с РОН и РВВ, указываются соответствующие 5-битные и 6-битные коды регистров. Команды с прямой адресацией ОЗУ – LDS и STS обеспечивают пересылку байта между одним из РОН и ячейкой ОЗУ и занимают в памяти программ два слова (32 бита), в первом из которых содержится код операции и адрес регистра общего назначения, а во втором находится адрес ячейки памяти. При косвенной адресации адрес ячейки памяти находится в одном из индексных регистров X, Y и Z. В зависимости от дополнительных манипуляций, которые производятся над содержимым индексного регистра, различают 4 разновидности косвенной адресации: простая косвенная адресация, относительная косвенная адресация, косвенная адресация с преддекрементом и косвенная адресация с постинкрементом.
При использовании команд простой косвенной адресации обращение производится к ячейке памяти, адрес которой находится в индексном регистре. Никаких действий с содержимым индексного регистра при этом не производится. Микроконтроллеры поддерживают 6 команд (по 2 для каждого индексного регистра) простой косвенной адресации: LD Rd, X/Y/Z (пересылка байта из ОЗУ в РОН) и ST X/Y/Z, Rd (пересылка байта из РОН в ОЗУ). При использовании команд относительной косвенной адресации адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра (Y или Z) и константы, задаваемой в команде. Другими словами, производится обращение по адресу, указанному в команде, относительно адреса, находящегося в индексном регистре. Микроконтроллеры семейства Mega поддерживают 4 команды относительной косвенной адресации (две — для регистра Y и две — для регистра Z): LDD Rd, Y+q/Z+q (пересылка байта из ОЗУ в РОН) и ST Y+q/Z+q, Rr (пересылка байта из РОН в ОЗУ). Поскольку под значение смещения в коде команды отводится только 6 битов, оно не может превышать 64. При использовании команд косвенной адресации с преддекрементом содержимое индексного регистра сначала уменьшается на 1, а затем производится обращение по полученному адресу. Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с преддекрементом: LD Rd, -X/-Y/-Z (пересылка байта из ОЗУ в РОН) и ST -X/-Y/-Z, Rd (пересылка байта из РОН в ОЗУ). При использовании команд косвенной адресации с постинкрементом после обращения по адресу, который находится в индексном регистре, содержимое индексного регистра увеличивается на 1. Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с постинкрементом: LD Rd, X+/Y+/Z+(пересылка байта из ОЗУ в РОН) и ST X+/Y+/Z+, Rd (пересылка байта из РОН в ОЗУ). В командах передачи управления также могут использоваться различные способы адресации памяти программ. Так, все микроконтроллеры семейства Mega имеют три команды безусловного перехода: команду относительного перехода RJMP, команду абсолютного перехода JMP, а также команду косвенного перехода IJMP.
При выполнении команды относительного перехода содержимое счетчика команд изменяется прибавлением к нему или вычитанием из него некоторого значения, являющегося операндом команды. Поскольку под значение операнда в слове команды отводится всего 12 битов, с помощью этой команды можно переходить только в пределах –2047... +2048 слов. В программах в качестве операндов этой команды вместо констант используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды. При выполнении команды абсолютного перехода в счетчик команд просто загружается значение нового адреса, являющееся операндом команды. Эта команда имеет длину в два машинных слова. Поскольку максимальное значение адреса равно $3FFFFF, то с помощью этой команды можно осуществлять переход в пределах всего адресного пространства имеющихся на сегодняшний день микроконтроллеров AVR. При выполнении команды косвенного перехода осуществляется переход по адресу, который находится в индексном регистре Z. Соответственно, процесс выполнения команды сводится к загрузке содержимого индексного регистра в счетчик команд. Так как индексный регистр — 16-битный, то максимально возможная величина перехода составляет 128 Кбайт (в моделях с объемом памяти программ более 128 Кбайт для выполнения перехода в пределах всего адресного пространства используется дополнительный регистр для задания старшей части адреса). Как и для реализации безусловных переходов, для вызова подпрограмм в микроконтроллерах семейства Mega имеются три команды: команда относительного вызова RCALL, команда абсолютного вызова CALL и команда косвенного вызова ICALL. Эти команды работают так же, как и соответствующие команды безусловного перехода, но перед выполнением перехода запоминается в стеке адрес возврата из подпрограммы (текущее значение счетчика команд). В конце каждой подпрограммы должна находиться команда возврата из нее. В системе команд микроконтроллеров семейства имеется две таких команды. Для возврата из обычной подпрограммы, вызываемой командами вызова подпрограмм, используется команда RET. Для возврата из подпрограммы обработки прерывания используется команда RETI. Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы RETI дополнительно устанавливает в 1 флаг общего разрешения прерываний регистра состояния SREG, сбрасываемый аппаратно при возникновении прерывания.
В командах условного перехода AVR-микроконтроллеров используется только относительная адресация, а под значение смещения в слове команды отводится всего 7 битов, поэтому максимальная величина перехода составляет от –63 до +64 слов. Кроме того, имеются команды типа «проверка/пропуск», в которых производится проверка условия, результат которой влияет на выполнение следующей команды. Если условие истинно, следующая команда игнорируется. Типы и виды команд Все множество команд микроконтроллеров AVR семейства Mega можно разбить на несколько групп: • команды логических операций; • команды арифметических операций и команды сдвига; • команды операций с битами; • команды пересылки данных; • команды передачи управления; • команды управления системой. Далее коротко описана каждая группа команд. Команды логических операций (табл. 2) позволяют выполнять стандартные логические операции над байтами, такие как логическое умножение (И), логическое сложение (ИЛИ), операцию «Исключающее ИЛИ», а также вычисление обратного (дополнение до единицы) и дополнительного (дополнение до двух) кодов числа. К этой группе можно отнести также команды очистки/установки регистров и команду перестановки полубайтов. Операции производятся между регистрами общего назначения, либо между регистром и константой; результат сохраняется в РОН. Все команды из этой группы выполняются за один такт. Таблица 2. Логические команды
К группе команд арифметических операций и сдвига (табл. 3) относятся команды, позволяющие выполнять такие базовые операции, как сложение, вычитание, сдвиг (вправо и влево), инкрементирование, декрементирование, а также умножение. Все операции производятся только над регистрами общего назначения. При этом микроконтроллеры AVR позволяют легко оперировать как знаковыми, так и беззнаковыми числами, а также работать с числами, представленными в дополнительном коде. Почти все команды рассматриваемой группы выполняются за один такт. Команды умножения и команды, оперирующие 2-байтными значениями, выполняются за два такта. Таблица 3. Арифметические и сдвиговые команды
К группе команды битовых операций (табл. 4) относятся команды, выполняющие установку или сброс заданного бита РОН или РВВ. Причем для изменения битов регистра состояния SREG имеются отдельные команды (точнее говоря, эквивалентные мнемонические обозначения общих команд), так как проверка состояния битов именно этого регистра производится чаще всего. Таблица 4. Команды битовых операций
Все задействованные биты РВВ имеют свои символические имена. Определения этих имен описаны в том же включаемом файле, что и определения символических имен адресов регистров. Соответственно после включения в программу указанного файла в командах вместо числовых значений номеров битов можно будет указывать их символические имена. Следует помнить, что в командах CBR и SBR операндом является битовая маска, а не номер бита. Для получения битовой маски из номера бита следует воспользоваться ассемблерным оператором «сдвиг влево» («<<»), как показано в следующем примере: sbr rl6, (1<<SE) + (1<<SM) out MCUCR, rl6; Установить флаги SE и SM регистра MCUCR Всем командам данной группы требуется один такт для выполнения, за исключением команд установки/сброса бита РВВ, выполняемых за 2 такта. Команды пересылки данных(табл. 5)предназначены для пересылки содержимого ячеек, находящихся в адресном пространстве памяти данных. Таблица 5. Команды пересылки данных
Разделение адресного пространства на три части (РОН, РВВ, ОЗУ) предопределило разнообразие команд данной группы. Пересылка данных, выполняемая командами группы, может производиться в следующих направлениях: • РОН <=> РОН; • РОН <=> РВВ; • РОН <=> память данных. Также к данной группе можно отнести стековые команды PUSH и POP, позволяющие сохранять в стеке и восстанавливать из стека содержимое РОН. На выполнение команд данной группы требуется от одного до трех тактов в зависимости от команды. В группу команд передачи управления (табл. 6) входят команды перехода, вызова подпрограмм и возврата из них и команды типа «проверка/пропуск», пропускающие следующую за ними команду при выполнении некоторого условия. Также к этой группе относят команды сравнения, формирующие флаги регистра SREG и предназначенные, как правило, для работы совместно с командами условного перехода. Все команды условного перехода можно разбить на две подгруппы. Первая подгруппа — команды условного перехода общего назначения. В эту подгруппу входят две команды — BRBS s, k и BRBC s, k, в которых явно задается номер тестируемого флага регистра SREG. Соответственно, переход осуществляется при SREG.s = 0 (BRBC) или SREG.s = 1 (BRBS). Таблица 6. Команды передачи управления
Окончание табл. 6.
Другую подгруппу составляют 18 специализированных команд, каждая из которых выполняет переход по какому-либо конкретному условию («равно», «больше или равно», «был перенос» и т. п.). Причем одни команды используются после сравнения беззнаковых чисел, другие — после сравнения чисел со знаком. Вообще говоря, эти команды являются лишь эквивалентными мнемоническими обозначениями команд BRBS s, k и BRBC s, k с определенными значениями операнда s. Команда BREQ k («переход, если равно») имеет, например, такой же код операции, что и команда BRBS 1, k, а команда BRGE k («переход, если больше или равно для чисел со знаком») — BRBC 4, k. Команды передачи управления нарушают линейное выполнение основной программы, поэтому при каждом выполнении команды этой группы (кроме команд сравнения) нормальное функционирование конвейера нарушается. В результате на выполнение команд затрачивается больше одного такта. В группу команд управления системой входят всего 4 команды: • NOP — пустая команда; • SLEEP — перевод микроконтроллера в режим пониженного энергопотребления; • WDR — сброс сторожевого таймера; • BREAK — команда, используемая внутрисхемным отладчиком. Все команды этой группы, кроме последней, выполняются за один такт. 3. ЛАБОРАТОРНЫЙ КОМПЛЕКС «МИКРОКОНТРОЛЛЕРЫ
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|