КАТЕГОРИИ:
Архитектура-(3434) Астрономия-(809) Биология-(7483) Биотехнологии-(1457) Военное дело-(14632) Высокие технологии-(1363) География-(913) Геология-(1438) Государство-(451) Демография-(1065) Дом-(47672) Журналистика и СМИ-(912) Изобретательство-(14524) Иностранные языки-(4268) Информатика-(17799) Искусство-(1338) История-(13644) Компьютеры-(11121) Косметика-(55) Кулинария-(373) Культура-(8427) Лингвистика-(374) Литература-(1642) Маркетинг-(23702) Математика-(16968) Машиностроение-(1700) Медицина-(12668) Менеджмент-(24684) Механика-(15423) Науковедение-(506) Образование-(11852) Охрана труда-(3308) Педагогика-(5571) Полиграфия-(1312) Политика-(7869) Право-(5454) Приборостроение-(1369) Программирование-(2801) Производство-(97182) Промышленность-(8706) Психология-(18388) Религия-(3217) Связь-(10668) Сельское хозяйство-(299) Социология-(6455) Спорт-(42831) Строительство-(4793) Торговля-(5050) Транспорт-(2929) Туризм-(1568) Физика-(3942) Философия-(17015) Финансы-(26596) Химия-(22929) Экология-(12095) Экономика-(9961) Электроника-(8441) Электротехника-(4623) Энергетика-(12629) Юриспруденция-(1492) Ядерная техника-(1748)
Система команд микроконтроллеров семейства AVR. Таблица А.1. Арифметические команды Мнемо-ника Операн- ды Описание Операция Флаги К-во циклов ADD Rd
Таблица А.1. Арифметические команды
Мнемо-ника
Операн-
ды
Описание
Операция
Флаги
К-во циклов
ADD
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Сложить без переноса
Rd Rd + Rr
Z, C, N, V, H
ADC
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Сложить с переносом
Rd Rd + Rr + С
Z, C, N, V, H
ADIW
Rd, K
dE{24,26,
28,30}
0≤ K ≤63
Сложить непосредст
венное значение со сло-
вом
Rdh:Rdl
Rdh:Rdl+ К
Z, C, N, V
SUB
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Вычесть без заема
Rd Rd – Rr
Z, C, N, V, H
SUBI
Rd, К
16≤ d ≤31
0≤K≤255
Вычесть непосредст-
венное значение
Rd Rd – К
Z, C, N, V, H
SBC
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Вычесть с заемом
Rd Rd – Rr – C
Z, C, N, V, H
SBCI
Rd, К
6≤ d ≤32
0≤K≤255
Вычесть непосредст-
венное значение с за-
мом
Rd Rd – K – C
Z, C, N, V, H
SBIW
Rd, К dE{24,26,28,30}
0≤К≤6З
Вычесть непосредственное значение из слова
Rdh:Rdl
Rdh:Rdl-K
Z, C, N, V
INC
Rd
0≤d≤31
Инкрементировать
Rd ßRd + 1
Z, N,V
DEC
Rd
0≤ d ≤31
Декрементировать
Rd ß Rd – 1
Z, N,V
NEG
Rd
0≤ d ≤31
Вычисление дополнительного кода
Rd ß $00 – Rd
Z, C, N, V, H
Таблица А.2. Логические команды
Мнемоника
Операн-
ды
Описание
Операция
Флаги
Кол-во цик-лов
AND
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Выполнить логическое
И между регистрами
Rd ß Rd ∙ Rr
Z, N, V
ANDI
Rd, К
16< d <31
0< k ≤255
Выполнить логическое
И между регистром и
константой
Rd ß Rd ∙ К
Z, N, V
OR
Rd, Rr
0≤ d ≥31
0≤ r ≤31
Выполнить логическое
ИЛИ регистрами
Rd ß Rd v Rr
Z, N, V
ORI
Rd, К
16≤ d ≤31
0≤K≤255
Выполнить логическое
ИЛИ между регистром
и константой
Rd ß Rd v К
Z, N, V
EOR
Rd, Rr
0≤ d ≤31
0≤ г ≤31
Выполнить исключающее ИЛИ
Rd ß Rd Å Rr
Z, N, V
СОМ
Rd
0≤ d ≤31
Выполнить инверсию
(НЕ)
Rd ß $FF – Rd
Z, C, N, V
Сравнение
CP
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Сравнить содержимое регистров
Rd – Rr
Z, C, N, V, H
CPC
Rd, Rr
0≤ d ≤31
0≤r ≤31
Сравнить содержимое
регистров с учетом переноса
Rd – Rr – C
Z, C, N, V, H
CPI
Rd, К
16≤ d ≤31
0≤K≤255
Сравнить содержимое регистра с константой
Rd – K
Z, C, N, V, H
TST
Rd
0≤ r ≤31
Проверить на ноль или минус
Rd ß Rd ∙ Rd
Z, N, V
Таблица А.3. Команды операций с битами
Мнемоника
Операн-
ды
Описание
Операция
Флаги
Кол-во циклов
LSL
Rd
0≤ d ≤31
Логически сдвинуть влево
Rd (n+1)ß Rd(n),
Rd(0)ß 0, Cß Rd(7)
Z,C,N,V,H
LSR
Rd
0≤ d ≤31
Логически сдвинуть вправо
Rd(n)ß Rd (n+1),
Rd(7) ß0, Cß Rd(0)
Z,C,N,V
ROL
Rd
0≤ d ≤31
Сдвинуть влево через перенос
Rd(0) ß C,
Rd(n+1)ß Rd(n),
C ß Rd(7)
Z,C,N,V,H
ROR
Rd
0≤ d ≤31
Сдвинуть вправо через перенос
Rd(7) ß C,
Rd(n)ß Rd(n+1),
C ß Rd(0)
Z,C,N,V
ASR
Rd
0≤ d ≤31
Арифметически сдвинуть вправо
Rd(n)ß Rd(n+1),
Rd(0)ß C, n = 0...6
Z,C,N,V
SWAP
Rd
0≤ d ≤31
Поменять тетрады местами
Rd(3...0) n Rd(7...4)
Нет
BSET
s
0≤ s ≤7
Установить флаг в
регистре статуса
SREG(s) ß 1
SREG(s)
BCLR
s
0≤ s ≤7
Очистить флаг в
регистре статуса
SREG(s) ß 0
SREG(s)
SBI
P, b
0≤ P ≤31
0≤ b ≤7
Установить бит в регистр I/O
P,b ß 1
Нет
CBI
P, b
0≤ P ≤31
0≤ b ≤7
Очистить бит в регистре I/O
P,b ß 0
Нет
SBR
Rd, К
16≤ d ≤31
0≤K≤255
Установить только нужные биты в регистре
Rd ß Rd v К
Z, N,V
CBR
Rd, К 16≤ d ≤31 0 ≤K≤255
Очистить только нужные биты в регистре
Rd ß Rd ∙ ($FF – К)
Z, N, V
CLR
Rd
0≤ d ≤31
Очистить регистр
Rd ß Rd Å Rd
Z, N, V
SER
Rd
16≤ d ≤31
Установить все биты регистра
Rd ß $FF
Нет
BST
Rd, b
0≤ d ≤31
0≤ b ≤7
Переписать бит из регистра во флаг Т
Тß Rd(b)
Т
1
BLD
Rd, b
0≤ d ≤31
0≤ b ≤7
Переписать флаг Т в бит регистра
Rd(b) ß Т
Нет
SEC
Установить флаг переноса
Сß 1
С
CLC
Очистить флаг переноса
Сß 0
С
SEN
Установить флаг отрицательного значения
Мß 1
N
CLN
Очистить флаг отрицательного значения
Nß 0
N
SEZ
Установить флаг нулевого значения
Zß 1
Z
CLZ
Очистить флаг нулевого значения
Zß 0
Z
SEI
Установить флаг глобального прерывания
Iß 1
I
CLI
Очистить флаг глобального прерывания
Iß 0
I
SES
Установить флаг знака
Sß 1
S
CLS
Очистить флаг знака
Sß 0
S
SEV
Установить флаг переполнения
Vß 1
V
CLV
Очистить флаг переполнения
Vß 0
V
SET
Установить флаг Т
Tß 1
T
CLT
Очистить флаг Т
Тß 0
T
SEH
Установить флаг полу- переноса
Нß 1
Н
CLH
Очистить флаг полу -переноса
Нß 0
Н
Таблица А.4. Команды пересылки данных
Мнемоника
Операн-
ды
Описание
Операция
Флаги
Кол-во циклов
LPM
0≤k≤65535
Загрузка байта из памяти программ по адресу (Z) в регистр R0
R0ß (Z)
Нет
MOV
Rd, Rr
0≤ d ≤31
0≤ r ≤31
Копировать данные из регистра в регистр
Rd ß Rr
Нет
LDI
Rd, k
16≤ d ≤31
0≤ k≤ 255
Загрузить константу
в регистр
Rdß K
Нет
LDS
Rd, k
0≤ d ≤31 0≤k≤65535
Загрузка байта из ОЗУ в регистр
Rd ß (k)
Нет
LD
Rd, X
0≤ d ≤31
Загрузить косвенно
в регистр Rd из ОЗУ
Rd ß (X)
Нет
LD
Rd, X +
0≤ d ≤31
Загрузить косвенно с постинкрементом
Rd ß (X),
X ß X + 1
Нет
LD
Rd, –X
0≤ d ≤31
Загрузить косвенно с преддекрементом
X ß X – 1,
Rd ß (X)
Нет
LD
Rd, Y
0≤ d ≤31
Загрузить косвенно
в регистр Rd из ОЗУ
Rd ß (Y)
Нет
LD
Rd, Y +
0≤ d ≤31
Загрузить косвенно с постинкрементом
Rd ß (Y),
Y ß Y + 1
Нет
LD
Rd, –Y
0≤ d ≤31
Загрузить косвенно с преддекрементом
Y ß Y – 1,
Rd ß (Y)
Нет
LDD
Rd, Y + q
0≤ d ≤31
0≤ q ≤63
Загрузить косвенно со смещением
в регистр Rd из ОЗУ
Rd ß (Y + q)
Нет
LD
Rd, Z
0≤ d ≤31
Загрузить косвенно
в регистр Rd из ОЗУ
Rd ß (Z)
Нет
LD
Rd, Z +
0≤ d ≤31
Загрузить косвенно с постинкрементом
Rd ß (Z),
Z ß Z + 1
Нет
LD
Rd, – Z
0≤ d ≤31
Загрузить косвенно с преддекрементом
Z ß Z – 1,
Rd ß (Z)
Нет
LDD
Rd, Z + q
0≤ d ≤31
0≤ q ≤31
Загрузить косвенно со смещением
в регистр Rd из ОЗУ
Rd ß (Z + q)
Нет
STS
k, Rr
0≤ d ≤31 0≤k≤65535
Загрузить непосредственно в ОЗУ
(k) ß Rr
Нет
ST
X, Rr
0≤ r ≤31
Записать косвенно
в ОЗУ из регистр Rr
(X) ß Rr
Нет
ST
X +, Rr
0≤ r ≤31
Записать косвенно с постинкрементом
(X) ß Rr,
X ß X + 1
Нет
ST
–X, Rr
0≤r≤31
Записать косвенно с преддекрементом
Xß X – 1,
(X) ß Rr
Нет
ST
Y, Rr
0≤ r ≤31
Записать косвенно
в ОЗУ из регистр Rr
(Y) ß Rr
Нет
ST
Y+, Rr
0≤ r ≤31
Записать косвенно с постинкрементом
(Y) ß Rr,
Y ß Y + 1
Нет
ST
–Y, Rr
0≤ r ≤31
Записать косвенно с преддекрементом
Y ß Y – 1,
(Y) ß Rr
Нет
STD
Y + q, Rr
0≤ r ≤31
0≤ q ≤63
Записать косвенно со смещением
в ОЗУ из регистр Rr
(Y + q) ß Rr
Нет
ST
Z, Rr
0≤ r ≤31
Записать косвенно
в ОЗУ из регистр Rr
(Z) ß Rr
Нет
ST
Z +, Rr
0≤ r ≤31
Записать косвенно с постинкрементом
(Z) ß Rr,
Z ß Z + 1
Нет
ST
– Z, Rr
0≤ r ≤31
Записать косвенно с преддекрементом
Z ß Z – 1,
(Z) ß Rr
Нет
STD
Z + q, Rr
0≤ r ≤31
0≤ q ≤63
Записать косвенно со смещением
в ОЗУ из регистр Rr
(Z+q) ß Rr
Нет
IN
Rd, P
0≤ d ≤31
0≤ P ≤63
Загрузить данные из порта I/O в регистр
Rd ß P
Нет
OUT
P, Rr
0≤ r ≤31
0≤P≤63
Записать данные из регистра в порт I/O
P ß Rr
Нет
PUSH
Rr
0≤ r ≤31
Сохранить регистр в стеке
STACK ß Rr
Нет
POP
Rd
0≤ d ≤31
Извлечь регистр из
стека
Rd ß STACK
Нет
Таблица А.5. Команды переходов
Мнемоника
Операнды
Описание
Операция
Флаги
Кол-во циклов
RJMP
k
–2K<k<2K
Перейти относительно
На метку (смещение)
PC ß PC + k + 1
Нет
LJMP
Перейти косвенно
PC ß Z
Нет
JMP
k
0< k <4M
Перейти
PC ß k
Нет
RCALL
k
–2K≤k≤2K
Вызвать подпрограмму относительно (по метке)
PC ß PC + k + 1
Нет
ICALL
Вызвать подпрограмму косвенно
PC ß Z
Нет
CALL
k
0≤ k ≤64K
Выполнить длинный вызов подпрограммы
PC ß k
Нет
RET
Вернуться из подпрограммы
PC ß STACK
Нет
RETI
Вернуться из прерывания
PC ß STACK
I
CPSE
Rd, Rr
0≤ d ≤31,
0≤ r ≤31
Сравнить и пропустить, если равно
If Rd = Rr then
PC ß PC + 2 (or 3)
Нет
1/2/3
SBRC
Rr, b
0≤ r ≤31
0≤ b ≤7
Пропустить, если бит в регистре очищен
if Rr(b) = 0 then
PC ß PC + 2 (or 3)
Нет
1/2/3
SBRS
Rr, b
0≤ r ≤31
0≤ b ≤7
Пропустить, если бит в регистре установлен
If Rr(b) = 1 then
PC ß PC + 2 (or 3)
Нет
1/2/3
SBIC
P, b
0≤ P ≤31
0≤ b ≤7
Пропустить, если бит в регистре I/O очищен
if P(b)=0 then
PC ß PC + 2 (or 3)
Нет
1/2/3
SBIS
P, b
0≤ r ≤31
0≤ b ≤7
Пропустить, если бит в регистре I/O установлен
If P(b) = 1 then
PC ßPC + 2 (or 3)
Нет
1/2/3
BRBS
s, k
0≤ s ≤7
–64≤k≤+63
Перейти, если бит в регистре статуса установлен
if SREG(s) = 1 then
PC ß PC + k + 1
Нет
1/2
BRBC
s, k
0≤ s ≤7
–64≤k≤+63
Перейти, если бит в регистре статуса очищен
if SREG(s) = 0 then
PC ß PC + k + 1
Нет
1/2
BREQ
k
–64≤k≤+63
Перейти, если равно
if Rd = Rr (Z=1) then
PC ß PC + k + 1
Нет
1/2
BRNE
k
–64≤k≤+63
Перейти, если не равно
if Rd ¹ Rr (Z=0) then
PC ß PC + k + 1
Нет
1/2
BRCS
k
–64£k£+63
Перейти, если флаг переноса установлен
if C = 1 then
PC ß PC + k + 1
Нет
1/2
BRCC
k
–64≤k≤+63
Перейти, если флаг переноса очищен
if C = 0 then
PC ß PC + k + 1
Нет
1/2
BRSH
k
–64≤k≤+63
Перейти, если равно или больше (без знака)
if Rd ≥ Rr (C=0) then
PC ß PC + k + 1
Нет
1/2
BRLO
k
–64≤k≤+63
Перейти, если меньше (без знака)
if Rd < Rr (C =1) then
PC ß PC + k + 1
Нет
1/2
BRMI
k
–64≤k≤+63
Перейти, если минус
if N = 1 then
PC ß PC + k + 1
Нет
1/2
BRPL
k
–64≤k≤+63
Перейти, если плюс
if N = 0 then
PC ß PC + k + 1
Нет
1/2
BRGE
k
–64≤k≤+63
Перейти, если больше или равно (с учетом знака)
if Rd > Rr (NÅV =0)
then PC ß PC + k + 1
Нет
1/2
BRLT
k
–64≤k≤+63
Перейти, если меньше (со знаком)
if Rd < Rr (NÅV = 1)
then PC ßPC + k+ 1
Нет
1/2
BRHS
k
–64≤k≤+63
Перейти, если флаг полупереноса установлен
if H = 1 then
PC ß PC + k + 1
Нет
1/2
BRHC
k
–64≤k≤+63
Перейти, если флаг полупереноса очищен
if H = 0 then
PC ß PC + k + 1
Нет
1/2
BRTS
k
–64≤k≤+63
Перейти, если флаг Т установлен
if T = 1 then
PC ß PC + k + 1
Нет
1/2
BRTC
k
-64≤k≤+63
Перейти, если флаг Т очищен
if T=0 then
PC ß pc + k + 1
Нет
1/2
BRVS
k
–64≤k≤+63
Перейти, если флаг переполнения установлен
if V = 1 then
PC ß PC + k + 1
Нет
1/2
BRVC
k
–64≤k≤+63
Перейти, если флаг переполнения очищен
if V = 0 then
PC ß PC + k + 1
Нет
1/2
BRIE
k
–64≤k≤+63
Перейти, если глобальное
прерывание разрешено
if I = 1 then
PC ß PC + k + 1
Нет
1/2
BRID
k
–64≤k≤+63
Перейти, если глобальное
прерывание запрещено
if I = 0 then
PC ß PC + k + 1
Нет
1/2
Таблица А.6. Прочие команды
Мнемоника
Операнды
Описание
Операция
Флаги
К-во ц-ов
NOP
Выполнить холостую команду
Нет
SLEEP
Установить режим SLEEP
Нет
WDR
Сбросить сторожевой таймер
Нет
ПРИЛОЖЕНИЕ В
Таблица регистров
Адрес
Обознач.
Бит 7
Бит 6
Бит 5
Бит 4
Бит 3
Бит 2
Бит 1
Бит 0
$3F ($5F)
SREG
I
T
H
S
V
N
Z
C
$3E ($5E)
SPH
—
—
—
—
—
—
SP9
SP8
$3D ($5D)
SPL
SP7
SP6
SP5
SP4
SP3
SP2
SP1
SP0
$3C ($5C)
$3B ($5B)
GIMSK
INT1
INT0
—
—
—
—
—
—
$3A ($5A)
GIFR
INTF1
INTF0
$39 ($59)
TIMSK
OCIE2
TOIE2
TICIE1
OCIE1A
OCIE1B
TOIE1
—
TOIE0
$38 ($58)
TIFR
OCF2
TOV2
ICF1
OCF1A
OCF1B
TOV1
—
TOV0
$37 ($57)
$36 ($56)
$35 ($55)
MCUCR
—
SE
SM1
SM0
ISC11
ISC10
ISC01
ISC00
$34 ($54)
MCUSR
—
—
—
—
—
—
EXTRF
PORF
$33 ($53)
TCCR0
—
—
—
—
—
CS02
CS01
CS00
$32 ($52)
TCNT0
Таймер/счетчик0 (8-разрядный)
$31 ($51)
$30 ($50)
$2F ($4F)
TCCR1A
COM1A1
COM1A0
COM1B1
COM1B0
—
—
PWM11
PWM10
$2E ($4E)
TCCR1B
ICNC1
ICES1
—
—
CTC1
CS12
CS11
CS10
$2D ($4D)
TCNT1H
Старший байт регистра счетчика Таймера/ счетчика1
$2С ($4С)
TCNT1L
Младший байт регистра счетчика Таймера/ счетчика1
$2В ($4В)
OCR1AH
Старший байт регистра сравнения A выхода Таймера/счетчика1
$2A ($4A)
OCR1AL
Младший байт регистра сравнения A выхода Таймера/счетчика1
$29 ($49)
OCR1BH
Старший байт регистра сравнения B выхода Таймера/счетчика1
$28 ($48)
OCR1BL
Младший байт регистра сравнения B выхода Таймера/счетчика1
$27 ($47)
ICR1H
Старший байт регистра захвата входа Таймера/счетчика1
$26 ($46)
ICR1L
Младший байт регистра захвата входа Таймера/счетчика1
$25 ($45)
TCCR2
—
PWM2
COM21
COM20
CTC2
CS22
CS21
CS20
$24 ($44)
TCNT2
Таймер/счетчик2 (8-разрядный)
$23 ($43)
OCR2
Регистр сравнения выхода Таймера/счетчика2
$22 ($42)
ASSR
—
—
—
—
AS2
TCN2UB
OCR2UB
TCR2UB
$21 ($41)
WDTCR
—
—
—
WDTOE
WDE
WDP2
WDP1
WDP0
$20 ($40)
$1F ($3F)
EEARH
EEAR9
$1E ($3E)
EEARL
EEAR7
EEAR6
EEAR5
EEAR4
EEAR3
EEAR2
EEAR1
EEAR0
$1D ($3D)
EEDR
Регистр данных EEPROM
$1C ($3C)
EECR
—
—
—
—
EERIE
EEMWE
EEWE
EERE
$1B ($3B)
PORTA
PORTA7
PORTA6
PORTA5
PORTA4
PORTA3
PORTA2
PORTA1
PORTA0
$1A ($3A)
DDRA
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
$19 ($39)
PINA
PINA7
PINA6
PINA5
PINA4
PINA3
PINA2
PINA1
PINA0
$18 ($38)
PORTB
PORTB7
PORTB6
PORTB5
PORTB4
PORTB3
PORTB2
PORTB1
PORTB0
$17 ($37)
DDRB
DDB7
DDB6
DDB5
DDB4
DDB3
DDB2
DDB1
DDB0
$16 ($36)
PINB
PINB7
PINB6
PINB5
PINB4
PINB3
PINB2
PINB1
PINB0
$15 ($35)
PORTC
PORTC7
PORTC6
PORTC5
PORTC4
PORTC3
PORTC2
PORTC1
PORTC0
$14 ($34)
DDRC
DDC7
DDC6
DDC5
DDC4
DDC3
DDC2
DDC1
DDC0
$13 ($33)
PINC
PINC7
PINC6
PINC5
PINC4
PINC3
PINC2
PINC1
PINC0
$12 ($32)
PORTD
PORTD7
PORTD6
PORTD5
PORTD4
PORTD3
PORTD2
PORTD1
PORTD0
$11 ($31)
DDRD
DDD7
DDD6
DDD5
DDD4
DDD3
DDD2
DDD1
DDD0
$10 ($30)
PIND
PIND7
PIND6
PIND5
PIND4
PIND3
PIND2
PIND1
PIND0
$0F ($2F)
SPDR
Регистр данных SPI
$0E ($2E)
SPSR
SPIF
WCOL
—
—
—
—
—
—
$0D ($2D)
SPCR
SPIE
SPE
DORD
MSTR
CROL
CPHA
SPR1
SPR0
$0C ($2C)
UDR
Регистр данных UART
$0B ($2B)
USR
RXC
TXC
UDRE
FE
OR
—
—
—
$0A ($2A)
UCR
RXCIE
TXCIE
UDRIE
RXEN
TXEN
CHR9
RXB8
TXB8
$09 ($29)
UBRR
Регистр управления скоростью UART
$08 ($28)
ACSR
ACD
—
ACO
ACI
ACIE
ACIC
ACIS1
ACIS0
$07 ($27)
ADMUX
—
—
—
—
—
MUX2
MUX1
MUX0
$06 ($26)
ADCSR
ADEN
ADSC
ADFR
ADIF
ADIE
ADPS2
ADPS1
ADPS0
$05 ($25)
ADCH
—
—
—
—
—
—
ADC9
ADC8
$04 ($24)
ADCL
ADC7
ADC6
ADC5
ADC4
ADC3
ADC2
ADC1
ADC0
$03 ($20)
$02 ($22)
$01 ($21)
$00 ($20)
Дата добавления: 2014-11-18 ; Просмотров: 488 ; Нарушение авторских прав? ; Мы поможем в написании вашей работы!
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет