5. AVR Assembly Instruction Set
Operand Notation
Before diving into the instructions, here are the common operand symbols used:
| Symbol |
Description |
| Rd |
Destination register (R0-R31). The result of the operation is stored here. |
| Rr |
Source register (R0-R31). Used as input for the operation. |
| K |
Constant/Immediate value (8-bit: 0-255 or 0x00-0xFF). |
| k |
Address constant for SRAM or program memory. |
| A |
I/O register address (0-63 for IN/OUT, 0-31 for SBI/CBI). |
| b |
Bit number (0-7) within a register or I/O address. |
| X, Y, Z |
Pointer registers (X=R27:R26, Y=R29:R28, Z=R31:R30). |
Note: Some instructions only work with upper registers (R16-R31), such as LDI, ANDI, ORI, SUBI, SBCI, and CPI.
A. Data Transfer Instructions
Used to move data between registers or between registers and memory/I/O.
| Mnemonic |
Operand |
Description |
Example |
Notes |
| LDI |
Rd, K |
Load Immediate |
LDI R16, 0xFF |
Loads 8-bit constant K into register Rd (R16-R31 only) |
| MOV |
Rd, Rr |
Move/Copy Register |
MOV R0, R1 |
Copies contents of register Rr to Rd |
| IN |
Rd, A |
Input from I/O |
IN R16, PINB |
Reads data from I/O port A to register Rd |
| OUT |
A, Rr |
Output to I/O |
OUT PORTB, R16 |
Sends data from register Rr to I/O port A |
| LDS |
Rd, k |
Load from SRAM |
LDS R16, 0x0100 |
Loads data from SRAM address k to register Rd |
| STS |
k, Rr |
Store to SRAM |
STS 0x0100, R16 |
Stores register Rr contents to SRAM address k |
| LD |
Rd, X/Y/Z |
Load Indirect |
LD R16, X |
Loads data from address pointed by pointer X/Y/Z |
| ST |
X/Y/Z, Rr |
Store Indirect |
ST X, R16 |
Stores data to address pointed by pointer X/Y/Z |
| PUSH |
Rr |
Push to Stack |
PUSH R16 |
Saves register to stack |
| POP |
Rd |
Pop from Stack |
POP R16 |
Retrieves data from stack to register |
B. Bit Manipulation Instructions (I/O Specific)
These instructions operate on the lower 32 I/O addresses ($00-$1F). Very efficient for changing one bit without affecting other bits.
| Mnemonic |
Operand |
Description |
Example |
Notes |
| SBI |
A, b |
Set Bit in I/O |
SBI DDRB, 5 |
Sets bit b in I/O register A to 1 |
| CBI |
A, b |
Clear Bit in I/O |
CBI PORTB, 5 |
Clears bit b in I/O register A to 0 |
| BST |
Rr, b |
Bit Store to T |
BST R16, 3 |
Copies bit b from register Rr to T flag |
| BLD |
Rd, b |
Bit Load from T |
BLD R17, 5 |
Copies T flag to bit b of register Rd |
C. Arithmetic Instructions
| Mnemonic |
Operand |
Description |
Example |
Notes |
| ADD |
Rd, Rr |
Add |
ADD R1, R2 |
Rd = Rd + Rr |
| ADC |
Rd, Rr |
Add with Carry |
ADC R1, R2 |
Rd = Rd + Rr + C (Carry flag) |
| SUB |
Rd, Rr |
Subtract |
SUB R16, R17 |
Rd = Rd - Rr |
| SBC |
Rd, Rr |
Subtract with Carry |
SBC R16, R17 |
Rd = Rd - Rr - C |
| SUBI |
Rd, K |
Subtract Immediate |
SUBI R16, 10 |
Rd = Rd - K (R16-R31 only) |
| SBCI |
Rd, K |
Subtract Immediate with Carry |
SBCI R17, 0 |
Rd = Rd - K - C |
| INC |
Rd |
Increment |
INC R16 |
Rd = Rd + 1 |
| DEC |
Rd |
Decrement |
DEC R16 |
Rd = Rd - 1 |
| MUL |
Rd, Rr |
Multiply Unsigned |
MUL R16, R17 |
R1:R0 = Rd × Rr (16-bit result) |
| MULS |
Rd, Rr |
Multiply Signed |
MULS R16, R17 |
R1:R0 = Rd × Rr (signed) |
| NEG |
Rd |
Negate (Two's Complement) |
NEG R16 |
Rd = 0x00 - Rd |
D. Logic Instructions
| Mnemonic |
Operand |
Description |
Example |
Notes |
| AND |
Rd, Rr |
Logical AND |
AND R1, R2 |
Rd = Rd AND Rr |
| ANDI |
Rd, K |
AND Immediate |
ANDI R16, 0x0F |
Rd = Rd AND K (masking) |
| OR |
Rd, Rr |
Logical OR |
OR R1, R2 |
Rd = Rd OR Rr |
| ORI |
Rd, K |
OR Immediate |
ORI R16, 0x80 |
Rd = Rd OR K |
| EOR |
Rd, Rr |
Exclusive OR |
EOR R16, R17 |
Rd = Rd XOR Rr |
| COM |
Rd |
One's Complement |
COM R16 |
Rd = 0xFF - Rd (inverts all bits) |
| CLR |
Rd |
Clear Register |
CLR R16 |
Rd = 0 (same as EOR Rd, Rd) |
| SER |
Rd |
Set Register |
SER R16 |
Rd = 0xFF (R16-R31 only) |
E. Shift & Rotate Instructions
| Mnemonic |
Operand |
Description |
Example |
Notes |
| LSL |
Rd |
Logical Shift Left |
LSL R16 |
Shift left, bit 0 = 0, bit 7 → Carry |
| LSR |
Rd |
Logical Shift Right |
LSR R16 |
Shift right, bit 7 = 0, bit 0 → Carry |
| ROL |
Rd |
Rotate Left through Carry |
ROL R16 |
Rotate left through Carry flag |
| ROR |
Rd |
Rotate Right through Carry |
ROR R16 |
Rotate right through Carry flag |
| ASR |
Rd |
Arithmetic Shift Right |
ASR R16 |
Shift right, bit 7 remains (preserve sign) |
| SWAP |
Rd |
Swap Nibbles |
SWAP R16 |
Swaps upper and lower 4-bits in register |
F. Branch & Control Flow Instructions
| Mnemonic |
Operand |
Description |
Example |
Notes |
| RJMP |
k |
Relative Jump |
RJMP loop |
Jump to label k (±2K words) |
| JMP |
k |
Jump |
JMP far_label |
Jump to 22-bit address (all memory) |
| RCALL |
k |
Relative Call |
RCALL delay |
Call subroutine relative to PC |
| CALL |
k |
Call |
CALL far_sub |
Call subroutine at 22-bit address |
| RET |
- |
Return |
RET |
Return from subroutine |
| RETI |
- |
Return from Interrupt |
RETI |
Return from interrupt handler |
| CP |
Rd, Rr |
Compare |
CP R16, R17 |
Compare Rd with Rr (updates flags) |
| CPI |
Rd, K |
Compare Immediate |
CPI R16, 5 |
Compare Rd with constant K |
| CPC |
Rd, Rr |
Compare with Carry |
CPC R17, R19 |
For multi-byte comparison |
| BREQ |
k |
Branch if Equal |
BREQ target |
Jump if Z flag = 1 (result equal) |
| BRNE |
k |
Branch if Not Equal |
BRNE loop |
Jump if Z flag = 0 (result not equal) |
| BRLO |
k |
Branch if Lower |
BRLO less |
Jump if C flag = 1 (unsigned <) |
| BRSH |
k |
Branch if Same or Higher |
BRSH greater |
Jump if C flag = 0 (unsigned ≥) |
| BRLT |
k |
Branch if Less Than |
BRLT neg |
Jump if S flag = 1 (signed <) |
| BRGE |
k |
Branch if Greater or Equal |
BRGE pos |
Jump if S flag = 0 (signed ≥) |
G. Skip Instructions
| Mnemonic |
Operand |
Description |
Example |
Notes |
| SBIS |
A, b |
Skip if Bit in I/O Set |
SBIS PINB, 0 |
Skip next instruction if bit = 1 |
| SBIC |
A, b |
Skip if Bit in I/O Cleared |
SBIC PIND, 2 |
Skip next instruction if bit = 0 |
| SBRS |
Rr, b |
Skip if Bit in Register Set |
SBRS R16, 7 |
Skip if bit b in register = 1 |
| SBRC |
Rr, b |
Skip if Bit in Register Cleared |
SBRC R16, 0 |
Skip if bit b in register = 0 |
H. Other Instructions
| Mnemonic |
Operand |
Description |
Example |
Notes |
| NOP |
- |
No Operation |
NOP |
Does nothing (1 clock cycle) |
| SLEEP |
- |
Sleep |
SLEEP |
Enters sleep mode (power saving) |
| WDR |
- |
Watchdog Reset |
WDR |
Resets watchdog timer |
| SBIW |
Rd, K |
Subtract Immediate from Word |
SBIW R24, 1 |
Subtract K from 16-bit value (R25:R24) |
| ADIW |
Rd, K |
Add Immediate to Word |
ADIW R24, 1 |
Add K to 16-bit value |
No comments to display
No comments to display