Rys. 3. Schemat blokowy architektury AVR
Sześć spośród 32 rejestrów roboczych może być używane jako trzy 16-bitowe rejestry wskaźnikowe (X, Y, Z) w trybie adresowania pośredniego. Daje to możliwość wykonywania szybkich przeliczeń danych. Jeden z tych trzech wskaźników adresu (Z) może być użyty jako wskaźnik adresu w tzw. lookup tables w pamięci flash programu.
Jednostka ALU umożliwia wykonywanie operacji arytmetycznych i logicznych między rejestrami, miedzy stałą a rejestrem, oraz także operacji na pojedynczym rejestrze. Po wykonaniu operacji uaktualniany jest rejestr statusowy dający informacje o rezultacie.
Działanie programu jest możliwe dzięki warunkowym i bezwarunkowym skokom i instrukcjom rozgałęziającym, dającym bezpośredni dostęp do całej przestrzeni adresowej. Większa część instrukcji AVR ma format pojedynczego 16-bitowego słowa. Każdy adres pamięci programu zawiera 16 lub 32-bitową instrukcję.
Pamięć programu może być podzielona na dwie sekcje: sekcję programu botującego, oraz sekcję programu aplikacji. Obie części mają indywidualne bity bezpieczeństwa (Lock bits) do zabezpieczenia przed odczytem i nadpisaniem zawartości (np. przez programator). Program sekcji botującej może służyć np. do aktualizacji oprogramowania systemu, gdyż tylko z tej części pamięci programu może być wykonywana instrukcja SPM nadpisująca pamięć flash aplikacji.
Podczas przerwań i wywołań procedur podrzędnych adres powrotny licznika programu jest przechowywany w pamięci stosu. Stos zajmuje obszar pamięci SRAM, więc jego rozmiar jest ograniczony wielkością tej pamięci. Każdy program musi zainicjalizować wskaźnik stosu SP w procedurze obsługi resetu, zanim zostanie wywołana obsługa przerwania czy podprocedura.