Status Register (SREG): SREG: Status register C: Carry flag in status register Z: Zero flag in status register N: Negative flag in status register V: Twos complement overflow indicator S: N Å V, For signed tests H: Half Carry flag in the status register T: Transfer bit used by BLD and BST instructions I: Global interrupt enable/disable flag |
X,Y,Z: Indirect address register (X=R27:R26, Y=R29:R28 and Z=R31:R30) P: I/O port address q: Displacement for direct addressing (6 bit) I/O Registers RAMPX, RAMPY, RAMPZ: Registers concatenated with the X, Y and Z registers enabling indirect addressing of the whole SRAM area on MCUs with more than 64K bytes SRAM. |
Registers and operands: Rd: Destination (and source) register in the register file Rr: Source register in the register file R: Result after instruction is executed K: Constant literal or byte data (8 bit) k: Constant address data for program counter b: Bit in the register file or I/O register (3 bit) s: Bit in the status register (3 bit) |
Stack: STACK:Stack for return address and pushed registers SP: Stack Pointer to STACK Flags: Û: Flag affected by instruction 0: Flag cleared by instruction 1: Flag set by instruction -: Flag not affected by instruction |
Mnemonics |
Operands |
Description |
Operation |
Flags |
Clocks |
---|---|---|---|---|---|
ADD | Rd, Rr | Add without Carry | Rd![]() |
Z,C,N,V,H | 1 |
ADC | Rd, Rr | Add with Carry | Rd![]() |
Z,C,N,V,H | 1 |
ADIW | Rd, K | Add Immediate to Word | Rd+1:Rd![]() |
Z,C,N,V | 2 |
SUB | Rd, Rr | Subtract without Carry | Rd![]() |
Z,C,N,V,H | 1 |
SUBI | Rd, K | Subtract Immediate | Rd![]() |
Z,C,N,V,H | 1 |
SBC | Rd, Rr | Subtract with Carry | Rd![]() |
Z,C,N,V,H | 1 |
SBCI | Rd, K | Subtract Immediate with Carry | Rd![]() |
Z,C,N,V,H | 1 |
SBIW | Rd, K | Subtract Immediate from Word | Rd+1:Rd![]() |
Z,C,N,V | 2 |
AND | Rd, Rr | Logical AND | Rd![]() |
Z,N,V | 1 |
ANDI | Rd, K | Logical AND with Immediate | Rd![]() |
Z,N,V | 1 |
OR | Rd, Rr | Logical OR | Rd![]() |
Z,N,V | 1 |
ORI | Rd, K | Logical OR with Immediate | Rd Rd v K | Z,N,V | 1 |
EOR | Rd, Rr | Exclusive OR | Rd![]() ![]() |
Z,N,V | 1 |
COM | Rd | One's Complement | Rd![]() |
Z,C,N,V | 1 |
NEG | Rd | Two's Complement | Rd![]() |
Z,C,N,V,H | 1 |
SBR | Rd,K | Set Bit(s) in Register | Rd![]() |
Z,N,V | 1 |
CBR | Rd,K | Clear Bit(s) in Register | Rd![]() |
Z,N,V | 1 |
INC | Rd | Increment | Rd![]() |
Z,N,V | 1 |
DEC | Rd | Decrement | Rd![]() |
Z,N,V | 1 |
TST | Rd | Test for Zero or Minus | Rd![]() |
Z,N,V | 1 |
CLR | Rd | Clear Register | Rd![]() ![]() |
Z,N,V | 1 |
SER | Rd | Set Register | Rd![]() |
None | 1 |
CP | Rd,Rr | Compare | Rd - Rr | Z,C,N,V,H | 1 |
CPC | Rd,Rr | Compare with Carry | Rd - Rr - C | Z,C,N,V,H | 1 |
CPI | Rd,K | Compare with Immediate | Rd - K | Z,C,N,V,H | 1 |
Mnemonics |
Operands |
Description |
Operation |
Flags |
Clocks |
---|---|---|---|---|---|
RJMP | k | Relative Jump | PC![]() |
None | 2 |
IJMP | Indirect Jump to (Z) | PC![]() |
None | 2 | |
JMP | k | Jump | PC![]() |
None | 3 |
RCALL | k | Relative Call Subroutine | PC![]() |
None | 3 |
ICALL | Indirect Call to (Z) | PC![]() |
None | 3 | |
CALL | k | Call Subroutine | PC![]() |
None | 4 |
RET | Subroutine Return | PC![]() |
None | 4 | |
RETI | Interrupt Return | PC![]() |
I | 4 | |
CPSE | Rd,Rr | Compare, Skip if Equal | if (Rd = Rr) PC![]() |
None | 1 / 2 / 3 |
SBRC | Rr, b | Skip if Bit in Register Cleared | if (Rr(b)=0) PC![]() |
None | 1 / 2 / 3 |
SBRS | Rr, b | Skip if Bit in Register Set | if (Rr(b)=1) PC![]() |
None | 1 / 2 / 3 |
SBIC | P, b | Skip if Bit in I/O Register Cleared | if(I/O(P,b)=0) PC![]() |
None | 1 / 2 / 3 |
SBIS | P, b | Skip if Bit in I/O Register Set | If(I/O(P,b)=1) PC![]() |
None | 1 / 2 / 3 |
BRBS | s, k | Branch if Status Flag Set | if (SREG(s) = 1) then PC![]() |
None | 1 / 2 |
BRBC | s, k | Branch if Status Flag Cleared | if (SREG(s) = 0) then PC![]() |
None | 1 / 2 |
BREQ | k | Branch if Equal | if (Z = 1) then PC![]() |
None | 1 / 2 |
BRNE | k | Branch if Not Equal | if (Z = 0) then PC![]() |
None | 1 / 2 |
BRCS | k | Branch if Carry Set | if (C = 1) then PC![]() |
None | 1 / 2 |
BRCC | k | Branch if Carry Cleared | if (C = 0) then PC![]() |
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) then PC![]() |
None | 1 / 2 |
BRMI | k | Branch if Minus | if (N = 1) then PC![]() |
None | 1 / 2 |
BRPL | k | Branch if Plus | if (N = 0) then PC![]() |
None | 1 / 2 |
BRGE | k | Branch if Greater or Equal, Signed | if (N![]() ![]() |
None | 1 / 2 |
BRLT | k | Branch if Less Than, Signed | if (N![]() ![]() |
None | 1 / 2 |
BRHS | k | Branch if Half Carry Flag Set | if (H = 1) then PC![]() |
None | 1 / 2 |
BRHC | k | Branch if Half Carry Flag Cleared | if (H = 0) then PC![]() |
None | 1 / 2 |
BRTS | k | Branch if T Flag Set | if (T = 1) then PC![]() |
None | 1 / 2 |
BRTC | k | Branch if T Flag Cleared | if (T = 0) then PC![]() |
None | 1 / 2 |
BRVS | k | Branch if Overflow Flag is Set | if (V = 1) then PC![]() |
None | 1 / 2 |
BRVC | k | Branch if Overflow Flag is Cleared | if (V = 0) then PC![]() |
None | 1 / 2 |
BRIE | k | Branch if Interrupt Enabled | if ( I = 1) then PC![]() |
None | 1 / 2 |
BRID | k | Branch if Interrupt Disabled | if ( I = 0) then PC![]() |
None | 1 / 2 |
Mnemonics |
Operands |
Description |
Operation |
Flags |
Clocks |
---|---|---|---|---|---|
MOV | Rd, Rr | Copy Register | Rd![]() |
None | 1 |
LDI | Rd, K | Load Immediate | Rd![]() |
None | 1 |
LDS | Rd, k | Load Direct from SRAM | Rd![]() |
None | 3 |
LD | Rd, X | Load Indirect | Rd![]() |
None | 2 |
LD | Rd, X+ | Load Indirect and Post-Increment | Rd![]() ![]() |
None | 2 |
LD | Rd, -X | Load Indirect and Pre-Decrement | X![]() |
None | 2 |
LD | Rd, Y | Load Indirect | Rd![]() |
None | 2 |
LD | Rd, Y+ | Load Indirect and Post-Increment | Rd![]() ![]() |
None | 2 |
LD | Rd, -Y | Load Indirect and Pre-Decrement | Y![]() ![]() |
None | 2 |
LDD | Rd,Y+q | Load Indirect with Displacement | Rd![]() |
None | 2 |
LD | Rd, Z | Load Indirect | Rd![]() |
None | 2 |
LD | Rd, Z+ | Load Indirect and Post-Increment | Rd![]() ![]() |
None | 2 |
LD | Rd, -Z | Load Indirect and Pre-Decrement | Z![]() ![]() |
None | 2 |
LDD | Rd, Z+q | Load Indirect with Displacement | Rd![]() |
None | 2 |
STS | k, Rr | Store Direct to SRAM | Rd![]() |
None | 3 |
ST | X, Rr | Store Indirect | (X)![]() |
None | 2 |
ST | X+, Rr | Store Indirect and Post-Increment | (X)![]() ![]() |
None | 2 |
ST | -X, Rr | Store Indirect and Pre-Decrement | X![]() |
None | 2 |
ST | Y, Rr | Store Indirect | (Y)![]() |
None | 2 |
ST | Y+, Rr | Store Indirect and Post-Increment | (Y)![]() ![]() |
None | 2 |
ST | -Y, Rr | Store Indirect and Pre-Decrement | Y![]() ![]() |
None | 2 |
STD | Y+q,Rr | Store Indirect with Displacement | (Y + q)![]() |
None | 2 |
ST | Z, Rr | Store Indirect | (Z)![]() |
None | 2 |
ST | Z+, Rr | Store Indirect and Post-Increment | (Z)![]() ![]() |
None | 2 |
ST | -Z, Rr | Store Indirect and Pre-Decrement | Z![]() ![]() |
None | 2 |
STD | Z+q,Rr | Store Indirect with Displacement | (Z + q)![]() |
None | 2 |
LPM | Load Program Memory | R0![]() |
None | 3 | |
IN | Rd, P | In Port | Rd![]() |
None | 1 |
OUT | P, Rr | Out Port | P![]() |
None | 1 |
PUSH | Rr | Push Register on Stack | STACK![]() |
None | 2 |
POP | Rd | Pop Register from Stack | Rd![]() |
None | 2 |
Mnemonics |
Operands |
Description |
Operation |
Flags |
#Clock Note |
---|---|---|---|---|---|
LSL | Rd | Logical Shift Left | Rd(n+1)![]() ![]() ![]() |
Z,C,N,V,H | 1 |
LSR | Rd | Logical Shift Right | Rd(n)![]() ![]() ![]() |
Z,C,N,V | 1 |
ROL | Rd | Rotate Left Through Carry | Rd(0)![]() ![]() ![]() |
Z,C,N,V,H | 1 |
ROR | Rd | Rotate Right Through Carry | Rd(7)![]() ![]() ![]() |
Z,C,N,V | 1 |
ASR | Rd | Arithmetic Shift Right | Rd(n)![]() |
Z,C,N,V | 1 |
SWAP | Rd | Swap Nibbles | Rd(3..0)![]() |
None | 1 |
BSET | s | Flag Set | SREG(s)![]() |
SREG(s) | 1 |
BCLR | s | Flag Clear | SREG(s)![]() |
SREG(s) | 1 |
SBI | P, b | Set Bit in I/O Register | I/O(P, b)![]() |
None | 2 |
CBI | P, b | Clear Bit in I/O Register | I/O(P, b)![]() |
None | 2 |
BST | Rr, b | Bit Store from Register to T | T![]() |
T | 1 |
BLD | Rd, b | Bit load from T to Register | Rd(b)![]() |
None | 1 |
SEC | Set Carry | C![]() |
C | 1 | |
CLC | Clear Carry | C![]() |
C | 1 | |
SEN | Set Negative Flag | N![]() |
N | 1 | |
CLN | Clear Negative Flag | N![]() |
N | 1 | |
SEZ | Set Zero Flag | Z![]() |
Z | 1 | |
CLZ | Clear Zero Flag | Z![]() |
Z | 1 | |
SEI | Global Interrupt Enable | I![]() |
I | 1 | |
CLI | Global Interrupt Disable | I![]() |
I | 1 | |
SES | Set Signed Test Flag | S![]() |
S | 1 | |
CLS | Clear Signed Test Flag | S![]() |
S | 1 | |
SEV | Set Two's Complement Overflow | V![]() |
V | 1 | |
CLV | Clear Two's Complement Overflow | V![]() |
V | 1 | |
SET | Set T in SREG | T![]() |
T | 1 | |
CLT | Clear T in SREG | T![]() |
T | 1 | |
SEH | Set Half Carry Flag in SREG | H![]() |
H | 1 | |
CLH | Clear Half Carry Flag in SREG | H![]() |
H | 1 | |
NOP | No Operation | None | 1 | ||
SLEEP | Sleep | (see specific descr. for Sleep) | None | 1 | |
WDR | Watchdog | Reset (see specific descr. for WDR) | None | 1 |