Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
SREG: | Rejestr Stanu |
C: | Znacznik przeniesienia (ang. Carry Flag). |
Z: | Znacznik zera (ang. Zero Flag). |
N: | Znacznik wyniku ujemnego (ang. Negative Flag). |
V: | Znacznik nadmiaru dla liczb w kodzie U2 (ang. Overflow Flag). |
S: | Znacznik znaku, równy N V przy porównaniach ze znakiem (ang. Sign Flag). |
H: | Znacznik przeniesienia połówkowego (ang. Half Carry Flag). |
T: | Bit przenoszony, używany przez instrukcje BLD (ang. Bit Load, odczyt bitu) i BST (ang. Bit Store, zapis bitu) (ang. Transfer Bit). |
I: | Znacznik globalnego włączenia/wyłączenia przerwań (ang. Global Interrupt Enable/Disable Flag). |
Rd: | Rejestr docelowy (i źródłowy) w zestawie rejestrów. |
Rr: | Rejestr źródłowy w zestawie rejestrów |
R: | Wynik po wykonaniu instrukcji |
K: | Dane stałe |
k: | Adres stały |
b: | Bit w zestawie rejestrów lub w rejestrze I/O (pole 3-bitowe) |
s: | Bit w rejestrze stanu (pole 3-bitowe) |
X,Y,Z | Rejestr adresowania pośredniego
(ang. Indirect Address Register) (X=R27:R26, Y=R29:R28 i Z=R31:R30) |
A: | Adres komórki I/O |
q: | Przesunięcie dla adresowania bezpośredniego (pole 6-bitowe) |
X | : | Znacznik zmieniony przez instrukcję |
0 | : | Znacznik wyzerowany przez instrukcję |
1 | : | Znacznik ustawiony przez instrukcję |
– | : | Znacznik niezmieniony przez instrukcję |
Mnemonik | Argumenty | Opis | Działanie | Znaczniki | Liczba cykli |
Instrukcje Arytmetyczne i Logiczne | |||||
ADD | Rd, Rr | Add without Carry – Dodawanie bez przeniesienia | Rd ← Rd + Rr | Z,C,N,V,S,H | 1 |
ADC | Rd, Rr | Add with Carry – Dodawanie z przeniesieniem | Rd ← Rd + Rr + C | Z,C,N,V,S,H | 1 |
ADIW | Rd, K | Add Immediate to Word – Dodawanie stałej do słowa | Rd+1:Rd ← Rd+1:Rd + K | Z,C,N,V,S | 2 |
SUB | Rd, Rr | Subtract without Carry – Odejmowanie bez przeniesienia | Rd ← Rd - Rr | Z,C,N,V,S,H | 1 |
SUBI | Rd, K | Subtract Immediate – Odejmowanie stałej | Rd ← Rd - K | Z,C,N,V,S,H | 1 |
SBC | Rd, Rr | Subtract with Carry – Odejmowanie z przeniesieniem | Rd ← Rd - Rr - C | Z,C,N,V,S,H | 1 |
SBCI | Rd, K | Subtract Immediate with Carry – Odejmowanie stałej z przeniesieniem | Rd ← Rd - K - C | Z,C,N,V,S,H | 1 |
SBIW | Rd, K | Subtract Immediate from Word – Odejmowanie stałej od słowa | Rd+1:Rd ← Rd+1:Rd - K | Z,C,N,V,S | 2 |
AND | Rd, Rr | Logical AND – Logiczne I (koniunkcja) | Rd ← Rd Rr | Z,N,V,S | 1 |
ANDI | Rd, K | Logical AND with Immediate – Logiczne I ze stałą | Rd ← Rd K | Z,N,V,S | 1 |
OR | Rd, Rr | Logical OR – Logiczne LUB (alternatywa) | Rd ← Rd Rr | Z,N,V,S | 1 |
ORI | Rd, K | Logical OR with Immediate – Logiczne LUB ze stałą | Rd ← Rd K | Z,N,V,S | 1 |
EOR | Rd, Rr | Exclusive OR – Suma symetryczna | Rd ← Rd Rr | Z,N,V,S | 1 |
COM | Rd | One's Complement – Negacja bitowa U1 | Rd ← 0xFF - Rd | Z,C,N,V,S | 1 |
NEG | Rd | Two's Complement – Negacja arytmetyczna U2 | Rd ← 0x00 - Rd | Z,C,N,V,S,H | 1 |
SBR | Rd, K | Set Bit(s) in Register – Ustawienie bitów w rejestrze | Rd ← Rd K | Z,N,V,S | 1 |
CBR | Rd, K | Clear Bit(s) in Register – Zerowanie bitów w rejestrze | Rd ← Rd (0xFFh - K) | Z,N,V,S | 1 |
INC | Rd | Increment – Zwiększanie o 1 | Rd ← Rd + 1 | Z,N,V,S | 1 |
DEC | Rd | Decrement – Zmniejszanie o 1 | Rd ← Rd - 1 | Z,N,V,S | 1 |
TST | Rd | Test for Zero or Minus – Test na zero lub liczbę ujemną | Rd ← Rd Rd | Z,N,V,S | 1 |
CLR | Rd | Clear Register – Zerowanie wszystkich bitów w rejestrze | Rd ← Rd Rd | Z,N,V,S | 1 |
SER | Rd | Set Register – Ustawienie wszystkich bitów w rejestrze | Rd ← 0xFF | żaden | 1 |
MUL | Rd, Rr | Multiply Unsigned – Mnożenie liczb bez znaku | R1:R0 ← Rd × Rr (UU) | Z,C | 2 |
MULS | Rd, Rr | Multiply Signed – Mnożenie liczb ze znakiem | R1:R0 ← Rd × Rr (SS) | Z,C | 2 |
MULSU | Rd, Rr | Multiply Signed with Unsigned – Mnożenie liczby ze znakiem przez liczbę bez znaku | R1:R0 ← Rd × Rr (SU) | Z,C | 2 |
FMUL | Rd, Rr | Fractional Multiply Unsigned – Ułamkowe mnożenie liczb bez znaku | R1:R0 ← (Rd × Rr)<<1 (UU) | Z,C | 2 |
FMULS | Rd, Rr | Fractional Multiply Signed – Ułamkowe mnożenie liczb ze znakiem | R1:R0 ← (Rd × Rr)<<1 (SS) | Z,C | 2 |
FMULSU | Rd, Rr | Fractional Multiply Signed with Unsigned – Ułamkowe mnożenie liczby ze znakiem przez liczbę bez znaku | R1:R0 ← (Rd × Rr)<<1 (SU) | Z,C | 2 |
Instrukcje Rozgałęzień | |||||
RJMP | k | Relative Jump – Skok względny | PC ← PC + k + 1 | żaden | 2 |
IJMP | Indirect Jump to (Z) – Skok pośredni pod adres w rejestrze Z | PC(15:0) ← Z, PC(21:16) ← 0 | żaden | 2 | |
JMP | k | Direct Jump – Skok bezpośredni | PC ← k | żaden | 3 |
RCALL | k | Relative Call Subroutine – Względne wywołanie podprogramu | PC ← PC + k + 1 | żaden | 3 |
ICALL | Indirect Call to (Z) – Pośrednie wywołanie podprogramu o adresie w rejestrze Z | PC(15:0) ← Z, PC(21:16) ← 0 | żaden | 3 | |
CALL | k | Direct Subroutine Call – Bezpośrednie wywołanie podprogramu | PC ← k | żaden | 4 |
RET | Subroutine Return – Powrót z podprogramu | PC ← STACK | żaden | 4 | |
RETI | Interrupt Return – Powrót z przerwania | PC ← STACK | I | 4 | |
CPSE | Rd, Rr | Compare, Skip if Equal – Porównanie z pominięciem następnej instrukcji, jeśli argumenty równe | jeśli (Rd = Rr), to PC ← PC + 2 lub 3 | żaden | 1 / 2 / 3 |
CP | Rd, Rr | Compare – Porównanie | Rd - Rr | Z,C,N,V,S,H | 1 |
CPC | Rd, Rr | Compare with Carry – Porównanie z przeniesieniem | Rd - Rr - C | Z,C,N,V,S,H | 1 |
CPI | Rd, K | Compare with Immediate – Porównanie ze stałą | Rd - K | Z,C,N,V,S,H | 1 |
SBRC | Rr, b | Skip if Bit in Register Cleared – Pominięcie następnej instrukcji, jeśli bit w rejestrze w stanie 0 | jeśli (Rr(b)=0), to PC ← PC + 2 lub 3 | żaden | 1 / 2 / 3 |
SBRS | Rr, b | Skip if Bit in Register Set – Pominięcie następnej instrukcji, jeśli bit w rejestrze w stanie 1 | jeśli (Rr(b)=1), to PC ← PC + 2 lub 3 | żaden | 1 / 2 / 3 |
SBIC | A, b | Skip if Bit in I/O Register Cleared – Pominięcie następnej instrukcji, jeśli bit w rejestrze we/wy w stanie 0 | jeśli (I/O(A,b)=0), to PC ← PC + 2 lub 3 | żaden | 1 / 2 / 3 |
SBIS | A, b | Skip if Bit in I/O Register Set – Pominięcie następnej instrukcji, jeśli bit w rejestrze we/wy w stanie 1 | jeśli (I/O(A,b)=1), to PC ← PC + 2 lub 3 | żaden | 1 / 2 / 3 |
BRBS | s, k | Branch if Status Flag Set – Skok warunkowy, jeśli znacznik stanu ustawiony | jeśli (SREG(s) = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRBC | s, k | Branch if Status Flag Cleared – Skok warunkowy, jeśli znacznik stanu wyzerowany | jeśli (SREG(s) = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BREQ | k | Branch if Equal – Skok warunkowy, jeśli równe | jeśli (Z = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRNE | k | Branch if Not Equal – Skok warunkowy, jeśli różne | jeśli (Z = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRCS | k | Branch if Carry Set – Skok warunkowy, jeśli jest przeniesienie | jeśli (C = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRCC | k | Branch if Carry Cleared – Skok warunkowy, jeśli nie ma przeniesienia | jeśli (C = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRSH | k | Branch if Same or Higher – Skok względny, jeśli takie same lub wyższe | jeśli (C = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRLO | k | Branch if Lower – Skok warunkowy, jeśli niższe | jeśli (C = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRMI | k | Branch if Minus – Skok warunkowy przy minusie | jeśli (N = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRPL | k | Branch if Plus – Skok warunkowy przy plusie | jeśli (N = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRGE | k | Branch if Greater or Equal, Signed – Skok warunkowy, jeśli większe lub równe, liczby ze znakiem | jeśli (N V= 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRLT | k | Branch if Less Than, Signed – Skok warunkowy, jeśli mniejsze, liczby ze znakiem | jeśli (N V= 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRHS | k | Branch if Half Carry Flag Set – Skok warunkowy, jeśli przeniesienie połówkowe ustawione | jeśli (H = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRHC | k | Branch if Half Carry Flag Cleared – Skok warunkowy, jeśli przeniesienie połówkowe wyzerowane | jeśli (H = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRTS | k | Branch if T Flag Set – Skok warunkowy, jeśli znacznik T ustawiony | jeśli (T = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRTC | k | Branch if T Flag Cleared – Skok warunkowy, jeśli znacznik T wyzerowany | jeśli (T = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRVS | k | Branch if Overflow Flag is Set – Skok warunkowy, jeśli znacznik nadmiaru V ustawiony | jeśli (V = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRVC | k | Branch if Overflow Flag is Cleared – Skok warunkowy, jeśli znacznik nadmiaru V wyzerowany | jeśli (V = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRIE | k | Branch if Interrupt Enabled – Skok warunkowy przy uaktywnionych przerwaniach | jeśli ( I = 1), to PC ← PC + k + 1 | żaden | 1 / 2 |
BRID | k | Branch if Interrupt Disabled – Skok warunkowy przy przerwaniach zablokowanych | jeśli ( I = 0), to PC ← PC + k + 1 | żaden | 1 / 2 |
Instrukcje Przesyłu Danych | |||||
MOV | Rd, Rr | Copy Register – Kopiowanie rejestru | Rd ← Rr | żaden | 1 |
MOVW | Rd, Rr | Copy Register Pair – Kopiowanie pary rejestrów | Rd+1:Rd ← Rr+1:Rr | żaden | 1 |
LDI | Rd, K | Load Immediate – Ładowanie stałej | Rd ← K | żaden | 1 |
LD | Rd, X | Load Indirect – Ładowanie pośrednie | Rd ← (X) | żaden | 2 |
LD | Rd, X+ | Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją | Rd ← (X), X ← X + 1 | żaden | 2 |
LD | Rd, -X | Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją | X ← X - 1, Rd ← (X) | żaden | 2 |
LD | Rd, Y | Load Indirect – Ładowanie pośrednie | Rd ← (Y) | żaden | 2 |
LD | Rd, Y+ | Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją | Rd ← (Y), Y ← Y + 1 | żaden | 2 |
LD | Rd, -Y | Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją | Y ← Y - 1, Rd ← (Y) | żaden | 2 |
LDD | Rd,Y+q | Load Indirect with Displacement – Ładowanie pośrednie z przesunięciem | Rd ← (Y + q) | żaden | 2 |
LD | Rd, Z | Load Indirect – Ładowanie pośrednie | Rd ← (Z) | żaden | 2 |
LD | Rd, Z+ | Load Indirect and Post-Increment – Ładowanie pośrednie z postinkrementacją | Rd ← (Z), Z ← Z+1 | żaden | 2 |
LD | Rd, -Z | Load Indirect and Pre-Decrement – Ładowanie pośrednie z predekrementacją | Z ← Z - 1, Rd ← (Z) | żaden | 2 |
LDD | Rd, Z+q | Load Indirect with Displacement – Ładowanie pośrednie z przesunięciem | Rd ← (Z + q) | żaden | 2 |
LDS | Rd, k | Load Direct from data space – Ładowanie bezpośrednie z przestrzeni danych | Rd ← (k) | żaden | 2 |
ST | X, Rr | Store Indirect – Zapis pośredni z indeksem X | (X) ← Rr | żaden | 2 |
ST | X+, Rr | Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem X | (X) ← Rr, X ← X + 1 | żaden | 2 |
ST | -X, Rr | Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem X | X ← X - 1, (X) ← Rr | żaden | 2 |
ST | Y, Rr | Store Indirect – Zapis pośredni z indeksem Y | (Y) ← Rr | żaden | 2 |
ST | Y+, Rr | Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem Y | (Y) ← Rr, Y ← Y + 1 | żaden | 2 |
ST | -Y, Rr | Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem Y | Y ← Y - 1, (Y) ← Rr | żaden | 2 |
STD | Y+q,Rr | Store Indirect with Displacement – Zapis pośredni z przesunięciem z indeksem Y | (Y + q) ← Rr | żaden | 2 |
ST | Z, Rr | Store Indirect – Zapis pośredni z indeksem Z | (Z) ← Rr | żaden | 2 |
ST | Z+, Rr | Store Indirect and Post-Increment – Zapis pośredni z postinkrementacją z indeksem Z | (Z) ← Rr, Z ← Z + 1 | żaden | 2 |
ST | -Z, Rr | Store Indirect and Pre-Decrement – Zapis pośredni z predekrementacją z indeksem Z | Z ← Z - 1, (Z) ← Rr | żaden | 2 |
STD | Z+q,Rr | Store Indirect with Displacement – Zapis pośredni z przesunięciem z indeksem Z | (Z + q) ← Rr | żaden | 2 |
STS | k, Rr | Store Direct to data space – Zapis bezpośredni w przestrzeni danych | (k) ← Rd | żaden | 2 |
LPM | Load Program Memory – Ładowanie z pamięci programu | R0 ← (Z) | żaden | 3 | |
LPM | Rd, Z | Load Program Memory – Ładowanie z pamięci programu | Rd ← (Z) | żaden | 3 |
LPM | Rd, Z+ | Load Program Memory and Post-Increment – Ładowanie z pamięci programu z postinkrementacją | Rd ← (Z), Z ← Z + 1 | żaden | 3 |
SPM | Store Program Memory – Zapis w pamięci programu | (Z) ← R1:R0 | żaden | – | |
IN | Rd, A | In From I/O Location – Odczyt z komórki we/wy | Rd ← I/O(A) | żaden | 1 |
OUT | A, Rr | Out To I/O Location – Zapis do komórki we/wy | I/O(A) ← Rr | żaden | 1 |
PUSH | Rr | Push Register on Stack – Zapis rejestru na stos | STACK ← Rr | żaden | 2 |
POP | Rd | Pop Register from Stack – Pobranie rejestru ze stosu | Rd ← STACK | żaden | 2 |
Instrukcje Operacji na Bitach oraz Testowania Bitów | |||||
SBI | A, b | Set Bit in I/O Register – Ustawienie bitu w rejestrze we/wy | I/O(A, b) ← 1 | żaden | 2 |
CBI | A, b | Clear Bit in I/O Register – Zerowanie bitu w rejestrze we/wy | I/O(A, b) ← 0 | żaden | 2 |
LSL | Rd | Logical Shift Left – Logiczne przesunięcie w lewo | Rd(n+1)←Rd(n),Rd(0) ← 0,C←Rd(7), n=0..6 | Z,C,N,V,H | 1 |
LSR | Rd | Logical Shift Right – Logiczne przesunięcie w prawo | Rd(n)←Rd(n+1),Rd(7) ← 0,C←Rd(0), n=0..6 | Z,C,N,V | 1 |
ROL | Rd | Rotate Left Through Carry – Obrót w lewo poprzez przeniesienie | Rd(0)←C,Rd(n+1) ← Rd(n),C←Rd(7), n=0..6 | Z,C,N,V,H | 1 |
ROR | Rd | Rotate Right Through Carry – Obrót w prawo poprzez przeniesienie | Rd(7)←C,Rd(n)←Rd(n+1),C ← Rd(0), n=0..6 | Z,C,N,V | 1 |
ASR | Rd | Arithmetic Shift Right – Arytmetyczne przesunięcie w prawo | Rd(n) ← Rd(n+1), n=0..6 | Z,C,N,V | 1 |
SWAP | Rd | Swap Nibbles – Wymiana 4 górnych bitów z 4 dolnymi | Rd(3..0) ↔ Rd(7..4) | żaden | 1 |
BSET | s | Flag Set – Ustawienie znacznika w rejestrze stanu SREG | SREG(s) ← 1 | SREG(s) | 1 |
BCLR | s | Flag Clear – Zerowanie znacznika w rejestrze stanu SREG | SREG(s) ← 0 | SREG(s) | 1 |
BST | Rr, b | Bit Store from Register to T – Zapis bitu z rejestru w T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Bit load from T to Register – Załadowanie bitu z T do rejestru | Rd(b) ← T | żaden | 1 |
SEC | Set Carry – Ustawienie przeniesienia | C ← 1 | C | 1 | |
CLC | Clear Carry – Zerowanie przeniesienia | C ← 0 | C | 1 | |
SEN | Set Negative Flag – Ustawienie znacznika wyniku ujemnego | N ← 1 | N | 1 | |
CLN | Clear Negative Flag – Zerowanie znacznika wyniku ujemnego | N ← 0 | N | 1 | |
SEZ | Set Zero Flag – Ustawienie znacznika zera | Z ← 1 | Z | 1 | |
CLZ | Clear Zero Flag – Zerowanie znacznika zera | Z ← 0 | Z | 1 | |
SEI | Global Interrupt Enable – Globalne włączenie przerwań | I ← 1 | I | 1 | |
CLI | Global Interrupt Disable – Globalne wyłączenie przerwań | I ← 0 | I | 1 | |
SES | Set Signed Test Flag – Ustawienie znacznika znaku wyniku | S ← 1 | S | 1 | |
CLS | Clear Signed Test Flag – Zerowanie znacznika znakowego | S ← 0 | S | 1 | |
SEV | Set Two’s Complement Overflow – Ustawienie znacznika nadmiaru U2 | V ← 1 | V | 1 | |
CLV | Clear Two’s Complement Overflow – Zerowanie znacznika nadmiaru U2 | V ← 0 | V | 1 | |
SET | Set T in SREG – Ustawienie bitu T w rejestrze stanu | T ← 1 | T | 1 | |
CLT | Clear T in SREG – Zerowanie bitu T w rejestrze stanu | T ← 0 | T | 1 | |
SEH | Set Half Carry Flag in SREG – Ustawienie znacznika przeniesienia połówkowego w rejestrze stanu | H ← 1 | H | 1 | |
CLH | Clear Half Carry Flag in SREG – Zerowanie znacznika przeniesienia połówkowego w rejestrze stanu | H ← 0 | H | 1 | |
Instrukcje Sterujące Mikrokontrolerem | |||||
NOP | No Operation – Operacja pusta | żaden | 1 | ||
SLEEP | Sleep – Wejście w tryb uśpienia (zobacz na opis Sleep) | żaden | 1 | ||
WDR | Watchdog Reset – Reset licznika zegarowego (zobacz na opis WDR) | żaden | 1 | ||
BREAK | Break – Przerwa | tylko dla wewnętrznego debugera | żaden | N/A |
© 2013 Atmel Corporation. All rights reserved.
Atmel®, logo and combinations thereof, and others are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be trademarks of others.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.