Материал: 1755

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Окончание табл. 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