Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Классификация команд



Множество инструкций микроконтроллера образует систему команд. Система команд, как правило, не меняется для всех микроконтроллеров одного семейства. В полном списке инструкций при описании системы обычно выделяются отдельные группы, родственных по применению инструкций, например, арифметические и логические команды, команды пересылки и др. Это деление довольно условно и полностью определяется политикой разработчика.

При описании системы команд приводится полная информация о каждой инструкции: способах адресации, использовании флагов регистра состояния, времени исполнения.

В качестве примера рассмотрим систему команд микроконтроллера ATmega 163. Система команд микроконтроллера содержит 130 команд, условно разделенных на четыре группы:

0 команды пересылки данных (data transfer instructions),

0 арифметические и логические команды (arithmetic and logic instructions),

0 команды работы с битами (bit and bit-test instructions),

0 команды ветвления (branch instructions).

При описании системы команд использованы следующие обозначения:

0 Rd - регистр-приемник результата (0 ≤ d ≤ 31),

0 Rd* - регистр-приемник результата с номером более 16 (16 ≤ d ≤ 31),

0 Rr - регистр-источник (0 ≤ r ≤ 31),

0 Rdl: регистры R24, R26, R28, R30 (для инструкций ADIW и SBIW),

0 P- адрес регистра ввода/вывода,

0 P*- адрес побитно адресуемого регистра ввода/вывода ($00-$1F)

0 K - символьная или численная константа (8 бит)

0 k - адресная константа

0 b - номер бита в регистре (3 бита)

0 s - номер бита в регистре статуса (3 бита)

0 X, Y, Z - регистры косвенной адресации (X=R27:R26, Y=R29:R28; Z=R31:R30

Команды пересылки

Команды пересылки осуществляют перемещение данных между ячейками памяти и регистрами процессорного ядра. Один из операндов, участвующих в инструкции, является источником данных, второй - приемником. При пересылке из источника в приемник копия данных всегда остается в источнике. Таким образом, все команды пересылки практически осуществляют копирование данных.

Одним из операндов в любой команде пересылки обычно является регистр общего назначения процессорного ядра. Вторым может быть любой регистр или ячейка памяти.

Инструкции, как правило, не влияют на флаги в регистре состояния процессорного ядра.

В системе команд микроконтроллеров AVR предусмотрено 34 инструкции, осуществляющие пересылку данных. В инструкциях используются все, за исключением битовых, способы адресации данных; одним из операндов в любой инструкции является регистр общего назначения. Инструкция ldi (load immediate), использующая непосредственную адресацию, может быть использована только в старшей половине файла регистров общего назначения (R16....R31), остальные команды работают с любым из регистров файла. Инструкцию spm (store program memory), осуществляющую запись кода в память программ, можно использовать только в Boot Program Section памяти программ.

Время выполнения инструкций, работающих с регистрами, равно 1 такту. Инструкции, обращающиеся к ячейкам памяти данных, выполняются за 2 такта, а обращающиеся к ячейкам памяти программ - за 3 такта.

Таблица. 3.1. Команды пересылки AVR-микроконтроллеров

Мнемоника Операнды Описание инструкции Выполняемая операция Флаги Такты
mov Rd, Rr Move Between Registers Rd<- Rr None  
movw Rd, Rr Copy Register Word Rd+1:Rd<- Rr+1:Rr None  
ldi Rd*, K Load Immediate Rd<- K None  
ld Rd, X Load Indirect Rd<- (X) None  
ld Rd, X+ Load Indirect and Post-Inc. Rd <- (X), X <- X + 1 None  
ld Rd,-X Load Indirect and Pre-Dec. X<-X-1,Rd<- (X) None  
ld Rd, Y Load Indirect Rd <- (Y) None  
ld Rd, Y+ Load Indirect and Post-Inc. Rd <- (Y), Y <- Y + 1 None  
ld Rd,-Y Load Indirect and Pre-Dec. Y<-Y-1,Rd<- (Y) None  
ldd Rd, Y+q Load Indirect with Displacement Rd<- (Y + q) None  
ld Rd, Z Load Indirect Rd<- (Z) None  
ld Rd, Z+ Load Indirect and Post-Inc. Rd <- (Z), Z <- Z+1 None  
ld Rd,-Z Load Indirect and Pre-Dec Z<- Z-1,Rd<- (Z) None  
ldd Rd, Z+q Load Indirect with Displacement Rd<- (Z + q) None  
lds Rd, k Load Direct from SRAM Rd<- (k) None  
ST X, Rr Store Indirect (X)<- Rr None  
st X+, Rr Store Indirect and Post-Inc. (X) <- Rr, X <- X + 1 None  
st -X, Rr Store Indirect and Pre-Dec. X<- X-1,(X)<- Rr None  
st Y, Rr Store Indirect (Y) <- Rr None  
st Y+, Rr Store Indirect and Post-Inc. (Y) <- Rr, Y <- Y + 1 None  
st -Y, Rr Store Indirect and Pre-Dec. Y<- Y-1,(Y)<- Rr None  
std Y+q,Rr Store Indirect with Displacement (Y + q)<- Rr None  
st Z, Rr Store Indirect (Z) <- Rr None  
st Z+, Rr Store Indirect and Post-Inc. (Z) <- Rr, Z <- Z + 1 None  
st -Z, Rr Store Indirect and Pre-Dec Z<- Z-1,(Z)<- Rr None  
std Z+q,Rr Store Indirect with Displacement (Z + q)<- Rr None  
sts k, Rr Store Direct to SRAM (k)<- Rr None  
lpm   Load Program Memory R0<- (Z) None  
lpm Rd, Z Load Program Memory Rd<-Z) None  
lpm Rd, Z+ Load Program Memory and Post-Inc. Rd <- (Z), Z=Z+1 None  
spm   Store Program Memory (Z)<- R1:R0 None -
in Rd, P In Port Rd<- P None  
out P, Rr Out Port P<- Rr None  
push Rr Push Register on Stack STACK <- Rr; SP<- SP-1 None  
pop Rd Pop Register from Stack SP<- SP+1, Rd<- STACK None  
               

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

В группу арифметических команд входят команды выполняющие сложение, вычитание, декремент и инкремент данных, логическое умножение, логическое сложение, операцию ИСКЛЮЧАЮЩЕЕ ИЛИ, инверсию переменной. Обычно к этой группе относят также инструкции сравнения данных. В микроконтроллере АТтеда163 реализованы также функции арифметического умножения целых чисел и дробных чисел, без знака и со знаком.

Все инструкции этой группы, как правило, приводят к изменению состояния флагов регистра состояния в соответствии с результатами, выполняемой операции.

В микроконтроллерах с архитектурой AVR предусмотрено довольно много (31) инструкций, выполняющих арифметические и логические преобразования данных. Инструкции используют исключительно прямую регистровую или непосредственную адресацию данных. Операнды хранятся в регистрах общего назначения, в один из них (регистр-приемник) всегда направляется и результат вычислений.

В результате выполнения инструкций изменяются флаги регистра SREG (Status Register), а флаг переноса С (Carry), кроме того, непосредственно участвует в выполнении ряда операций.

Арифметические команды сложения и вычитания выполняют сложение и вычитание одно- и двухбайтных операндов. Команды adc (add with carry two registers) и sbc (subtract with carry two registers) используют при вычислениях флаг переноса С.

Инструкции логического умножения (and) и логического сложения (or), ИСКЛЮЧАЮЩЕЕ ИЛИ (eor) преобразуют только однобайтные данные.

Инструкция дополнения до единицы com (one's complement), фактически выполняет операцию инверсии, а инструкция дополнения до двух neg (two's complement) - меняет знак числа.

Инструкции установки (set) позволяют установить как отдельные, так и все биты выбранного регистра в единичное состояние, а команды очистки (clear) - в нулевое.

Инструкции инкремента регистра inc (increment) и декремента регистра dec (decrement) используют прямую адресацию одного выбранного регистра.

Тест на нуль или минус tst (test for гею or minus) фактически не меняет содержимого регистра, но устанавливает соответствующие флаги при равенстве операнда нулю или при его отрицательном значении.

Команды сравнения (compare) также не меняют содержимого регистров, а оценивают разность операндов и устанавливают соответствующие флаги в регистре состояния.

Шесть инструкций умножения (multiply) выполняют умножение целых и дробных операндов с учетом и без учета знака. 16-битный результат умножения всегда записывается в регистры общего назначения R0:R1.

Большинство арифметических и логических команд выполняются за один такт. Исключение составляют только команды с непосредственной адресацией, работающие с двухбайтными словами: adiw (add immediate to word) и sbiw (subtract immediate from word), и команды умножения, выполняющиеся за два такта.

Таблица 3.2. Арифметические и логические команды микроконтроллера Atmega163

Мнемо- ника Операнды Описание Операция Флаги Такm
add Rd, Rr Add without Carry two Registers Rd <- Rd + Rr Z,C,N,V,H  
adc Rd, Rr Add with Carry two Registers Rd <- Rd + Rr + C Z,C,N,V,H  
adiw Rdl, K ADD Immediate from Word Rdh:Rdl <- Rdh:Rdl+K Z,C,N,V,S  
sub Rd, Rr Subtract without Carry two Registers Rd<- Rd-Rr Z,C,N,V,H  
subi Rd*, K Subtract Constant from Register Rd<- Rd-K Z,C,N,V,H  
sbc Rd, Rr Subtract with Carry two Registers Rd<- Rd-Rr-C Z,C,N,V,H  
sbci Rd*, K Subtract with Carry Constant from Register Rd<- Rd-K-C Z,C,N,V,H  
sbiw Rdl, K Subtract Immediate from Word Rdh:Rd <- Rdh:Rdl- K Z,C,N,V,S  
and Rd, Rr Logical AND Registers Rd <- Rd Rr Z,N,V  
andi Rd*, K Logical AND Register and Constant Rd <- Rd K Z,N,V  
or Rd, Rr Logical OR Registers Rd <- Rd v Rr Z,N,V  
ori Rd*, K Logical OR Register and Constant Rd<- RdvK Z,N,V  
eor Rd, Rr Exclusive OR Registers Rd <- Rd Rr Z,N,V  
com Rd One's Complement Rd <- $FF - Rd Z,C,N,V  
neg Rd Two's Complement Rd<- $00-Rd Z,C,N,V,H  
sbr Rd*, K Set Bit(s) in Register Rd<- RdvK Z,N,V  
ser Rd Set Register Rd <- $FF None  
cbr Rd*, K Clear Bit(s) in Register Rd <- Rd ($FF - K) Z,N,V  
clr Rd Clear Register Rd <- $00 Z,N,V  
inc Rd Increment Rd <- Rd + 1 Z,N,V  
dec Rd Decrement Rd<- Rd-1 Z,N,V  
tst Rd Test for Zero or Minus Rd <- Rd Rd Z,N,V  
ср Rd, Rr Compare Rd-Rr Z, N,V,C,H  
срс Rd, Rr Compare with Carry Rd-Rr-C Z, N,V,C,H  
cpi Rd*, K Compare Register with Immediate Rd-K Z, N,V,C,H  
mul Rd, Rr Multiply Unsigned R1:R0<-RdxRr Z,C  
muls Rd, Rr Multiply Signed R1:R0<-RdxRr Z,C  
mulsu Rd, Rr Multiply Signed with Unsigned R1:R0<-RdxRr Z,C  
fmul Rd, Rr Fractional Multiply Unsigned R1:R0<-(RdxRr)«1 Z,C  
fmuls Rd, Rr Fractional Multiply Signed R1:R0<-(RdxRr)«1 Z,C  
fmulsu Rd, Rr Fractional Multiply Signed with Unsigned R1:RCX-(RdxRr)«1 Z,C  
             

Битовые команды

Битовые команды (Bit And Bit-Test Instructions) позволяют обращаться непосредственно к отдельным битам регистров процессорного ядра и выполнять с выбранными битами простейшие операции: пересылки, установки и сброса. Операндами команд могут быть как биты регистров общего назначения, так и биты регистров ввода/вывода. Битовые команды могут влиять на отдельные флаги регистра признаков.

Битовые команды микроконтроллеров семейства AVR работают с отдельными битами регистров общего назначения и регистров ввода/вывода. Биты регистров ввода/вывода могут быть установлены или сброшены. Биты регистров общего назначения могут быть сдвинуты в соседние ячейки, как влево (в сторону старших разрядов), так и вправо (в сторону младших разрядов). В операциях сдвига, кроме разрядов регистров, может участвовать и бит переноса. Специальные команды предусмотрены для установки и сброса отдельных флагов регистра состояния. Команда swap меняет местами тетрады (полубайты) регистров общего назначения.

Таблица 3.3. Битовые команды микроконтроллера АТтеда163

Мнемо- ника Операнды Описание Операция Флаги Так m
sbi P*,b Set Bit in I/O Register I/O(P,b) <-1 None  
cbi P*,b Clear Bit in I/O Register I/O(P,b) <- 0 None  
lsl Rd Logical Shift Left Rd(n+1) <- Rd(n), Rd(0) <- 0 Z,C,N,V  
lsr Rd Logical Shift Right Rd(n)<-Rd(n+1), Rd(7)<-0 Z,C,N,V  
rol Rd Rotate Left Through Carry Rd(0)<-C, Rd(n+1)<- Rd(n), C <- Rd(7) Z,C,N,V  
гог Rd Rotate Right Through Carry Rd(7) <- C,Rd(n)<- Rd(n+1),C<-Rd(0) Z,C,N,V  
asr Rd Arithmetic Shift Right Rd(n)<-Rd(n+1), n=0..6 Z,C,N,V  
swap Rd Swap Nibbles Rd(3..0)<-Rd(7..4), Rd(7..4) <-Rd(3..0) None  
bset s Flag Set SREG(s) <-1 SREG(s)    
bclr s Flag Clear SREG(s) <- 0 SREG(s)    
bld Rd, b Bit load from T to Register Rd(b) <- T None  
bst Rr, b Bit Store from Register to T T <- Rr(b) T  
sec   Set Carry C<-1 С  
clc   Clear Carry C<-0 с  
sen   Set Negative Flag N<-1 N  
cln   Clear Negative Flag N<-0 N  
sez zSet Zero Flag Z <-1 z  
clz   Clear Zero Flag Z<-0 z  
sei   Global Interrupt Enable K-1 I  
cli   Global Interrupt Disable <-0 I  
ses   Set Signed Test Flag S<-1 s  
cls   Clear Signed Test Flag S<-0 s  
sev   Set Twos Complement Overflow V<-1 V  
clv   Clear Twos Complement Overflow V<-0 V  
set   SetTinSREG T<-1 T  
clt   Clear T in SREG T<-0 T  
she   Set Half Carry Flag in SREG H<-1 H  
clh   Clear Half Carry Flag in SREG H<-0 H  

Инструкции ветвления

Инструкции ветвления изменяют содержимое программного счетчика. Они используются при организации переходов и подпрограмм. Инструкции условных переходов и условных вызовов подпрограмм в процессе исполнения проверяют выполнение различных условий. Если условие не выполняется, программный счетчик просто инкрементируется. Такими условиями может быть равенство содержимого двух регистров, единичное или нулевое состояние заданных битов в регистрах общего назначения, регистрах ввода/вывода или в регистре состояния, Например, команда cpse (compare, skip if equal) проверяет равенство содержимого регистров, команда sbrc Rr, b (skip if bit in register cleared) осуществляет переход при условии равенства нулю содержимого бита b в регистре Rr, а инструкция brmi k (branch if minus) проверяет флаг отрицательного результата (N) в ретстре состояния SREG.

Время выполнения команд ветвления зависит от результата проверки. Оно, для различных инструкций, может меняться, в пределах от одного до четырех тактов.

Таблица 3.4. Команды переходов микроконтроллера АТтеда163

Мнемоника Операн ды Описание Операция Флаги Такт
rjmp k Relative Jump PC <- PC + k + 1 None  
ijmp   Indirect Jump to (Z) PC<-Z None  
jmp k Jump PC<-k None  
rcall k Relative Subroutine Call PC <- PC + k + 1 None  
call k Call Subroutine PC<-k None  
icall   Indirect Call to (Z) PC<-Z None  
ret   Subroutine Return PC <- STACK None  
reti   Interrupt Return PC <- STACK I  
cpse Rd,Rr Compare, Skip if Equal if (Rd = Rr) PC <- PC + 2 or3 None 1/2/ 3
sbrc Rr, b Skip if Bit in Register Cleared if(Rr(b)=0) PC<-PC + 2 or3 None 1/2
sbrs Rr, b Skip if Bit in Register is Set if (Rr(b)=1)PC<-PC + 2 or3 None 1/2
sbic P*, b Skip if Bit in I/O Register Cleared if (P(b)=0) PC <- PC + 2 or 3 None 1/2
sbis P*, b Skip if Bit in I/O Register is Set if(P(b)=1)PC<-PC + 2or 3 None 1/2
brbs s, k Branch if Status Flag Set if(SREG(s)=1)thenPC <- PC+k + 1 None 1/2
brbc s, k Branch if Status Flag Cleared if(SREG(s) = 0) then PC <- PC+k + 1 None 1/2
breq k Branch if Equal if(Z=1)thenPC<-PC + k+1 None 1/2
brcs k Branch if Carry Set if(C=1)thenPC<-PC + k+ 1 None 1/2
brne k Branch if Not Equal if (Z = 0) then PC <- PC + k+1 None 1/2
brcc k Branch if Carry Cleared if (C = 0) then PC <- PC + k+ 1 None 1/2
brsh k Branch if Same or Higher if (C = 0) then PC <- PC + k+ 1 None 1/2
brlo k Branch if Lower if(C=1)thenPC<-PC + k+1 None 1/2
brmi k Branch if Minus if (N = 1)thenPC<-PC + k+ 1 None 1/2
brpl k Branch if Plus if (N = 0) then PC <- PC + k+1 None 1/2
brge k Branch if Greater or Equal, Signed if (N © V= 0) then PC <- PC + k + 1 None 1/2
brlt k Branch if Less Than Zero, Signed if (N®V= 1)thenPC<- PC + k + 1 None 1/2
brhs k Branch if Half Carry Flag Set if(H = 1)thenPC<-PC + k+1 None 1/2
brhc k Branch if Half Carry Flag Cleared if (H = 0) then PC <- PC + k+ 1 None  
brts k Branch if T Flag Set if (T = 1)thenPC<-PC + k+1 None 1/2
brtc k Branch if T Flag Cleared if (T = 0) then PC <- PC + k+ 1 None 1/2
brvs k Branch if Overflow Flag is Set if (V = 1)thenPC<-PC + k+1 None 1/2
brvc k Branch if Overflow Flag is Cleared if (V = 0) then PC <- PC + k+1 None 1/2
brie k Branch if Interrupt Enabled if (I = 1)thenPC<-PC + k+ 1 None 1/2
brid k Branch if Interrupt Disabled if (I = 0) then PC <- PC + k+1 None 1/2

Инструкции управления

Инструкции управления используются для управления вычислениями и режимами работы процессорного ядра. Пустая операция nop заполняет пробелы между инструкциями в программной памяти или используется в качестве выдержки. Команда sleep переводит процессорное ядро в режим пониженного энергопотребления. Инструкция wdr сбрасывает сторожевой таймер.

Таблица 3.5. Инструкции управления микроконтроллера АТтеда163.





Дата публикования: 2014-11-03; Прочитано: 970 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...