Aprendí con un 68HC11 en la universidad. Son muy simples de trabajar, pero honestamente la mayoría de los microcontroladores de baja potencia serán similares (AVR, 8051, PIC, MSP430). La mayor cosa que añadirá complejidad a la programación ASM para microcontroladores es el número y tipo de memoria soportada modos de direccionamiento . Al principio deberías evitar los dispositivos más complicados, como los procesadores ARM de gama alta.
Probablemente recomendaría el MSP430 como un buen punto de partida. Tal vez escribir un programa en C y aprender mediante la sustitución de varias funciones con ensamblaje en línea. Empieza de forma sencilla, x + y = z, etc.
Después de reemplazar una función o algoritmo con ensamblador, compare y contraste cómo lo codificó y lo que generó el compilador de C. Esta es probablemente una de las mejores maneras de aprender ensamblaje en mi opinión y al mismo tiempo aprender sobre cómo funciona un compilador, lo cual es increíblemente valioso como programador embebido. Sólo asegúrate de desactivar las optimizaciones en el compilador de C al principio o probablemente estarás muy confundido por el código generado por el compilador. Gradualmente activa las optimizaciones y observa lo que hace el compilador.
RISC frente a CISC
RISC significa "Reduced Instruction Set Computing", es decir, no se refiere a un conjunto de instrucciones concreto, sino a una estrategia de diseño según la cual la CPU tiene un conjunto de instrucciones mínimo. Pocas instrucciones que hacen algo básico cada una. No existe una definición técnica estricta de lo que significa "ser RISC". Por otro lado, las arquitecturas CISC tienen muchas instrucciones, pero cada una "hace más".
Las ventajas que se pretenden con RISC son que el diseño de la CPU necesita menos transistores, lo que significa un menor consumo de energía (algo importante para los microcontroladores), una fabricación más barata y una mayor velocidad de reloj, lo que se traduce en un mayor rendimiento. El menor consumo de energía y el abaratamiento de la fabricación son generalmente ciertos, pero el mayor rendimiento no ha estado realmente a la altura del objetivo como resultado de las mejoras de diseño en las arquitecturas CISC.
Hoy en día, casi todos los núcleos de las CPU son RISC o diseños "intermedios". Incluso con la arquitectura CISC más famosa (o infame), la x86. Las CPUs x86 modernas son internamente núcleos RISC con un decodificador atornillado en la parte delantera que descompone las instrucciones x86 en múltiples instrucciones RISC. Creo que Intel las llama "micro-ops".
En cuanto a qué es más fácil de aprender en ensamblador (RISC o CISC), creo que es un dilema. Hacer algo con un conjunto de instrucciones RISC generalmente requiere más líneas de ensamblaje que hacer lo mismo con un conjunto de instrucciones CISC. Por otro lado, los juegos de instrucciones CISC son más complicados de aprender debido al mayor número de instrucciones disponibles.
La mayor parte de la razón por la que el CISC tiene mala fama es que el x86 es, con mucho, el ejemplo más común y es un poco complicado trabajar con él. Creo que esto se debe principalmente a que el conjunto de instrucciones del x86 es muy antiguo y se ha ampliado media docena de veces o más manteniendo la compatibilidad con versiones anteriores. Incluso tu núcleo i7 de 4,5Ghz puede funcionar en modo 286 (y lo hace en el arranque).
En cuanto a que ARM sea una arquitectura RISC, yo lo consideraría moderadamente discutible. Es ciertamente una arquitectura de carga-almacenamiento. El conjunto de instrucciones base es similar a RISC, pero en las últimas revisiones el conjunto de instrucciones ha crecido bastante hasta el punto de que yo personalmente lo consideraría más bien un término medio entre RISC y CISC. El conjunto de instrucciones thumb es realmente el más "RISC" de los conjuntos de instrucciones ARM.