Микропроцессорные системы. Методическое пособие по выполнению лабораторных работ
.pdfFMUL |
Rd,Rr |
дробное незнаковое |
R1:R0<-(RdxRr)«1 (UU) |
z,c |
2 0) |
|
|
умножение |
|
|
|
FMULS |
Rd,Rr |
дробное умножение со |
R1:R0<-(RdxRr)«1 (SS) |
z,c |
2 0) |
|
|
знаком |
|
|
|
FMULSU |
Rd,Rr |
дробное умножение |
R1:R0<-(RdxRr)«1 (SU) |
z,c |
2 0) |
знакового с |
|||||
|
|
незнаковым |
|
|
|
|
|
Branch Instructions |
|
|
|
RJMP |
к |
перейти относительно |
PC <- PC + к + 1 |
None |
2 |
IJMP |
|
перейти косвенно |
PC(15:0)<-Z, PC(21:16)<-0 |
None |
20) |
EIJMP |
|
расширенный косвенный |
PC(15:0)<-Z, PC(21:16)<- |
None |
2 0) |
|
|
переход к (Z) |
EIND |
|
|
JMP |
к |
перейти |
PC<-k |
None |
3(1) |
RCALL |
к |
вызвать подпрограмму |
PC <- PC + к + 1 |
None |
3/4 № |
|
|
относительно |
|
|
|
ICALL |
|
вызвать подпрограмму |
PC(15:0)<-Z, PC(21:16)<-0 |
None |
3/4(1)(4 |
|
|
косвенно |
|
|
) |
CALL |
к |
выполнить длинный |
PC<-k |
None |
4/5 |
|
|
вызов подпрограммы |
|
|
(DW |
RET |
|
вернуться из |
PC <- STACK |
None |
4/5 W |
|
|
подпрограммы |
|
|
|
RETI |
|
вернуться из прерывания |
PC <- STACK |
I |
4/5 W |
CPSE |
Rd,Rr |
cравнить и пропустить |
if (Rd = Rr) PC <- PC + 2 or |
None |
1 /2/3 |
|
|
если равно |
3 |
|
|
CP |
Rd,Rr |
cравнить |
Rd-Rr |
Z,C,N,V,S |
1 |
|
|
|
|
,H |
|
CPC |
Rd,Rr |
cравнить с учетом |
Rd - Rr - С |
Z,C,N,V,S |
1 |
|
|
переноса |
|
,H |
|
CPI |
Rd,K |
cравнить c константой |
Rd-K |
Z,C,N,V,S |
1 |
|
|
|
|
,H |
|
SBRC |
Rr, b |
пропустить если бит в |
if (Rr(b)=0)PC<-PC + 2or3 |
None |
1 /2/3 |
|
|
регистре очищен |
|
|
|
SBRS |
Rr, b |
пропустить если бит в |
if (Rr(b)=1)PC<-PC + 2or3 |
None |
1 /2/3 |
|
|
регистре установлен |
|
|
|
SBIC |
A, b |
пропустить если бит в |
if(l/O(A,b)=0) PC <- PC + 2 |
None |
1 /2/3 |
|
|
регистре I/O очищен |
or 3 |
|
|
SBIS |
A, b |
пропустить если бит в |
lf(l/O(A,b)=1) PC <- PC + 2 |
None |
1 /2/3 |
|
|
регистре I/O установлен |
or 3 |
|
|
BRBS |
s, к |
перейти если бит в |
if (SREG(s) = 1) then PC <- |
None |
1/2 |
|
|
регистре статуса |
PC+k+ 1 |
|
|
|
|
установлен |
|
|
|
BRBC |
s, к |
перейти если бит в |
if (SREG(s) = 0) then PC <- |
None |
1/2 |
|
|
регистре статуса очищен |
PC+k + 1 |
|
|
BREQ |
к |
перейти если равно |
if (Z=1)thenPC<-PC + k+1 |
None |
1/2 |
BRNE |
к |
перейти если не равно |
if (Z = 0) then PC <- PC + к |
None |
1/2 |
|
|
|
+ 1 |
|
|
BRCS |
к |
перейти если флаг |
if (C=1)thenPC<-PC + k+1 |
None |
1/2 |
|
|
переноса установлен |
|
|
|
BRCC |
к |
перейти если флаг |
if (C = 0) then PC <- PC + к |
None |
1 /2 |
|
|
переноса очищен |
+ 1 |
|
|
BRSH |
к |
перейти если равно или |
if (C = 0) then PC <- PC + к |
None |
1 /2 |
|
|
50 |
|
|
|
|
|
больше (без знака) |
+ 1 |
|
|
BRLO |
к |
перейти если меньше (без |
if (C = 1)thenPC<-PC + k+1 |
None |
1/2 |
|
|
знака) |
|
|
|
BRMI |
к |
перейти если минус |
if (N = 1)thenPC<-PC + k+1 |
None |
1 /2 |
BRPL |
к |
перейти если плюс |
if (N = 0) then PC <- PC + к |
None |
1/2 |
|
|
|
+ 1 |
|
|
BRGE |
к |
перейти если больше или |
if (N Ф V= 0) then PC <- PC |
None |
1 /2 |
|
|
равно (с учетом знака) |
+ к + 1 |
|
|
BRLT |
к |
перейти если меньше чем |
if (N Ф V= 1) then PC <- PC |
None |
1/2 |
|
|
(со знаком) |
+ к + 1 |
|
|
BRHS |
к |
перейти если флаг |
if (H = 1)thenPC<-PC + k+1 |
None |
1/2 |
|
|
полупереноса установлен |
|
|
|
BRHC |
к |
перейти если флаг |
if (H = 0) then PC <- PC + к |
None |
1 /2 |
|
|
полупереноса очищен |
+ 1 |
|
|
BRTS |
к |
перейти если флаг T |
if (T=1)thenPC<-PC + k+1 |
None |
1/2 |
|
|
установлен |
|
|
|
BRTC |
к |
перейти если флаг T |
if (T = 0) then PC <- PC + к |
None |
1/2 |
|
|
очищен |
+ 1 |
|
|
BRVS |
к |
перейти если |
if (V=1)thenPC<-PC + k+1 |
None |
1/2 |
|
|
переполнение |
|
|
|
|
|
установлено |
|
|
|
BRVC |
к |
перейти если |
if (V = 0) then PC <- PC + к |
None |
1 /2 |
|
|
переполнение очищено |
+ 1 |
|
|
BRIE |
к |
перейти если глобальное |
if(l = 1)thenPC<-PC + k+1 |
None |
1/2 |
|
|
прерывание разрешено |
|
|
|
BRID |
к |
перейти если глобальное |
if (1 = 0) then PC <- PC + к |
None |
1/2 |
|
|
прерывание запрещено |
+ 1 |
|
|
|
|
Data Transfer |
Instructions |
|
|
MOV |
Rd, Rr |
копировать регистр |
Rd<-Rr |
None |
1 |
LDI |
Rd, К |
загрузить |
Rd <-K |
None |
1 |
|
|
непосредственное |
|
|
|
|
|
значение |
|
|
|
LDS |
Rd, к |
загрузить |
Rd <- (k) |
None |
P (1)(4) |
|
|
непосредственно из СОЗУ |
|
|
|
LD |
Rd, X |
загрузить косвенно из |
Rd <- (X) |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
X |
|
|
|
LD |
Rd, X+ |
загрузить косвенно из |
Rd <- (X), X <- X + 1 |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
X |
|
|
|
LD |
Rd,-X |
загрузить косвенно из |
X <- X -1, Rd <- (X) |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
X |
|
|
|
LD |
Rd, Y |
загрузить косвенно из |
Rd <- (Y) |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Y |
|
|
|
LD |
Rd, Y+ |
загрузить косвенно из |
Rd <- (Y), Y <- Y + 1 |
None |
2 (2)(4) |
|
|
51 |
|
|
|
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Y |
|
|
|
LD |
Rd,-Y |
загрузить косвенно из |
Y <- Y - 1, Rd <- (Y) |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Y |
|
|
|
LDD |
Rd,Y+q |
загрузить косвенно из |
Rd <- (Y + q) |
None |
|
|
|
СОЗУ в регистр с |
|
|
О (1)(4) |
|
|
использованием индекса |
|
|
|
|
|
|
|
|
|
|
|
Y |
|
|
|
LD |
Rd, Z |
загрузить косвенно из |
Rd <- (Z) |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Z |
|
|
|
LD |
Rd, Z+ |
загрузить косвенно из |
Rd <- (Z), Z <- Z+1 |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Z |
|
|
|
LD |
Rd,-Z |
загрузить косвенно из |
Z <- Z -1, Rd <- (Z) |
None |
2 (2)(4) |
|
|
СОЗУ в регистр с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Z |
|
|
|
LDD |
Rd, Z+q |
загрузить косвенно из |
Rd <- (Z + q) |
None |
|
|
|
СОЗУ в регистр с |
|
|
P (1)(4) |
|
|
использованием индекса |
|
|
|
|
|
|
|
|
|
|
|
Z |
|
|
|
STS |
k, Rr |
загрузить |
(k) <- Rd |
None |
P (1)(4) |
|
|
непосредственно в СОЗУ |
|
|
|
|
|
|
|
|
|
ST |
X, Rr |
записать косвенно из |
(X) <- Rr |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
X |
|
|
|
ST |
X+, Rr |
записать косвенно из |
(X) <- Rr, X <- X + 1 |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
X с последующим |
|
|
|
|
|
инкрементированием Х |
|
|
|
ST |
-X, Rr |
записать косвенно из |
X <- X - 1, (X) <- Rr |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
X с предварительным |
|
|
|
|
|
декрементированием Х |
|
|
|
ST |
Y, Rr |
записать косвенно из |
(Y) <- Rr |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Y |
|
|
|
ST |
Y+, Rr |
записать косвенно из |
(Y) <- Rr, Y <- Y + 1 |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
использованием индекса |
|
|
|
|
|
Y с последующим |
|
|
|
|
|
52 |
|
|
|
|
|
инкрементированием Y |
|
|
|
|
ST |
-Y Rr |
записать косвенно из |
|
Y <- Y - 1, (Y) <- Rr |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
|
использованием индекса |
|
|
|
|
|
|
Y с предварительным |
|
|
|
|
|
|
декрементированием Y |
|
|
|
|
STD |
Y+q,Rr |
записать косвенно из |
|
(Y + q) <- Rr |
None |
|
|
|
регистра в СОЗУ с |
|
|
|
|
|
|
использованием индекса |
|
|
|
P (1)(4) |
|
|
Y (Y: Неизменен, q: |
|
|
|
|
|
|
смещение) |
|
|
|
|
ST |
Z, Rr |
записать косвенно из |
|
(Z) <- Rr |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
|
использованием индекса |
|
|
|
|
|
|
Z |
|
|
|
|
ST |
Z+, Rr |
записать косвенно из |
|
(Z) <- Rr, Z <- Z + 1 |
None |
2 (2)(4) |
|
|
регистра в СОЗУ с |
|
|
|
|
|
|
использованием индекса |
|
|
|
|
|
|
Z с последующим |
|
|
|
|
|
|
инкрементированием Z |
|
|
|
|
ST |
-Z, Rr |
записать косвенно из |
|
Z<-Z-1,(Z)<-Rr |
None |
|
|
|
регистра в СОЗУ с |
|
|
|
|
|
|
использованием индекса |
|
|
|
P (2)(4) |
|
|
Z с предварительным |
|
|
|
|
|
|
декрементированием Z |
|
|
|
|
STD |
Z+q,Rr |
записать косвенно из |
|
(Z + q) <- Rr |
None |
|
|
|
регистра в СОЗУ с |
|
|
|
|
|
|
использованием индекса |
|
|
|
2 (1)(4) |
|
|
Z (Z: Неизменен, q: |
|
|
|
|
|
|
смещение) |
|
|
|
|
LPM |
|
загрузить байт памяти |
|
R0 <- (Z) |
None |
3(3) |
|
|
программ |
|
|
|
|
LPM |
Rd, Z |
загрузить байт памяти |
|
Rd <- (Z) |
None |
3(3) |
|
|
программ |
|
|
|
|
LPM |
Rd, Z+ |
загрузить байт памяти |
|
Rd <- (Z), Z <- Z + 1 |
None |
3(3) |
программ |
|
|||||
|
|
последующим |
|
|
|
|
|
|
инкрементированием Z |
|
|
|
|
ELPM |
|
расширенная загрузка |
|
R0 <- (RAMPZ:Z) |
None |
3<1> |
|
|
памяти программ |
|
|
|
|
ELPM |
Rd, Z |
расширенная загрузка |
|
Rd <- (RAMPZ:Z) |
None |
3<1> |
|
|
памяти программ |
|
|
|
|
|
|
последующим |
|
|
|
|
|
|
инкрементированием Z |
|
|
|
|
|
|
MCU |
Control Instructions |
|
|
|
BREAK |
|
точка останова |
|
(See specific descr. for |
None |
1 <1> |
|
|
|
|
BREAK) |
|
|
NOP |
|
выполнить холостую |
|
|
None |
1 |
|
|
команду |
|
|
|
|
SLEEP |
|
установить режим SLEEP |
|
(see specific descr. for |
None |
1 |
|
|
|
|
Sleep) |
|
|
WDR |
|
cбросить сторожевой |
|
(see specific descr. for |
None |
1 |
|
|
|
53 |
|
|
|
|
|
таймер |
WDR) |
|
|
SPM |
|
запись памяти программ |
(Z)<-R1:R0 |
None |
.(1) |
IN |
Rd, A |
загрузить данные из порта |
Rd <- I/O(A) |
None |
1 |
|
|
I/O в регистр |
|
|
|
OUT |
A, Rr |
записать данные из |
I/O(A) <- Rr |
None |
1 |
|
|
регистра в порт I/O |
|
|
|
PUSH |
Rr |
поместить регистр в стек |
STACK <- Rr |
None |
2 0) |
POP |
Rd |
записать регистр из стека |
Rd <- STACK |
None |
2 0) |
|
|
Bit and |
Bit-test Instructions |
|
|
LSL |
Rd |
логически сдвинуть влево |
Rd(n+1 )<-Rd(n), Rd(0)<- |
Z,C,N,V, |
1 |
|
|
|
0,C<-Rd(7) |
H |
|
LSR |
Rd |
логически сдвинуть |
Rd(n)<-Rd(n+1),Rd(7)<- |
Z,C,N,V |
1 |
|
|
вправо |
0,C<-Rd(0) |
|
|
ROL |
Rd |
cдвинуть влево через |
Rd(0)<-C,Rd(n+1)<- |
Z,C,N,V, |
1 |
|
|
перенос |
Rd(n),C<-Rd(7) |
H |
|
ROR |
Rd |
cдвинуть вправо через |
Rd(7)<-C, Rd(n)<-Rd(n+1 |
Z,C,N,V |
1 |
|
|
перенос |
),C<-Rd(0) |
|
|
ASR |
Rd |
арифметически сдвинуть |
Rd(n)<-Rd(n+1), n=0..6 |
Z,C,N,V |
1 |
|
|
вправо |
|
|
|
SWAP |
Rd |
поменять нибблы местами |
Rd(3..O) <-> Rd(7..4) |
None |
1 |
BSET |
s |
установить бит в регистре |
SREG(s) <- 1 |
SREG(s) |
1 |
|
|
статуса (SREG) |
|
|
|
BCLR |
s |
очистить бит в регистре |
SREG(s) <- 0 |
SREG(s) |
1 |
|
|
статуса (SREG) |
|
|
|
SBI |
A, b |
установить бит в регистр |
I/O(A, b) <- 1 |
None |
2 |
|
|
I/O |
|
|
|
CBI |
A, b |
Очистить бит в регистре |
I/O(A, b) <- 0 |
None |
2 |
|
|
I/O |
|
|
|
BST |
Rr, b |
переписать бит из |
T <- Rr(b) |
T |
1 |
|
|
регистра во флаг T |
|
|
|
|
|
регистра статуса (SREG) |
|
|
|
BLD |
Rd, b |
загрузить содержимое T |
Rd(b) <- T |
None |
1 |
|
|
флага регистра статуса |
|
|
|
|
|
(SREG) в бит регистра |
|
|
|
SEC |
|
установить флаг переноса |
C<-1 |
С |
1 |
CLC |
|
очистить флаг переноса в |
C<-0 |
С |
1 |
|
|
регистре статуса (SREG) |
|
|
|
SEN |
|
установить флаг |
N<-1 |
N |
1 |
|
|
отрицательного значения |
|
|
|
CLN |
|
очистить флаг |
N<-0 |
N |
1 |
|
|
отрицательного значения |
|
|
|
|
|
в регистре статуса (SREG) |
|
|
|
SEZ |
|
установить флаг нулевого |
Z<-1 |
Z |
1 |
|
|
значения |
|
|
|
CLZ |
|
очистить флаг нулевого |
Z<-0 |
z |
1 |
|
|
значения |
|
|
|
SEI |
|
установить флаг |
l<-1 |
I |
1 |
|
|
глобального прерывания |
|
|
|
CLI |
|
очистить флаг |
l<-0 |
I |
1 |
|
|
глобального прерывания в |
|
|
|
|
|
54 |
|
|
|
|
|
регистре статуса (SREG) |
|
|
|
SES |
|
установить флаг знака |
S<-1 |
s |
1 |
CLS |
|
очистить флаг знака |
S<-0 |
s |
1 |
SEV |
|
установить флаг |
V<-1 |
V |
1 |
|
|
переполнения |
|
|
|
CLV |
|
очистить флаг |
V<-0 |
V |
1 |
|
|
переполнения |
|
|
|
SET |
|
установить флаг T |
T<-1 |
T |
1 |
CLT |
|
oчистить T флаг |
T<-0 |
T |
1 |
SEH |
|
установить флаг |
H<-1 |
H |
1 |
|
|
полупереноса |
|
|
|
CLH |
|
oчистить флаг |
H<-0 |
H |
1 |
|
|
полупереноса в регистре |
|
|
|
|
|
статуса (SREG) |
|
|
|
55
