Czyli ładujesz do rejestru wartość, następnie przesuwasz ją o 1 bit w lewo (bo adresy na AVR są zazwyczaj 16-bitowe. Teraz do tego dodajesz adres początku tablicy z adresami i następnie ładujesz do rejestrów adres skoku z tablicy przygotowanej tak jak Marek to opisał i wykonujesz skok.
Z drugiej strony, jeśli tak zależy ci na czasie, to prościej w menu zamiast ID, od razu jako ID umieszczać adres funkcji, która obsługuje daną pozycję menu.
Dodano po 3 [minuty]: JarekC napisał: I tu poproszę JacekCz aby napisał to w C (GCC) tak aby wynikowy kod nie przekroczył tego rozmiaru
W przypadku szyfrowania, np. AES, ważniejsze niż rozmiar jest poprawne napisanie tych funkcji, tak, aby nie dało się odzyskać klucza poprzez np. banalny pomiar prądu MCU. Np. w XMEGA tak skopali sprzętowo blok kryptograficzny, że odzyskanie klucza jest możliwe w ciągu kilku minut przy pomocy amperomierza/oscyloskopu.