Окончание табл. 2
1 |
2 |
|
3 |
|
|
|
4 |
|
|
|
5 |
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TST |
Rd |
Проверка |
на |
ноль |
либо |
Rd = Rd · Rd |
Z,C,N,V |
1 |
|||||
отрицательность |
|
|
|
,S |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
CLR |
Rd |
Очистить регистр |
|
|
|
Rd = 0 |
|
Z,C,N,V |
1 |
||||
|
|
|
|
|
|
|
|
|
,S |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
SER |
Rd |
Установить регистр |
|
|
|
Rd = $FF |
|
None |
1 |
||||
|
|
|
|
|
|
|
|
|
|
|
|||
ADIW |
Rdl,K6 |
Сложить константу и слово |
|
Rdh:Rdl |
= |
Z,C,N,V |
2 |
||||||
|
|
|
|
|
|
|
Rdh:Rdl + K6 |
,S |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
SBIW |
Rdl,K6 |
Вычесть константу из слова |
|
Rdh:Rdl |
= |
Z,C,N,V |
2 |
||||||
|
|
|
|
|
|
|
Rdh:Rdl - K 6 |
,S |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||||
MUL |
Rd,Rr |
Умножение чисел без знака |
|
R1:R0 = Rd * |
Z,C |
2 |
|||||||
|
|
|
|
|
|
|
Rr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
MULS |
Rd,Rr |
Умножение чисел со знаком |
|
R1:R0 = Rd * |
Z,C |
2 |
|||||||
|
|
|
|
|
|
|
Rr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
MULSU |
Rd,Rr |
Умножение числа со знаком с |
|
R1:R0 = Rd * |
Z,C |
2 |
|||||||
числом без знака |
|
|
|
Rr |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FMUL |
Rd,Rr |
Умножение дробных чисел без знака |
R1:R0 = (Rd * |
Z,C |
2 |
||||||||
Rr) << 1 |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FMULS |
Rd,Rr |
Умножение дробных чисел со знаком |
R1:R0 = |
(Rd |
Z,C |
2 |
|||||||
*Rr) << 1 |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||
FMULSU |
Rd,Rr |
Умножение |
дробного |
числа |
со |
R1:R0 = (Rd * |
Z,C |
2 |
|||||
знаком с числом без знака |
|
|
Rr) << 1 |
|
|||||||||
|
|
Инструкции ветвления |
|
|
|
|
Таблица 3 |
||||||
|
|
|
|
|
|
|
|
|
|||||
Мнемоника |
Опе- |
Описание |
|
|
Операция |
|
|
Флаги |
Циклы |
||||
ранды |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
3 |
|
|
|
|
4 |
|
|
|
5 |
|
6 |
|
|
|
|
|
|
|
|
|
|||||
RJMP |
k |
Относительный переход |
PC = PC + k +1 |
|
|
|
Нет |
|
2 |
||||
|
|
|
|
|
|
|
|
|
|||||
IJMP |
Нет |
Косвенный переход на (Z) |
PC = Z |
|
|
|
|
Нет |
|
2 |
|||
|
|
|
|
|
|
|
|||||||
EIJMP |
Нет |
Расширенный |
косвенный |
STACK = PC+1, PC(15:0) |
|
Нет |
|
2 |
|||||
переход на (Z) |
|
|
= Z, PC(21:16) = EIND |
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
JMP |
k |
Переход |
|
|
PC = k |
|
|
|
|
Нет |
|
3 |
|
|
|
|
|
|
|
|
|||||||
RCALL |
k |
Относительный |
вызов |
STACK = PC+1, PC = PC + |
|
Нет |
|
3/4* |
|||||
подпрограммы |
|
|
k + 1 |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||||||
ICALL |
Нет |
Косвенный вызов (Z) |
STACK = PC+1, PC = Z |
|
|
Нет |
|
3/4* |
|||||
|
|
|
|
|
|
|
|||||||
EICALL |
Нет |
Расширенный |
косвенный |
STACK = PC+1, PC(15:0) |
|
Нет |
|
4* |
|||||
вызов (Z) |
|
|
= Z, PC(21:16) =EIND |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
||||||
CALL |
k |
Вызов подпрограммы |
STACK = PC+2, PC = k |
|
|
Нет |
|
4/5* |
|||||
|
|
|
|
|
|
|
|
|
|||||
RET |
Нет |
Возврат из подпрограммы |
PC = STACK |
|
|
|
Нет |
|
4/5* |
||||
|
|
|
|
|
|
|
|
|
|||||
RETI |
Нет |
Возврат из прерывания |
PC = STACK |
|
|
|
I |
|
4/5* |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10
Продолжение табл.3
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
CPSE |
Rd,Rr |
Сравнить, пропустить, если |
if (Rd ==Rr) PC = PC 2 |
Нет |
1/2/3 |
равны |
or 3 |
||||
|
|
|
|
|
|
CP |
Rd,Rr |
Сравнить |
Rd -Rr |
Z,C,N,V,H,S |
1 |
|
|
|
|
|
|
CPC |
Rd,Rr |
Сравнить с переносом |
Rd - Rr - C |
Z,C,N,V,H,S |
1 |
|
|
|
|
|
|
CPI |
Rd,K8 |
Сравнить с константой |
Rd - K |
Z,C,N,V,H,S |
1 |
|
|
|
|
|
|
SBRC |
Rr,b |
Пропустить, если бит в |
if(Rr(b)==0) PC = PC + 2 |
Нет |
1/2/3 |
регистре очищен |
or 3 |
||||
|
|
|
|
|
|
SBRS |
Rr,b |
Пропустить, если бит в |
if(Rr(b)==1) PC = PC + 2 |
Нет |
1/2/3 |
регистре установлен |
or 3 |
||||
|
|
|
|
|
|
SBIC |
P,b |
Пропустить, если бит в порту |
if(I/O(P,b)==0) PC = PC |
Нет |
1/2/3 |
|
|
очищен |
+ 2 or 3 |
|
|
|
|
|
|
|
|
SBIS |
P,b |
Пропустить если бит в порту |
if(I/O(P,b)==1) PC = PC |
Нет |
1/2/3 |
установлен |
+ 2 or 3 |
||||
|
|
|
|
|
|
BRBC |
s,k |
Перейти, если флаг в SREG |
if(SREG(s)==0) PC = PC |
Нет |
1/2 |
очищен |
+ k + 1 |
||||
|
|
|
|
|
|
BRBS |
s,k |
Перейти, если флаг в SREG |
if(SREG(s)==1) PC = PC |
Нет |
1/2 |
установлен |
+ k + 1 |
||||
|
|
|
|
|
|
BREQ |
k |
Перейти, если равно |
if(Z==1) PC = PC + k + 1 |
Нет |
1/2 |
|
|
|
|
|
|
BRNE |
k |
Перейти, если не равно |
if(Z==0) PC = PC + k + 1 |
Нет |
1/2 |
|
|
|
|
|
|
BRCS |
k |
Перейти, если перенос |
if(C==1) PC = PC + k + 1 |
Нет |
1/2 |
установлен |
|||||
|
|
|
|
|
|
BRCC |
k |
Перейти, если перенос |
if(C==0) PC = PC + k + 1 |
Нет |
1/2 |
очищен |
|||||
|
|
|
|
|
|
BRSH |
k |
Перейти, если равно или |
if(C==0) PC = PC + k + 1 |
Нет |
1/2 |
больше |
|||||
|
|
|
|
|
|
BRLO |
k |
Перейти, если меньше |
if(C==1) PC = PC + k + 1 |
Нет |
1/2 |
|
|
|
|
|
|
BRMI |
k |
Перейти, если минус |
if(N==1) PC = PC + k + 1 |
Нет |
1/2 |
|
|
|
|
|
|
BRPL |
k |
Перейти, если плюс |
if(N==0) PC = PC + k + 1 |
Нет |
1/2 |
|
|
|
|
|
|
BRGE |
k |
Перейти, если больше или |
if(S==0) PC = PC + k + 1 |
Нет |
1/2 |
равно (со знаком) |
|||||
|
|
|
|
|
|
BRLT |
k |
Перейти, если меньше (со |
if(S==1) PC = PC + k + 1 |
Нет |
1/2 |
знаком) |
|||||
|
|
|
|
|
|
|
|
Перейти, если флаг |
|
|
|
BRHS |
k |
внутреннего переноса |
if(H==1) PC = PC + k + 1 |
Нет |
1/2 |
|
|
установлен |
|
|
|
|
|
|
|
|
|
|
|
Перейти, если флаг |
|
|
|
BRHC |
k |
внутреннего переноса |
if(H==0) PC = PC + k + 1 |
Нет |
1/2 |
|
|
очищен |
|
|
|
|
|
|
|
|
|
BRTS |
k |
Перейти, если флаг T |
if(T==1) PC = PC + k + 1 |
Нет |
1/2 |
установлен |
|||||
|
|
|
|
|
|
11
Окончание табл. 3
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
BRTC |
k |
Перейти, если флаг T |
if(T==0) PC = PC + k + 1 |
Нет |
1/2 |
очищен |
|||||
|
|
|
|
|
|
BRVS |
k |
Перейти, если флаг |
if(V==1) PC = PC + k + 1 |
Нет |
1/2 |
переполнения установлен |
|||||
|
|
|
|
|
|
BRVC |
k |
Перейти, если флаг |
if(V==0) PC = PC + k + 1 |
Нет |
1/2 |
|
|
переполнения очищен |
|
|
|
|
|
|
|
|
|
BRIE |
k |
Перейти, если |
if(I==1) PC = PC + k + 1 |
Нет |
1/2 |
прерывания разрешены |
|||||
|
|
|
|
|
|
BRID |
k |
Перейти, если |
if(I==0) PC = PC + k + 1 |
Нет |
1/2 |
прерывания запрещены |
|||||
|
|
|
|
|
|
Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных и не корректно при работе с внешним оперативным запоминающим устройством (ОЗУ). Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI необходимо добавить три цикла плюс по два цикла для каждого ожидания при использовании МК с памятью программ менее 128 Kб. Для МК с памятью программ более 128 Kб добавьте пять циклов плюс по три цикла на каждое ожидание.
|
|
Инструкции передачи данных |
Таблица 4 |
|||
|
|
|
|
|||
Мнемо- |
Опе- |
Описание |
Операция |
Флаги |
Циклы |
|
ника |
ранды |
|||||
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
|
|
MOV |
Rd,Rr |
Скопировать регистр |
Rd = Rr |
Нет |
1 |
|
|
|
|
|
|
|
|
MOVW |
Rd,Rr |
Скопировать пару регистров |
Rd+1:Rd = |
Нет |
1 |
|
Rr+1:Rr, r,d - четн. |
||||||
|
|
|
|
|
|
|
LDI |
Rd,K8 |
Загрузить константу |
Rd = K8 |
Нет |
1 |
|
|
|
|
|
|
|
|
LDS |
Rd,k |
Прямая загрузка |
Rd = (k) |
Нет |
2* |
|
|
|
|
|
|
|
|
LD |
Rd,X |
Косвенная загрузка |
Rd = (X) |
Нет |
2* |
|
|
|
|
|
|
|
|
LD |
Rd,X+ |
Косвенная загрузка с |
Rd = (X), X=X+1 |
Нет |
2* |
|
постинкрементом |
||||||
|
|
|
|
|
|
|
LD |
Rd,-X |
Косвенная загрузка с |
X=X-1, Rd = (X) |
Нет |
2* |
|
предекрементом |
||||||
|
|
|
|
|
|
|
LD |
Rd,Y |
Косвенная загрузка |
Rd = (Y) |
Нет |
2* |
|
|
|
|
|
|
|
|
LD |
Rd,Y+ |
Косвенная загрузка с |
Rd = (Y), Y=Y+1 |
Нет |
2* |
|
постинкрементом |
||||||
|
|
|
|
|
|
|
LD |
Rd,-Y |
Косвенная загрузка с |
Y=Y-1, Rd = (Y) |
Нет |
2* |
|
предекрементом |
||||||
|
|
|
|
|
|
|
LDD |
Rd,Y+q |
Косвенная загрузка с замещением |
Rd = (Y+q) |
Нет |
2* |
|
|
|
|
|
|
|
|
12
Окончание табл. 4
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
Нет 2* |
||
LD |
Rd,Z |
Косвенная загрузка |
Rd = (Z) |
|||
|
|
|
|
Нет 2* |
||
LD |
Rd,Z+ |
Косвенная загрузка с постинкрементом |
Rd = (Z), Z=Z+1 |
|||
|
|
|
|
Нет 2* |
||
LD |
Rd,-Z |
Косвенная загрузка с предекрементом |
Z=Z-1, Rd = (Z) |
|||
|
|
|
Нет 2* |
|||
LDD |
Rd,Z+q |
Косвенная загрузка с замещением |
Rd = (Z+q) |
|||
|
|
|
|
Нет 2* |
||
STS |
k,Rr |
Прямое сохранение |
(k) = Rr |
|||
|
|
|
|
Нет 2* |
||
ST |
X,Rr |
Косвенное сохранение |
(X) = Rr |
|||
|
|
|
|
Нет 2* |
||
ST |
X+,Rr |
Косвенное сохранение с постинкрементом |
(X) = Rr, X=X+1 |
|||
|
|
|
|
Нет 2* |
||
ST |
-X,Rr |
Косвенное сохранение с предекрементом |
X=X-1, (X)=Rr |
|||
|
|
|
|
Нет 2* |
||
ST |
Y,Rr |
Косвенное сохранение |
(Y) = Rr |
|||
|
|
|
|
Нет |
2 |
|
ST |
Y+,Rr |
Косвенное сохранение с постинкрементом |
(Y) = Rr, Y=Y+1 |
|||
|
|
|
|
Нет |
2 |
|
ST |
-Y,Rr |
Косвенное сохранение с предекрементом |
Y=Y-1, (Y) = Rr |
|||
|
|
|
Нет |
2 |
||
ST |
Y+q,Rr |
Косвенное сохранение с замещением |
(Y+q) = Rr |
|||
|
|
|
|
Нет |
2 |
|
ST |
Z,Rr |
Косвенное сохранение |
(Z) = Rr |
|||
|
|
|
|
Нет |
2 |
|
ST |
Z+,Rr |
Косвенное сохранение с постинкрементом |
(Z) = Rr, Z=Z+1 |
|||
|
|
|
|
Нет |
2 |
|
ST |
-Z,Rr |
Косвенное сохранение с предекрементом |
Z=Z-1, (Z) = Rr |
|||
|
|
|
|
Нет |
2 |
|
ST |
Z+q,Rr |
Косвенное сохранение с замещением |
(Z+q) = Rr |
|||
|
|
|
|
Нет |
3 |
|
LPM |
Нет |
Загрузка из программной памяти |
R0 = (Z) |
|||
|
|
|
|
Нет |
3 |
|
LPM |
Rd,Z |
Загрузка из программной памяти |
Rd = (Z) |
|||
|
|
|
|
|
|
|
LPM |
Rd,Z+ |
Загрузка из программной памяти с |
Rd = (Z), Z=Z+1 |
Нет |
3 |
|
постинкрементом |
||||||
|
|
|
|
|
|
|
ELPM |
Нет |
Расширенная загрузка из программной |
R0 = (RAMPZ:Z) |
Нет |
3 |
|
памяти |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
ELPM |
Rd,Z |
Расширенная загрузка из программной |
Rd = (RAMPZ:Z) |
Нет |
3 |
|
памяти |
||||||
|
|
|
|
|
|
|
ELPM |
Rd,Z+ |
Расширенная загрузка из программной |
Rd = (RAMPZ:Z), Z |
Нет |
3 |
|
памяти с постинкрементом |
= Z+1 |
|||||
|
|
|
|
Нет |
- |
|
SPM |
Нет |
Сохранение в программной памяти |
(Z) = R1:R0 |
|||
|
|
|
|
|
|
|
ESPM |
Нет |
Расширенное сохранение в программной |
(RAMPZ:Z) = |
Нет |
- |
|
памяти |
R1:R0 |
|||||
|
|
|
|
|||
|
|
|
|
Нет |
1 |
|
IN |
Rd,P |
Чтение порта |
Rd = P |
|||
|
|
|
|
Нет |
1 |
|
OUT |
P,Rr |
Запись в порт |
P = Rr |
|||
|
|
|
Нет |
2 |
||
PUSH |
Rr |
Занесение регистра в стек |
STACK = Rr |
|||
|
|
|
|
Нет |
2 |
|
POP |
Rd |
Извлечение регистра из стека |
Rd = STACK |
|||
|
|
|
|
|
|
|
Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP
13
необходимо добавить один цикл плюс по одному циклу для каждого ожидания.
Таблица 5
Инструкции работы с битами
Мнемо- |
Опе- |
Описание |
Операция |
Флаги |
Цик- |
|
ника |
ранды |
лы |
||||
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
|
|
LSL |
Rd |
Логический сдвиг влево |
Rd(n+1)=Rd(n), |
Z,C,N, |
1 |
|
Rd(0)=0, C=Rd(7) |
V,H,S |
|||||
|
|
|
|
|||
|
|
|
|
|
|
|
LSR |
Rd |
Логический сдвиг вправо |
Rd(n)=Rd(n+1), |
Z,C,N, |
1 |
|
Rd(7)=0, C=Rd(0) |
V,S |
|||||
|
|
|
|
|||
|
|
|
|
|
|
|
ROL |
Rd |
Циклический сдвиг влево через |
Rd(0)=C, |
Z,C,N, |
1 |
|
флаг переноса C |
Rd(n+1)=Rd(n), |
V,H,S |
||||
|
|
C=Rd(7) |
|
|||
|
|
|
|
|
||
|
|
|
|
|
|
|
ROR |
Rd |
Циклический сдвиг вправо |
Rd(7)=C, Rd(n) = |
Z,C,N, |
1 |
|
через C |
Rd(n+1), C=Rd(0) |
V,S |
||||
|
|
|
||||
|
|
|
|
|
|
|
ASR |
Rd |
Арифметический сдвиг вправо |
Rd(n)=Rd(n+1), |
Z,C,N, |
1 |
|
n=0,...,6 |
V,S |
|||||
|
|
|
|
|
|
|
SWAP |
Rd |
Перестановка половин байта |
Rd(3...0) = Rd(7...4), |
Нет |
1 |
|
|
|
|
Rd(7...4) = Rd(3...0) |
|
|
|
|
|
|
|
|
|
|
BSET |
s |
Установка флага |
SREG(s) = 1 |
SREG |
1 |
|
(s) |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
BCLR |
s |
Очистка флага |
SREG(s) = 0 |
SREG |
1 |
|
(s) |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
SBI |
P,b |
Установить бит в порту |
I/O(P,b) = 1 |
Нет |
2 |
|
|
|
|
|
|
|
|
CBI |
P,b |
Очистить бит в порту |
I/O(P,b) = 0 |
Нет |
2 |
|
|
|
|
|
|
|
|
BST |
Rr,b |
Сохранить бит из регистра в T |
T = Rr(b) |
T |
1 |
|
|
|
|
|
|
|
|
BLD |
Rd,b |
Загрузить бит из T в регистр |
Rd(b) = T |
Нет |
1 |
|
|
|
|
|
|
|
|
SEC |
Нет |
Установить флаг переноса |
C =1 |
C |
1 |
|
|
|
|
|
|
|
|
CLC |
Нет |
Очистить флаг переноса |
C = 0 |
C |
1 |
|
|
|
|
|
|
|
|
SEN |
Нет |
Установить флаг |
N = 1 |
N |
1 |
|
отрицательного числа |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
CLN |
Нет |
Очистить флаг отрицательного |
N = 0 |
N |
1 |
|
числа |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
SEZ |
Нет |
Установить флаг нуля |
Z = 1 |
Z |
1 |
|
|
|
|
|
|
|
|
CLZ |
Нет |
Очистить флаг нуля |
Z = 0 |
Z |
1 |
|
|
|
|
|
|
|
|
SEI |
Нет |
Установить флаг прерываний |
I = 1 |
I |
1 |
|
|
|
|
|
|
|
|
CLI |
Нет |
Очистить флаг прерываний |
I = 0 |
I |
1 |
|
|
|
|
|
|
|
|
SES |
Нет |
Установить флаг числа со |
S = 1 |
S |
1 |
|
знаком |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
CLN |
Нет |
Очистить флаг числа со знаком |
S = 0 |
S |
1 |
|
|
|
|
|
|
|
|
SEV |
Нет |
Установить флаг переполнения |
V = 1 |
V |
1 |
|
|
|
|
|
|
|
14