Nauczyłem się na 68HC11 w college'u. Są bardzo proste w obsłudze, ale szczerze mówiąc większość mikrokontrolerów o niskiej mocy będzie podobna (AVR, 8051, PIC, MSP430). Najważniejszą rzeczą, która zwiększy złożoność programowania ASM dla mikrokontrolerów, jest liczba i rodzaj obsługiwanych trybów adresowania pamięci . Na początku należy unikać bardziej skomplikowanych urządzeń, takich jak wyższej klasy procesory ARM.
Prawdopodobnie poleciłbym MSP430 jako dobry punkt wyjścia. Może napisz program w C i naucz się, zastępując różne funkcje asemblerem. Zacznij proste, x + y = z itp.
Po zamianie funkcji lub algorytmu na asemblowanie porównaj i skontrastuj sposób w jaki kodowałeś i co wygenerował kompilator C. Moim zdaniem jest to prawdopodobnie jeden z lepszych sposobów uczenia się asemblera, a jednocześnie dowiedz się, jak działa kompilator, który jest niezwykle cenny jako programista osadzony. Upewnij się tylko, że najpierw wyłączysz optymalizacje w kompilatorze C. W przeciwnym razie wygenerowany kod kompilatora prawdopodobnie będzie bardzo zagmatwany. Stopniowo włącz optymalizacje i zwróć uwagę na to, co robi kompilator.
RISC vs CISC
RISC oznacza „obliczanie zredukowanego zestawu instrukcji”, nie odnosi się do określonego zestawu instrukcji, ale po prostu strategię projektowania, która mówi, że procesor ma minimalny zestaw instrukcji. Niewiele instrukcji, z których każdy robi coś podstawowego. Nie ma ściśle technicznej definicji tego, co trzeba „być RISC”. Z drugiej strony architektury CISC mają wiele instrukcji, ale każda „robi więcej”.
Celowe zalety RISC polegają na tym, że konstrukcja procesora wymaga mniejszej liczby tranzystorów, co oznacza mniejsze zużycie energii (duże w przypadku mikrokontrolerów), tańsze w produkcji i wyższe częstotliwości taktowania, co prowadzi do większej wydajności. Niższe zużycie energii i tańsze wytwarzanie są na ogół prawdziwe, większa wydajność tak naprawdę nie osiągnęła celu w wyniku ulepszeń w architekturze CISC.
Prawie wszystkie rdzenie procesorów są obecnie projektowane w technologii RISC lub „środkowej płaszczyźnie”. Nawet z najbardziej znaną (lub niesławną) architekturą CISC, x86. Nowoczesne procesory x86 są wewnętrznie rdzeniami RISC z dekoderem przykręconym z przodu, który rozkłada instrukcje x86 na wiele instrukcji podobnych do RISC. Myślę, że Intel nazywa te „mikrooperacje”.
Jeśli chodzi o to, które (RISC kontra CISC) jest łatwiejsze do nauczenia się w asemblerze, myślę, że to los. Robienie czegoś z zestawem instrukcji RISC zazwyczaj wymaga więcej linii asemblowania niż robienie tego samego z zestawem instrukcji CISC. Z drugiej strony zestawy instrukcji CISC są trudniejsze do nauczenia ze względu na większą liczbę dostępnych instrukcji.
Większość powodów, dla których CISC dostaje złą nazwę, to fakt, że x86 jest zdecydowanie najczęstszym przykładem i jest trochę bałaganu w pracy. Myślę, że wynika to głównie z tego, że zestaw instrukcji x86 jest bardzo stary i został rozszerzony pół tuzina lub więcej razy przy zachowaniu kompatybilności wstecznej. Nawet twój 4.5Ghz core i7 może działać w trybie 286 (i robi to przy starcie systemu).
Jeśli chodzi o ARM będący architekturą RISC, uważam to za umiarkowanie dyskusyjne. Jest to z pewnością architektura magazynu ładunków. Podstawowy zestaw instrukcji jest podobny do RISC, ale w ostatnich wersjach zestaw instrukcji urósł całkiem do tego stopnia, że osobiście uważam, że jest to raczej środek pośredni między RISC a CISC. Zestaw instrukcji kciuka jest naprawdę najbardziej „RYZYCYJNYM” z zestawu instrukcji ARM.