Лекция №7. Система команд изучаемого микроконтроллера.
Любая команда обязательно содержит код команды (мнемоника), но не всегда – операнды. В графе «Описание» находится краткое пояснения принципа действия команды. Для более доступного понятия алгоритма выполнения команды введена дополнительная графа «Действие». При выполнении команды могут изменяться значения флагов в регистре SREG. Перечень изменяемых командой флагов приведен в графе «Флаги». В графе «Цкл» указано количество тактов, за которые команда успевает выполниться.
Rd – содержимое регистра общего назначения – приемника данных
Rr - содержимое регистра общего назначения – источника данных
k – адрес ячейки памяти (16-ти битный). Иногда можно заменить меткой.
K – константа (8-и битные данные)
Загрузить регистр непосредственно – означает использование в команде косвенно-регистрового режима адресации.
Мнемоника | Операнды | Описание | Действие | Флаги | Цкл |
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ | |||||
ADD | Rd,Rr | Сложить два регистра | Rd<Rd+Rr | Z,C,N,V,H | |
ADC | Rd,Rr | Сложить с переносом | Rd<Rd+Rr+C | Z,C,N,V,H | |
ADIW | Rdl,K | Сложить слово с конст | Rdh,l<Rdh,l+K | Z,C,N,V,S | |
SUB | Rd,Rr | Вычесть два регистра | Rd<Rd-Rr | Z,C,N,V,H | |
SUBI | Rd,K | Вычесть константу | Rd<Rd-K | Z,C,N,V,H | |
SBIW | Rdl,K | Вычесть слово с конст | Rdh,l<Rdh,l-K | Z,C,N,V,S | |
SBC | Rd,Rr | Вычесть с переносом | Rd<Rd-Rr-C | Z,C,N,V,H | |
SBCI | Rd,K | Вычесть с переносом | Rd<Rd-K-C | Z,C,N,V,H | |
AND | Rd,Rr | Логическое И | Rd<Rd AND Rr | Z,N,V | |
ANDI | Rd,K | Логическое И | Rd<Rd AND K | Z,N,V | |
OR | Rd,Rr | Логическое ИЛИ | Rd<Rd OR Rr | Z,N,V | |
ORI | Rd,K | Логическое ИЛИ | Rd<Rd OR K | Z,N,V | |
EOR | Rd,Rr | Исключающее ИЛИ | Rd<Rd XOR Rr | Z,N,V | |
COM | Rd | Дополнение до 1 (инверсия) | Rd<$FF-Rd | Z,C,N,V | |
NEG | Rd | Дополнение до 2 (доп.код) | Rd<$00-Rd | Z,C,N,V,H | |
INC | Rd | Увеличить на 1 | Rd<Rd+1 | Z,N,V | |
DEC | Rd | Уменьшить на 1 | Rd<Rd-1 | Z,N,V | |
CLR | Rd | Очистить регистр | Rd<Rd XOR Rd | Z,N,V | |
SER | Rd | Установить регистр | Rd<$FF | None | |
КОМАНДЫ ВЕТВЛЕНИЯ | |||||
RJMP | k | Относительный переход | PC<PC+k+1 | None | |
RCALL | k | Относ. вызов подпрогр. | PC<PC+k+1 | None | |
RET | Выход из подпрограммы | PC<STACK | None | ||
CP | Rd,Rr | Сравнить | Rd-Rr | Z,N,V,C,H | |
CPC | Rd,Rr | Сравнить с переносом | Rd-Rr-C | Z,N,V,C,H | |
CPI | Rd,K | Сравнить с константой | Rd-K | Z,N,V,C,H | |
BREQ | k | Переход если равно | if(Z=1) PC<PC+k+1 | None | 1/2 |
BRNE | k | Переход если неравно | if(Z=0) PC<PC+k+1 | None | 1/2 |
BRCS | k | Переход если установл. перенос | if(C=1) PC<PC+k+1 | None | 1/2 |
BRCC | k | Переход если сброшен перенос | if(C=0) PC<PC+k+1 | None | 1/2 |
BRSH | k | Переход если равно или больше | if(C=0) PC<PC+k+1 | None | 1/2 |
BRLO | k | Переход если меньше | if(C=1) PC<PC+k+1 | None | 1/2 |
КОМАНДЫ ПЕРЕСЫЛКИ | |||||
MOV | Rd,Rr | Пересылка между рег. | Rd<Rr | None | |
LDI | Rd,K | Загрузить константу | Rd<K | None | |
LD | Rd,X | Загрузить регистр непосредственно | Rd<(X) | None | |
LD | Rd,X+ | Загрузить регистр непоср. c пост инкрем. | Rd<(X),X<X+1 | None | |
LD | Rd,-X | Загрузить регистр непоср. с предв. декрем. | X<X-1,Rd<(X) | None | |
LD | Rd,Y | Загрузить регистр непосредственно | Rd<(Y) | None | |
LD | Rd,Y+ | Загрузить регистр непоср. c пост инкрем. | Rd<(Y),Y<Y+1 | None | |
LD | Rd,-Y | Загрузить регистр непоср. с предв. декрем. | Y<Y-1,Rd<(Y) | None | |
LD | Rd,Z | Загрузить регистр непосредственно | Rd<(Z) | None | |
LD | Rd,Z+ | Загрузить регистр непоср. c пост инкрем. | Rd<(Z),Z<Z+1 | None | |
LD | Rd,-Z | Загрузить регистр непоср. с предв. декрем. | Z<Z-1,Rd<(Z) | None | |
LDS | Rd,k | Загрузить из ОЗУ | Rd<(k) | None | |
ST | X,Rr | Записать регистр непосредственно | (X)<Rr | None | |
ST | X+,Rr | Записать регистр непоср. c пост инкр. | (X)<Rr,X<X+1 | None | |
ST | -X,Rr | Записать регистр непоср. c пред. декрем. | X<X-1,(X)<Rr | None | |
ST | Y,Rr | Записать регистр непосредственно | (Y)<Rr | None | |
ST | Y+,Rr | Записать регистр непоср. c пост инкр. | (Y)<Rr,Y<Y+1 | None | |
ST | -Y,Rr | Записать регистр непоср. c пред. декрем. | Y<Y-1,(Y)<Rr | None | |
ST | Z,Rr | Записать регистр непосредственно | (Z)<Rr | None | |
ST | Z+,Rr | Записать регистр непоср. c пост инкр. | (Z)<Rr,Z<Z+1 | None | |
ST | -Z,Rr | Записать регистр непоср. c пред. декрем. | Z<Z-1,(Z)<Rr | None | |
STS | k,Rr | Записать в ОЗУ | (k)<Rr | None | |
КОМАНДЫ РАБОТЫ С БИТАМИ | |||||
LSL | Rd | Логический сдвиг влево | Rd(n+1)<Rd(n),Rd(0)<0 | Z,C,N,V | |
LSR | Rd | Логич. сдвиг вправо | Rd(n)<Rd(n+1),Rd(7)<0 | Z,C,N,V | |
ROL | Rd | сдвиг влево через C | Rd(0)<C, Rd(n+1)<Rd(n),C<Rd(7) | Z,C,N,V | |
ROR | Rd | сдвиг вправо через C | Rd(7)<C, Rd(n)<Rd(n+1),C<Rd(0) | Z,C,N,V | |
ASR | Rd | Арифметический сдвиг вправо | Rd(n)<Rd(n+1),n=0..6 | Z,C,N,V | |
SWAP | Rd | Обмен тетрад (нибблов) | Rd(3-0)<Rd(7-4)Rd(7-4)<Rd(3-0) | None | |
SEC | Установить перенос | C<1 | C | ||
CLC | Сбросить перенос | C<0 | C | ||
SEZ | Установить флаг Z | Z<1 | Z | ||
CLZ | Сбросить флаг Z | Z<0 | Z | ||
NOP | Нет операции | None |
Дата добавления: 2016-12-27; просмотров: 2041;