Atmel AVR instruction set

The AVR was one of the first microcontroller families to use on-chip flash memory for program storage.

The lower-numbered register of the pair holds the least significant bits and must be even-numbered.

Some registers (RAMPX, RAMPY) may not be present on machines with less than 64 KiB of addressable memory.

A typical ATmega memory map may look like: where RAMEND is the last RAM address.

Arithmetic operations work on registers R0–R31 but not directly on RAM and take one clock cycle, except for multiplication and word-wide addition (ADIW and SBIW) which take two cycles.

Indirect access (including optional postincrement, predecrement or constant displacement) is possible through registers X, Y, and Z.

Conditional branches (BRxx) can test an ALU flag and jump to specified address.

This is the case of the instructions performing multiplications, extended loads/jumps/calls, long jumps, and power control.

Confusingly, "ATtiny" branded processors have a variety of cores, including AVR1 (ATtiny11, ATtiny28), classic (ATtiny22, ATtiny26), classic+ (ATtiny24) and AVRtiny (ATtiny20, ATtiny40).

All 16-bit operations are deleted, as are IJMP, ICALL, and all load and store addressing modes except indirect via Z.