Aprendí en un 68HC11 en la universidad. Es muy sencillo trabajar con ellos, pero sinceramente, la mayoría de los microcontroladores de baja potencia serán similares (AVR, 8051, PIC, MSP430). Lo más importante que agregará complejidad a la programación ASM para microcontroladores es la cantidad y el tipo de modos de direccionamiento de memoria compatibles . Al principio, debe evitar dispositivos más complicados, como los procesadores ARM de gama alta.
Probablemente recomendaría el MSP430 como un buen punto de partida. Tal vez escriba un programa en C y aprenda reemplazando varias funciones con ensamblaje en línea. Comience simple, x + y = z, etc.
Después de reemplazar una función o algoritmo con ensamblaje, compare y contraste cómo lo codificó y qué generó el compilador de C. Esta es probablemente una de las mejores formas de aprender ensamblaje en mi opinión y al mismo tiempo aprender cómo funciona un compilador que es increíblemente valioso como programador incorporado. Solo asegúrate de desactivar las optimizaciones en el compilador de C al principio o es probable que estés muy confundido por el código generado por el compilador. Gradualmente active las optimizaciones y observe lo que hace el compilador.
RISC vs CISC
RISC significa 'Computación de conjunto de instrucciones reducido', no se refiere a un conjunto de instrucciones en particular, sino solo a una estrategia de diseño que dice que la CPU tiene un conjunto de instrucciones mínimo. Pocas instrucciones de que cada uno haga algo básico. No hay una definición estrictamente técnica de lo que se necesita 'para ser RISC'. Por otro lado, las arquitecturas CISC tienen muchas instrucciones, pero cada una 'hace más'.
Las ventajas propuestas de RISC son que el diseño de su CPU necesita menos transistores, lo que significa menos consumo de energía (grande para microcontroladores), más barato de fabricar y mayores velocidades de reloj que conducen a un mayor rendimiento. El uso de energía más bajo y la fabricación más barata son generalmente ciertas, un mayor rendimiento realmente no ha cumplido con el objetivo como resultado de las mejoras de diseño en las arquitecturas CISC.
Casi todos los núcleos de CPU son diseños RISC o 'intermedios' en la actualidad. Incluso con la arquitectura CISC más famosa (o infame), x86. Las CPU x86 modernas son núcleos internos como RISC con un decodificador atornillado en el extremo frontal que descompone las instrucciones x86 en múltiples instrucciones similares a RISC. Creo que Intel llama a estas 'micro-operaciones'.
En cuanto a qué (RISC vs CISC) es más fácil de aprender en el ensamblaje, creo que es una sacudida. 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 conjuntos de instrucciones CISC son más complicados de aprender debido a la mayor cantidad de instrucciones disponibles.
La mayor parte de la razón por la que CISC recibe un mal nombre es que x86 es, con mucho, el ejemplo más común y es un poco complicado trabajar con él. Creo que eso se debe principalmente a que el conjunto de instrucciones x86 es muy antiguo y se ha expandido media docena o más veces mientras se mantiene la compatibilidad con versiones anteriores. Incluso su 4.5Ghz core i7 puede ejecutarse en modo 286 (y lo hace en el arranque).
En cuanto a que ARM es una arquitectura RISC, lo consideraría moderadamente discutible. Es sin duda una arquitectura de tienda de carga. El conjunto de instrucciones base es similar a RISC, pero en revisiones recientes el conjunto de instrucciones ha crecido bastante hasta el punto en que personalmente lo considero más como un punto medio entre RISC y CISC. El conjunto de instrucciones del pulgar es realmente el más 'RISCish' de los conjuntos de instrucciones ARM.