Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Особенности системы команд




Система команд микроконтроллеров 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. Логические команды

Мнемоника Описание Операция Флаги
AND Rd, Rr «Логическое И» двух РОН Rd = Rd • Rr Z,N,V
ANDI Rd, K * «Логическое И» РОН и константы Rd = Rd • К Z,N,V
EOR Rd, Rr «Исключающее ИЛИ» двух РОН Rd = RdÅRr Z,N,V
OR Rd, Rr «Логическое ИЛИ» двух РОН Rd = Rd v Rr Z,N,V
ORI Rd, K * «Логическое ИЛИ» РОН и константы Rd = Rd v K Z,N,V
COM Rd Перевод в обратный код Rd = $FF - Rd Z,C,N,V
NEG Rd Перевод в дополнительный код Rd = $00 - Rd Z,C,N,V,H
CLR Rd Сброс всех битов РОН Rd = RdÅRd Z,N,V
SER Rd * Установка всех битов РОН Rd = $FF -
TST Rd Проверка РОН на отрицательное или нулевое значение Rd • Rd Z,N,V
SWAP Rd Обмен местами полубайтов в РОН Rd(3...0) = Rd(7...4), Rd(7...4) = Rd(3...0) -
0 ≤ d ≤ 31, 0 ≤ r ≤ 31, 0 ≤ K ≤ 255 (* в командах ANDI, ORI и SER: 16 ≤ d ≤ 31)

 

К группе команд арифметических операций и сдвига (табл. 3) относятся команды, позволяющие выполнять такие базовые операции, как сложение, вычитание, сдвиг (вправо и влево), инкрементирование, декрементирование, а также умножение. Все операции производятся только над регистрами общего назначения. При этом микроконтроллеры AVR позволяют легко оперировать как знаковыми, так и беззнаковыми числами, а также работать с числами, представленными в дополнительном коде. Почти все команды рассматриваемой группы выполняются за один такт. Команды умножения и команды, оперирующие 2-байтными значениями, выполняются за два такта.

Таблица 3. Арифметические и сдвиговые команды

Мнемоника Описание Операция Флаги
ADD Rd, Rr Сложение двух РОН Rd = Rd + Rr Z,C,N,V,H
ADC Rd, Rr Сложение двух РОН с переносом Rd = Rd + Rr + С Z,С,N,V,H
ADIW Rd, K ** Сложение регистровой пары с константой Rd+1:Rd = Rd+1:Rd + K Z,C,N,V,S
SUB Rd, Rr Вычитание двух РОН Rd = Rd - Rr Z,C,N,V,H
SUBI Rd, K * Вычитание константы из РОН Rd = Rd - К Z,C,N,V,H
SBC Rd, Rr Вычитание двух РОН с заемом Rd = Rd – Rr - C Z,C,N,V,H
SBCI Rd, K * Вычитание константы из РОН с заемом Rd = Rd – K - C Z,C,N,V,H
SBIW Rd, K ** Вычитание константы из регистровой пары Rd+1:Rd = Rd+1:Rd - K Z,C,N,V,S
DEC Rd Декрементирование РОН Rd = Rd - 1 Z,N,V
INC Rd Инкрементирование РОН Rd = Rd + 1 Z,N,V
ASR Rd Арифметический сдвиг вправо Rd(n) = Rd(n+1), n = 0..6 Z,C,N,V
LSL Rd Логический сдвиг влево Rd(n+1) = Rd(n), Rd(0) = 0 Z,C,N,V
LSR Rd Логический сдвиг вправо Rd(n) = Rd(n+l), Rd(7) = 0 Z,C,N,V
ROL Rd Сдвиг влево через перенос Rd(0) = C, Rd(n+l) = Rd(n), C = Rd(7) Z,C,N,V
ROR Rd Сдвиг вправо через перенос Rd(7) = C, Rd(n) = Rd(n+l), C = Rd(0) Z,C,N,V
MUL Rd, Rr Умножение беззнаковых чисел R1:R0 = Rd*Rr Z,C
MULS Rd, Rr * Умножение чисел со знаком R1:R0 = Rd*Rr Z,C
MULSU Rd, Rr *** Умножение беззнакового числа на число со знаком R1:R0 = Rd*Rr Z,C
FMUL Rd, Rr *** Умножение дробных беззнаковых чисел R1:R0 = (Rd*Rr) << l Z,C
FMULS Rd, Rr *** Умножение дробных чисел со знаком R1:R0 = (Rd*Rr) << l Z,C
FMULSU Rd, Rr *** Умножение дробного беззнакового числа и дробного числа со знаком R1:R0 = (Rd*Rr) << l Z,C
0 ≤ d ≤ 31, 0 ≤ r ≤ 31, 0 ≤ K ≤ 255 (* в командах SUBI, SBCI, MULS: 16 ≤ d ≤ 31, 16 ≤ r ≤ 31; ** в командах ADIW, SBIW: d = {24, 26, 28, 30}, 0 ≤ K ≤ 63; *** в командах MULSU, FMUL, FMULS, FMULSU 16 ≤ d ≤ 23, 16 ≤ r ≤ 23)

 

К группе команды битовых операций (табл. 4) относятся команды, выполняющие установку или сброс заданного бита РОН или РВВ. Причем для изменения битов регистра состояния SREG имеются отдельные команды (точнее говоря, эквивалентные мнемонические обозначения общих команд), так как проверка состояния битов именно этого регистра производится чаще всего.

Таблица 4. Команды битовых операций

Мнемоника Описание Операция Флаги
CBR Rd, K * Сброс бита(ов) РОН Rd = Rd • ($FF - K) Z, N, V
SBR Rd, K * Установка бита(ов) РОН Rd = Rd v К Z, N, V
CBI P, b Сброс бита РВВ P.b = 0 -
SBI P, b Установка бита РВВ P.b = 1 -
BCLR s Сброс флага SREG.s = 0 SREG.s
BSET s Установка флага SREG.s = 1 SREG.s
BLD Rd, b Загрузка бита РОН из флага Т (SREG) Rd.b = T -
BST Rr, b Запись бита РОН в флаг Т (SREG) T = Rr.b T
CLC Сброс флага переноса C = 0 С
SEC Установка флага переноса C = 1 С
CLN Сброс флага отрицательного числа N = 0 N
SEN Установка флага отрицательного числа N = 1 N
CLZ Сброс флага нуля Z = 0 Z
SEZ Установка флага нуля Z = 1 Z
CLI Общее запрещение прерываний I = 0 I
SEI Общее разрешение прерываний I = 1 I
CLS Сброс флага знака S = 0 S
SES Установка флага знака S = 1 S
CLV Сброс флага переполнения дополнительного кода V = 0 V
SEV Установка флага переполнения дополнительного кода V = l V
CLT Сброс флага Т T = 0 T
SET Установка флага Т T = l T
CLH Сброс флага половинного переноса H = 0 H
SEH Установка флага половинного переноса H = l H
0 ≤ d ≤ 31, 0 ≤ r ≤ 31, 0 ≤ b ≤ 7, 0 ≤ s ≤ 7, 0 ≤ K ≤ 255 (* в командах CBR, SBR: 16 ≤ d ≤ 31)

 

Все задействованные биты РВВ имеют свои символические имена. Определения этих имен описаны в том же включаемом файле, что и определения символических имен адресов регистров. Соответственно после включения в программу указанного файла в командах вместо числовых значений номеров битов можно будет указывать их символические имена.

Следует помнить, что в командах CBR и SBR операндом является битовая маска, а не номер бита. Для получения битовой маски из номера бита следует воспользоваться ассемблерным оператором «сдвиг влево» («<<»), как показано в следующем примере:

sbr rl6, (1<<SE) + (1<<SM)

out MCUCR, rl6; Установить флаги SE и SM регистра MCUCR

Всем командам данной группы требуется один такт для выполнения, за исключением команд установки/сброса бита РВВ, выполняемых за 2 такта.

Команды пересылки данных(табл. 5)предназначены для пересылки содержимого ячеек, находящихся в адресном пространстве памяти данных.

Таблица 5. Команды пересылки данных

Мнемоника Описание Операция Флаги
MOV Rd, Rr Пересылка между РОН Rd = Rr -
MOVW Rd, Rr Пересылка 2-байтных значений Rd+l:Rd = Rr+l:Rr -
LDI Rd, K * Загрузка константы в РОН Rd = K -
LD Rd, X Косвенное чтение Rd = [X] -
LD Rd, X+ Косвенное чтение с постинкрементом Rd = [X], X = X + l -
LD Rd, -X Косвенное чтение с преддекрементом X = X - l, Rd = [X] -
LD Rd, Y Косвенное чтение Rd = [Y] -
LD Rd, Y+ Косвенное чтение с постинкрементом Rd = [Y], Y = Y + l -
LD Rd, -Y Косвенное чтение с преддекрементом Y = Y - l, Rd = [Y] -
LDD Rd, Y+q Косвенное относительное чтение Rd= [Y + q] -
LD Rd, Z Косвенное чтение Rd = [Z] -
LD Rd, Z+ Косвенное чтение с постинкрементом Rd = [Z], Z = Z +l -
LD Rd, -Z Косвенное чтение с преддекрементом Z = Z - l, Rd = [Z] -
LDD Rd, Z+q Косвенное относительное чтение Rd = [Z + q] -
LDS Rd, k Непосредственное чтение из ОЗУ Rd = [k] -
ST X, Rr Косвенная запись [X] = Rr -
ST X+, Rr Косвенная запись с постинкрементом [X] = Rr, X = X + l -
ST -X, Rr Косвенная запись с преддекрементом X = X - l, [X] = Rr -
ST Y, Rr Косвенная запись [Y] = Rr -
ST Y+, Rr Косвенная запись с постинкрементом [Y] = Rr, Y = Y + l -
ST -Y, Rr Косвенная запись с преддекрементом Y = Y - l, [X] = Rr -
STD Y+q, Rr Косвенная относительная запись [Y + q] = Rr -
ST Z, Rr Косвенная запись [Z] = Rr -
ST Z+, Rr Косвенная запись с постинкрементом [Z] = Rr, Z = Z + l -
ST -Z, Rr Косвенная запись с преддекрементом Z = Z - l, [Z] = Rr -
STD Z+q, Rr Косвенная относительная запись [Z + q] = Rr -
STS k, Rr Непосредственная запись в ОЗУ [k] = Rr -
LPM Загрузка данных из памяти программ R0 = {Z} -
LPM Rd, Z Загрузка данных из памяти программ Rd = {Z} -
LPM Rd, Z+ Загрузка данных из памяти программ Rd = {Z}, Z = Z + 1 -
SPM Запись в память программ {Z} = R1:R0 -
IN Rd, P Пересылка из РВВ в РОН Rd = P -
OUT P, Rr Пересылка из РОН в РВВ P = Rr -
PUSH Rr Сохранение байта в стеке STACK = Rr -
POP Rd Извлечение байта из стека Rd = STACK -
0 ≤ d ≤ 31, 0 ≤ r ≤ 31, 0 ≤ K ≤ 255, 0 ≤ k ≤ 65535, 0 ≤ q ≤ 63, 0 ≤ P ≤ 63 (* в команде LDI: 16 ≤ d ≤ 31); [] – содержимое памяти данных; {} – содержимое памяти команд

 

Разделение адресного пространства на три части (РОН, РВВ, ОЗУ) предопределило разнообразие команд данной группы. Пересылка данных, выполняемая командами группы, может производиться в следующих направлениях:

• РОН <=> РОН;

• РОН <=> РВВ;

• РОН <=> память данных.

Также к данной группе можно отнести стековые команды PUSH и POP, позволяющие сохранять в стеке и восстанавливать из стека содержимое РОН.

На выполнение команд данной группы требуется от одного до трех тактов в зависимости от команды.

В группу команд передачи управления (табл. 6) входят команды перехода, вызова подпрограмм и возврата из них и команды типа «проверка/пропуск», пропускающие следующую за ними команду при выполнении некоторого условия. Также к этой группе относят команды сравнения, формирующие флаги регистра SREG и предназначенные, как правило, для работы совместно с командами условного перехода. Все команды условного перехода можно разбить на две подгруппы. Первая подгруппа — команды условного перехода общего назначения. В эту подгруппу входят две команды — BRBS s, k и BRBC s, k, в которых явно задается номер тестируемого флага регистра SREG. Соответственно, переход осуществляется при SREG.s = 0 (BRBC) или SREG.s = 1 (BRBS).

Таблица 6. Команды передачи управления

Мнемоника Описание Операция Флаги
RJMP k ** Относительный безусловный переход РС = РС + к + 1 -
IJMP Косвенный безусловный переход PC = Z -
JMP k *** Абсолютный переход РС = k -
RCALL k ** Относительный вызов подпрограммы STACK = PC, РС = РС + k + 1 -
ICALL Косвенный вызов подпрограммы STACK = PC, PC = Z -
CALL k *** Абсолютный вызов подпрограммы STACK = PC, РС = k -
RET Возврат из подпрограммы PC = STACK -
RETI Возврат из п/п обработки прерывания PC = STACK I
СР Rd, Rr Сравнение РОН Rd - Rr Z,N,V,C,H
СРС Rd, Rr Сравнение РОН с учетом переноса Rd – Rr - C Z,N,V,C,H
CPI Rd, K * Сравнение РОН с константой Rd - K Z,N,V,C,H
CPSE Rd, Rr Сравнение и пропуск следующей команды при равенстве Если Rd = Rr, то PC = PC + 2(3) -
SBRC Rr, b Пропуск следующей команды, если бит РОН сброшен Если Rr.b = 0, то РС = РС + 2(3) -
SBRS Rr, b Пропуск следующей команды, если бит РОН установлен Если Rr.b= 1, то РС = РС + 2(3) -
SBIC P, b Пропуск следующей команды, если бит РВВ сброшен Если P.b = 0, то РС = РС + 2(3) -
SBIS P, b Пропуск следующей команды, если бит РВВ установлен Если P.b = 1, то РС = РС + 2(3) -
BRBC s, k Переход, если флаг s регистра SREG сброшен Eсли SREG.s = 0, то РС = РС + k + 1 -

Окончание табл. 6.

Мнемоника Описание Операция Флаги
BRBS s, k Переход, если флаг s регистра SREG установлен Eсли SREG.s = l, то РС = РС + k + 1 -
BRCS k Переход по переносу Если С = 1, то PC = PC + k + 1 -
BRCC k Переход, если нет переноса Если С = 0, то PC = PC + k + 1 -
BREQ k Переход по «равно» Если Z = 1, то РС = РС + k + 1 -
BRNE k Переход по «не равно» Если Z = 0, то РС = РС + k + 1 -
BRSH k Переход по «больше или равно» Если С = 0, то PC = PC + k + 1 -
BRLO k Переход по «меньше» Если С =1, то PC = PC + k + 1 -
BRMI k Переход по «отрицательное значение» Если N = 1, то РС = РС + k + 1 -
BRPL k Переход по «положительное значение» Если N = 0, то РС = РС + k + 1 -
BRGE k Переход по «больше или равно» (числа со знаком) Если (NÅV) = 0, то PC = PC + k + 1 -
BRLT k Переход по «меньше нуля» (числа со знаком) Ecли (NÅV) = l, то РС = РС + k + 1 -
BRHS k Переход по половинному переносу Если Н = 1, то РС = РС + k + 1 -
BRHC k Переход, если нет половинного переноса Если Н = 0, то РС = РС + k + 1 -
BRTS k Переход, если флаг Т установлен Если Т = 1, то PC = PC + k + 1 -
BRTC k Переход, если флаг Т сброшен Если Т = 0, то PC = PC + k + 1 -
BRVS k Переход по переполнению дополнительного кода Если V = 1, то PC = PC + k + 1 -
BRVC k Переход, если нет переполнения дополнительного кода Если V = 0, то PC = PC + k + 1 -
BRID k Переход, если прерывания запрещены Если I = 0, то PC = PC + k + 1 -
BRIE k Переход, если прерывания разрешены Если I = 1, то PC = PC + k + 1 -
0 ≤ d ≤ 31, 0 ≤ r ≤ 31, 0 ≤ b ≤ 7, 0 ≤ s ≤ 7, 0 ≤ K ≤ 255, -64 ≤ k ≤ 63, 0 ≤ P ≤ 31 (* в команде CPI: 16 ≤ d ≤ 31; ** в командах RJMP, RCALL: -2048 ≤ k ≤ +2047; *** в командах JMP, CALL: 0 ≤ k ≤ 4M)

 

Другую подгруппу составляют 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...