@bajos
W znakomitej większości przypadków nie będziesz lepszy niż optymalizator gcc, kilkukrotnie boleśnie się o tym przekonałem. Nic złego w znajomości ASMa, ale generalnie ekstremalnie rzadko rzadko się tego używa. A jeśli koniecznie chcesz - to masz dokumentację.
A w skrócie: w AVR działasz na rejestrach a pamięć jest tylko do odczytu/zapisu.
Masz kilka (o ile pamiętam 3) par rejestrów wskaźnikowych żeby wygodnie się po niej poruszać, ale równie dobrze możesz używać ich jako normalnych rejestrów. Połowa rejestrów roboczych ma nieco większe możliwości od pozostałych (głównie operacje na w. natychmiastowych). Dla większych AVR masz dodatkowe instrukcje zapisu/odczytu dalszych obszarów pamięci/peryferiali.
Co do mądrych słówek: load to wczytanie, store zapis, immediate to wartość natychmiastowa (czyli np. w wyr. x + 5 - to 5 jest immediate), branch skok, call - skok ze śladem. Do tego kilka typów adresowań. Patrz na zakresy skoków, zwłaszcza względnych bo mają one ograniczone możliwości inkrementacji program countera, z drugiej strony zwykły skok zajmuje więcej pamięci programu i wykonuje się chyba dłużej.
Do tego poczytaj o makrach avrasm typu ramend, hbyte, lbyte oraz jak ustawiać stos: to jest o tyle problematyczne, że dla różnych AVR dzieje się to automatycznie lub nie w różnych momentach. Dodatkowo zwróć uwagę na rodzielenie pamięći flash i RAM oraz jak są one adresowane.
@Proxima czeeekaj, o co Ci chodzi z opkodami w eeprom? W sensie - uruchamianie wstawek/funkcji asemblerowych z RAMu? W ARM tak, Cortex M4 ma CCM-RAM specjalnie do takich zabaw (m.in.), ale w AVR nie masz szans tego zrobić bo architektura na to nie pozwala.