AVR-контроллеры построены по Гарвардской архитектуре, как большинство микроконтроллеров
общего назначения. Это значит, что память делится у них на память данных и память программ.
В памяти программ, как следует из названия, хранится исполняемый код программы. Также
в ней могут располагаться и данные, доступные только для чтения, которые заносятся при
программировании контроллера. В ходе выполнения программа не может модифицировать свой код.
Память данных делится на четыре раздела:
- регистровый файл;
- служебные регистры или "память ввода-вывода";
- собственно статическое ОЗУ (SRAM);
- EEPROM.
Память этих разделов доступна для чтения и записи за исключением некоторой части
служебных регистров, доступных только для чтения.
EEPROM данных является разделом, не входящим ни в одно адресное
пространство, поэтому мы рассмотрим её отдельно. А пока займёмся непосредственно
режимами адресации.
Относительная адресация используется только в командах RJMP и RCALL. Адрес следующей
команды вычисляется относительно текущего значения счётчика комманд, используя
формулу PC=PC+k+1, где -2048<=k<=2047.