BI-SAP.21 Struktura a architektura počítačů
Jdi na navigaci předmětu

Instrukční soubor AVR-8bit

Seznam použitých symbolů

Rdosmibitový cílový registr číslo d
Rrosmibitový zdrojový registr číslo r
SREGstavový registr
R(d+1):R(d)dvojice cílových registrů spojených do jednoho šestnáctibitového slova. Např. R31:R30, R1:R0
R(r+1):R(r)dvojice zdrojových registrů spojených do jednoho šestnáctibitového slova. Např. R31:R30, R1:R0
Xšestnáctibitový registr sestavený z registrů R27:R26
Yšestnáctibitový registr sestavený z registrů R29:R28
Zšestnáctibitový registr sestavený z registrů R31:R30
Rd.(3..0)bity 0 až 3 z registru Rd
Rd.(7..4)bity 7 až 4 z registru Rd
Rr.bbit b ze zdrojového registru číslo r
Kpřímá konstanta (je součástí instrukce)
kpřímá adresa (je součástí instrukce)
qposunutí – displacement (je součástí instrukce)
SPukazatel zásobníku (Stack Pointer)
PCčítač programu (Program Counter)
SREG.sbit s ze stavového registru
Cpříznakový bit v SREG (Carry Flag)
Zpříznakový bit v SREG (Zero Flag – indikuje nulový výsledek)
Npříznakový bit v SREG (Negative Flag – indikuje záporné číslo)
Vpříznakový bit v SREG (Overflow Flag – indikuje přetečení u operací se znaménkem)
Spříznakový bit v SREG (indikuje N ⊕ V)
Hpříznakový bit v SREG (Half Carry Flag – indikuje přenos mezi bity 3 a 4)
Tpříznakový bit v SREG (Transfer bit – pro instrukce BLD, BST)
Ipříznakový bit v SREG (Global Interrupt Enable/Disable Flag – globální povolení/zakázání přerušení)
instrukce příznak mění
instrukce příznak nemění
↕ s=xinstrukce příznak mění jen pokud s=x
0příznak je nastaven na nulu (platí pouze pro pole příznaků)
1příznak je nastaven na jedničku (platí pouze pro pole příznaků)
data[addr]slabika datové paměti na adrese addr
code[addr]slabika programové paměti na adrese addr
port[P]vstupně/výstupní registr číslo P (port[P] ≡ data[P+32])
port[P].bbit b vstupně/výstupního registru číslo P
stack[addr]slabika zásobníkové paměti na adrese addr
stack[SP+1]vrchol zásobníku
logický součet (OR)
Λlogický součin (AND)
non-ekvivalence (XOR)
~ image004 ~negace (NOT)
přiřazení (R1←R0 znamená, že obsah registru R0 se zkopíruje do registru R1 a obsah registru R0 se nezmění)
výměna obsahu (např. R1↔R0 znamená, že obsah registru R0 se přesune do registru R1 a obsah registru R1 se současně přesune do R0)
<<posun vlevo (a << b znamená posun a o b bitů vlevo)
1/2/3alternativy v počtu taktů potřebných na vykonání instrukce v závislosti na podmínce.

Aritmetické a logické instrukce

InstrukcePopisPříznaky (SREG)Počet taktů
ITHSVNZC
ADD Rd, RrRd←Rd + Rr1
ADC Rd, RrRd←Rd + Rr + C1
ADIW Rd, KR(d+1):Rd←R(d+1):Rd + K2
SUB Rd, RrRd←Rd – Rr1
SUBI Rd, KRd←Rd – K1
SBC Rd, RrRd←Rd – Rr – C1
SBCI Rd, KRd←Rd – K – C1
SBIW Rd, KR(d+1):Rd←R(d+1):Rd – K2
AND Rd, RrRd←Rd Λ Rr01
ANDI Rd, KRd←Rd Λ K01
OR Rd, RrRd←Rd ∨ Rr01
ORI Rd, KRd←Rd ∨ K01
EOR Rd, RrRd←Rd ⊕ Rr01
COM RdRd← image006011
NEG RdRd← 0 – Rd1
SBR Rd, KRd←Rd ∨ K01
CBR Rd, KRd←Rd Λ image00401
INC RdRd←Rd + 11
DEC RdRd←Rd – 11
TST RdRd←Rd Λ Rd01
CLR RdRd←Rd ⊕ Rd00011
SER RdRd←2551
CP Rd, RrRd–Rr1
CPC Rd, RrRd – Rr – C1
CPI Rd, KRd – K1
MUL Rd, RrR1:R0←Rd×Rr
(Rd a Rr bez znaménka)
2
MULS Rd, RrR1:R0←Rd×Rr
(Rd a Rr se znaménkem)
2
MULSU Rd, RrR1:R0←Rd×Rr
(Rd se znaménkem a Rr bez znaménka)
2
FMUL Rd, RrR1:R0←(Rd×Rr)<<12
FMULS Rd, RrR1:R0←(Rd×Rr)<<1
(Rd a Rr se znaménkem)
2
FMULSU Rd, RrR1:R0←(Rd×Rr)<<1
(Rd se znaménkem a Rr bez znaménka)
2

Přesuny a load–store instrukce

InstrukcePopisPříznaky (SREG)Počet taktů
ITHSVNZC
MOV Rd, RrRd←Rr1
MOVW Rd, RrR(d+1):Rd←R(r+1):Rr1
LDI Rd, KRd←K1
LDS Rd, kRd←data[k]2
LD Rd, XRd←data[X]2
LD Rd, X+Rd←data[X], X←X+12
LD Rd, –XX←X–1, Rd←data[X]2
LD Rd, YRd←data[Y]2
LD Rd, Y+Rd←data[Y], Y←Y+12
LD Rd, –YY←Y–1, Rd←data[Y]2
LDD Rd, Y+qRd←data[Y+q]2
LD Rd, ZRd←data[Z]2
LD Rd, Z+Rd←data[Z], Z←Z+12
LD Rd, –ZZ←Z–1, Rd←data[Z]2
LDD Rd, Z+qRd←data[Z+q]2
STS k, Rrdata[k]←Rr2
ST X, Rrdata[X]←Rr2
ST X+, Rrdata[X]←Rr, X←X+12
ST –X, RrX←X–1, data[X]←Rr2
ST Y, Rrdata[Y]←Rr2
ST Y+, Rrdata[Y]←Rr, Y←Y+12
ST –Y, RrY←Y–1, data[Y]←Rr2
STD Y+q, Rrdata[Y+q]←Rr2
ST Z, Rrdata[Z]←Rr2
ST Z+, Rrdata[Z]←Rr, Z←Z+12
ST –Z, RrZ←Z–1, data[Z]←Rr2
STD Z+q, Rrdata[Z+q]←Rr2
LPMR0←code[Z]3
LPM Rd, ZRd←code[Z]3
LPM Rd, Z+Rd←code[Z], Z←Z+13
SPMcode[Z] ←R1:R0
IN Rd, PRd←port[P]1
OUT P, Rdport[P] ←Rd1
PUSH Rrstack[SP] ←Rr, SP←SP–12
POP RdSP←SP+1, Rd← stack[SP]2

Skokové instrukce

InstrukcePopisPříznaky (SREG)Počet taktů
ITHSVNZC
RJMP kRelativní skok (k=–2048 až 2047) + PC←PC k + 12
IJMPNepřímý skok přes Z registr
PC← Z
2
JMP kAbsolutní skok
PC← k
3
RCALL kRelativní skok do podprogramu(k=–2048 až 2047) + PC←PC k + 13
ICALLNepřímý skok do podprogramu přes Z registr
PC← Z
3
CALL kAbsolutní skok do podprogramu
PC← k
4
RETNávrat z podprogramu4
RETINávrat z obsluhy přerušení14
CPSE Rd, RrPorovnej a přeskoč následující instrukci pokud je Rd rovno Rr.
Jestliže (Rd=Rr), pak PC← PC + 2 nebo 3, jinak PC← PC + 1
1/2/3
SBRC Rr, bPřeskoč následující instrukci pokud je bit b v registru Rr nulový.
Jestliže (Rr.b=0), pak PC← PC + 2 nebo 3, jinak PC← PC + 1
1/2/3
SBRS Rr, bPřeskoč následující instrukci pokud je bit b v registru Rr roven jedné.
Jestliže (Rr.b=1), pak PC← PC + 2 nebo 3, jinak PC← PC + 1.
1/2/3
SBIC P, bPřeskoč následující instrukci pokud je bit b ve vstupně/výstupním registru nulový.
Jestliže (Port[P].b=0), pak PC← PC + 2 nebo 3, jinak PC← PC + 1.
1/2/3
SBIS P, bPřeskoč následující instrukcí pokud je bit b ve vstupně/výstupním registru roven jedné.
Jestliže (Port[P].b=1), pak PC← PC + 2 nebo 3, jinak PC← PC + 1.
1/2/3
BRBS s, kRelativní skok pokud bit s v SREG registru je roven jedné.
Jestliže (SREG.s=1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRBC s, kRelativní skok pokud bit s v SREG registru je roven nule.
Jestliže (SREG.s=0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BREQ kRelativní skok pokud je rovno.
Jestliže (Z=1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRNE kRelativní skok pokud není rovno.
Jestliže (Z=0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRCS kRelativní skok pokud je přenos C roven jedné.
Jestliže (C=1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRCC kRelativní skok pokud je přenos C roven nule.
Jestliže (C=0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRSH kRelativní skok pokud je větší nebo rovno (bez znaménka).
Jestliže (C=0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRLO kRelativní skok pokud je menší (bez znaménka).
Jestliže (C=1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRMI kRelativní skok pokud je záporné.
Jestliže (N=1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRPL kRelativní skok pokud je kladné.
Jestliže (N=0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRGE kRelativní skok pokud je větší nebo rovno (se znaménkem).
Jestliže (N ⊕ V =0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRLT kRelativní skok pokud je menší (se znaménkem).
Jestliže (N ⊕ V = 1), pak PC← PC + k + 1 jinak PC← PC + 1.
1/2
BRHS kRelativní skok pokud je H rovno jedné.
Jestliže (H = 1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRHC kRelativní skok pokud je H rovno nule.
Jestliže (H = 0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRTS kRelativní skok pokud je T rovno jedné.
Jestliže (T = 1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRTC kRelativní skok pokud je T rovno nule.
Jestliže (T = 0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRVS kRelativní skok pokud je overflow V rovno jedné.
Jestliže (V = 1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRVC kRelativní skok pokud je overflow V rovno nule.
Jestliže (V = 0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRIE kRelativní skok pokud je povoleno přerušení.
Jestliže (I = 1), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2
BRID kRelativní skok pokud zakázáno přerušení.
Jestliže (I = 0), pak PC← PC + k + 1, jinak PC← PC + 1.
1/2

Bitové a testovací instrukce

InstrukcePopisPříznaky (SREG)Počet taktů
ITHSVNZC
LSL RdLogický posuv vlevo image0091
LSR RdLogický posuv vpravo image01001
ROL RdRotace vlevo přes C image0111
ROR RdRotace vpravo přes C image0121
ASR RdAritmetický posuv vpravo image0131
SWAP RdVýměna dolní a horní čtveřice bitů
Rd(3..0) ↔ Rd(7..4)
1
BSET sNastavení bitu s v SREG na 1
SREG.s←1
s=7↕s=6↕s=5↕s=4↕s=3↕s=2↕s=1↕s=0↕1
BCLR sNastavení bitu s v SREG na 0
SREG.s←0
s=7↕s=6↕s=5↕s=4↕s=3↕s=2↕s=1↕s=0↕1
SBI P, bNastavení bitu b ve vstupně/výstupním registru P na 1
port[P].b←1
2
CBI P, bNastaví bit b v I/O registru P na 0
port[P].b←0
2
BST Rr, bUloží bit b z registru Rr do bitu T v registru SREG
T←Rr.b
1
BLD Rd. bNastaví bit b v registru Rd podle bitu T v registru SREG
Rd.b←T
1
SEII←111
CLII←001
SETT←111
CLTT←001
SEHH←111
CLHH←001
SESS←111
CLSS←001
SEVV←111
CLVV←001
SENN←111
CLNN←001
SEZZ←111
CLZZ←001
SECC←111
CLCC←001

Speciální instrukce

Příznaky (SREG)Počet taktů
ITHSVNZC
NOPPrázdná operace1
SLEEPPřechod do režimu nízké spotřeby1
WDRNulování watchdogu1
BREAKLadící instrukce1