ТОП 10:

Система команд та їх характеристика



 

Усі команди AVR-контролерів можна умовно розділити на чотири групи:

- арифметичні і логічні команди;

- команди розгалуження;

- команди пересилки;

- команди роботи з бітами.

В табл.2.1. приведено вся система команд 8-розрядних AVR-контролерів.

Таблиця 2.1

Мнемоніка Операнди Описання Дія Прапорці Цикл
АРИФМЕТИЧНІ І ЛОГІЧНІ КОМАНДИ
ADD Rd, Rr Скласти два регістра Rd ← Rd + Rr Z, ,N,V,H
ADC Rd, Rr Скласти з переносом Rd ← Rd + Rr + C Z,C,N,V,H
SUB Rd, Rr Відняти два регістра Rd ← Rd - Rr Z,C,N,V,H
SUBI Rd, K Відняти константу Rd ← Rd - K 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
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
SBR Rd, K Установка біта(-ів) в регістрі Rd ← Rd OR K Z, N, V
CBR Rd, K Скидання біта(-ів) в регістрі Rd ← Rd AND (FFh - K) Z, N, V
INC Rd Збільшити на 1 Rd ← Rd + 1 Z, N, V
DEC Rd Зменшити на 1 Rd ← Rd – 1 Z, N, V
TST Rd Перевірити на 0 або мінус Rd ← Rd AND Rd Z, N, V
CLR Rd Очистити регістр (всі біти обнуляються) Rd ← Rd XOR Rd Z, N, V
SER Rd Установити регістр (всі біти установлюються в 1) Rd ← $FF Не змінює
КОМАНДИ РОЗГАЛУДЖЕННЯ
RJMP k Відносний перехід PC ← PC+k+1 Не змінює
RCALL k Відносний виклик підпрограми PC ← PC+k+1 Не змінює
RET   Вихід із підпрограми PC ← STACK Не змінює
RETI   Вихід із переривання PC ← STACK I
CPSE Rd, Rr Зрівняти, якщо рівні, пропуск наступної команди if(Rd=Rr) PC←PC+2 або 3 Не змінює 1/2
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
SBRC Rr, b Якщо біт в регістрі скинутий, пропуск наступної команди if(Rr(b)=0) PC←PC+2 або 3 Не змінює 1/2
SBRS Rr, b Якщо біт в регістрі встановлений, пропуск наступної команди if(Rr(b)=1) PC←PC+2 або 3 Не змінює 1/2
SBIC P, b Якщо біт в регістрі вводу-виводу скинутий, пропуск наступної команди if(P(b)=0) PC←PC+2 або 3 Не змінює 1/2
SBIS P, b Якщо біт в регістрі вводу-виводу встановлений, пропуск наступної команди if(P(b)=1) PC←PC+2 або 3 Не змінює 1/2
BRBS s, k Перехід на мітку якщо встановлений прапорець s if(SREG(s)=1) PC←PC+k+1 Не змінює 1/2
BRBC s, k Перехід на мітку якщо скинутий прапорець s if(SREG(s)=0) PC←PC+k+1 Не змінює 1/2
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(N XOR V=0) PC←PC+k+1 Не змінює 1/2
BRLT k Перехід на мітку якщо менше нуля, зі знаком if(N XOR V=1) PC←PC+k+1 Не змінює 1/2
BRHS k Перехід на мітку якщо встановлений прапорець H if(H=1) PC←PC+k+1 Не змінює 1/2
BRHC k Перехід на мітку якщо скинутий прапорець H if(H=0) PC←PC+k+1 Не змінює 1/2
BRTS k Перехід на мітку якщо встановлений прапорець T if(H=1) PC←PC+k+1 Не змінює 1/2
BRTC k Перехід на мітку якщо скинутий прапорець Т if(H=0) PC←PC+k+1 Не змінює 1/2
BRVS k Перехід на мітку якщо встановлений прапорець V (переповнення) if(H=1) PC←PC+k+1 Не змінює 1/2
BRVC k Перехід на мітку якщо скинутий прапорець V if(H=0) PC←PC+k+1 Не змінює 1/2
BRIE k Перехід на мітку якщо дозволено переривання if(I=1) PC←PC+k+1 Не змінює 1/2
BRID k Перехід на мітку якщо заборонено переривання if(I=1) PC←PC+k+1 Не змінює 1/2
КОМАНДИ ПЕРЕСИЛКИ
LD Rd, Z Загрузити регістр безпосередньо Rd ← (Z) Не змінює
ST Z, Rr Записати регістр безпосередньо (Z) ← Rr Не змінює
MOV Rd, Rr Пересилка з одного регістра в другий Rd ← Rr Не змінює
LDI Rd, K Загрузити константу Rd ← K Не змінює
IN Rd, P Ввід із порту Rd ← P Не змінює
OUT P, Rr Вивід в порт P ← Rr Не змінює
КОМАНДИ РОБОТИ З БІТАМИ
SBI P, b Установити біт в регістрі вводу-виводу I/O (P, b) ← 1 Не змінює
CBI P,b Скинути біт в регістрі вводу-виводу I/O (P, b) ← 0 Не змінює
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) Не змінює
BSET s Встановити прапорець SREG(s) ← 1 SREG(s)
BCLR s Скинути прапорець SREG(s) ← 0 SREG(s)
BST Rr, b Запам’ятати біт в T T ← Rr (b) T
BLD Rd, b Прочитати біт із T Rd (b) ← T Не змінює
SEC   Встановити перенос C ← 1 C
CLC   Скинути перенос C ← 0 C
SEN   Встановити прапорець N N ← 1 N
CLN   Скинути прапорець N N ← 0 N
SEZ   Встановити прапорець Z Z ← 1 Z
CLZ   Скинути прапорець Z Z ← 0 Z
SEI   Дозволити переривання I ← 1 I
CLI   Заборонити переривання I ← 0 I
SES   Встановити прапорець S S ← 1 S
CLS   Скинути прапорець S S ← 0 S
SEV   Встановити прапорець V V ← 1 V
CLV   Скинути прапорець V V ← 0 V
SET   Встановити прапорець T T ← 1 T
CLT   Скинути прапорець T T ← 0 T
SEH   Встановити прапорець H H ← 1 H
CLH   Скинути прапорець H H ← 0 H
NOP   Немає операції   Не змінює
SLEEP   Зупинка (сплячий режим)   Не змінює
WDR   Скидання охоронного таймеру   Не змінює

 

Регістри та їх операнди:

Rd – регістр призначення (і джерело) в регістровому файлі;

Rr – регістр джерело в регістровому файлі;

K – константа;

k – мітка;

b– біт в регістровому файлі або біт в регістрі вводу-виводу;

s – біт в регістрі статусу;

X, Y, Z – регістри непрямої адресації (X=R27:R26, Y=R29:R28, Z=R31:R30);

Р – адрес порту вводу-виводу;

 

 

Арифметичні і логічні команди

 

Позначення прапорців, які будуть використовуватись:

Û Прапорець, на який впливає команда
0: Очищений командою прапорець
1: Встановлений командою прапорець
-: Прапорець, на який не впливає команда

 

Команда ADD - Скласти без переносу

Описання:Сума двох регістрів без добавлення вмісту прапорця переносу (С), розміщення результату в регістрі призначення Rd.

Операція:

(i) Rd < Rd + Rr
  Синтаксис Операнди: Лічильник програм:
(i) ADD Rd, Rr 0 < Rd < 31, 0 <Rr < 31 PC < PC + 1

 

Булеві вирази регістра статусу (SREG)

I T H S V N Z C
- - <=> <=> <=> <=> <=> <=>

Приклад:

.device AT90S1200

.include "1200def.inc"

ser r16 ;всі біти регістра R16 встановлюються в одиницю

out ddrb,r16 ;налаштування порту В на вивід

ldi r17,5 ; записуємо десяткове число 5 в регістр R17

ldi r18,9 ; записуємо десяткове число 9 в регістр R18

add r17,r18 ;додаємо регістри R17 і 18

out portb,r17 ; вивід значення регістра R17 в порт B

 

Команда ADC - Скласти з переносом

Описання:Сума двох регістрів і вмісту прапорця переносу (С), розміщення результату в регістрі призначення Rd.

Операція:

(i) Rd < Rd + Rr + C
  Синтаксис Операнди: Лічильник програм:
(i) ADC Rd, Rr 0 < Rd < 31, 0 < Rr < 31 PC < PC + 1

Булеві вирази регістра статусу (SREG)

I T H S V N Z C
- - <=> <=> <=> <=> <=> <=>

Приклад:

.device AT90S1200

.include "1200def.inc"

ser r16 ;всі біти регістра R16 встановлюються в одиницю

out ddrb,r16 ;налаштування порту В на вивід

ldi r17,58 ; записуємо десяткове число 58 в регістр R17

adc r17,r17 ;додаємо регістр R17 з самим собою

out portb,r17 ; вивід значення регістра R17 в порт B

 

 

Команда SUB - відняти без переносу

Описання:Віднімання вмісту регістра-джерела Rr із вмісту регістра Rd, розміщення результату в регістрі призначення Rd.

Операція:

(i) Rd < Rd – Rr
  Синтаксис Операнди: Лічильник програм:
(i) SUB Rd, Rr 16 < Rd < 31, 0 < Rr < 31 PC < PC + 1

Булеві вирази регістра статусу (SREG)

I T H S V N Z C
- - Û Û Û Û Û Û

Приклад:

.device AT90S1200

.include "1200def.inc"

ser r16 ;всі біти регістра R16 встановлюються в одиницю

out ddrb,r16 ;налаштування порту В на вивід

ldi r17,10 ; записуємо десяткове число 10 в регістр R17

ldi r18,9 ; записуємо десяткове число 9 в регістр R18

sub r17,r18 ;віднімаємо від регістра R17 регістр 18

out portb,r17 ; вивід значення регістра R17 в порт B

 

Команда SUBI - Відняти константу

Описання:Віднімання константи із вмісту регістра, розміщення результату в регістрі призначення Rd.

Операція:







Последнее изменение этой страницы: 2016-08-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.172.213 (0.008 с.)