19 votos

¿Cuál es un buen microprocesador de iniciación para aprender ensamblaje?

Así que estoy queriendo aprender Assembly primero en un MP, y luego pasar a C (ya que parece que es lo que la mayoría utiliza).

Estoy queriendo entrar en la programación embebida, realmente me encanta el material C de bajo nivel (Kernels/Módulos para Linux es principalmente lo que he hecho), pero me encanta la idea de ser capaz de programar incluso a un nivel más bajo que eso (Microcontroladores/Microprocesadores).

Conozco Arduino, y eso está muy bien y todo, pero no encuentro muchos recursos para usar Assembly con ellos. Los AVRs de Atmel parecen ser muy populares (y baratos), pero cuando se trata de la parte de hardware real (conectarlos en una protoboard, etc.), no estoy encontrando mucha información.

Cualquier sugerencia/información o recurso que conozcáis por favor hacédmelo saber.

Edición: Otra cosa: Parece que todos los libros de microprocesadores que leo (normalmente de AVRs) hablan del microprocesador en sí, y de su programación. Pero todavía no he visto un libro que realmente habla de la instalación de todos los componentes a ti mismo (microprocesador, la memoria, la energía, etc). Si pudiera encontrar algo que me guiara a través de eso estaría en el negocio. (Quiero aprender desde el principio.) Por no mencionar que no tengo ni idea de cómo se comunicaría entre ellos.

15voto

Jon Ericson Puntos 9703

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.

9voto

John Puntos 453

Creo que los microcontroladores PIC de 8 bits son la mejor opción por el reducido número de instrucciones.

El efecto secundario del reducido número de instrucciones es que hay que reinventar la rueda en comparación con otros microcontroladores con más instrucciones.

Pero después de aprender con el PIC, se puede migrar a otros microcontroladores y ver lo que se ajusta mejor para usted.

8voto

Matt McMinn Puntos 6067

Al igual que la sugerencia de Mark sobre el 68HC11, el conjunto de instrucciones del Familia Freescale 68HCS08 es una versión reducida del Motorola 6809, que en mi opinión tenía uno de los conjuntos de instrucciones de 8 bits más limpios de su época. Puedes conseguir una placa de desarrollo con interruptores, LEDs, acelerómetro de 3 ejes y zumbador piezoeléctrico por 79 dólares. aquí .

5voto

El conjunto de instrucciones del msp430 es bueno para aprender ensamblador. Evite el x86. Arm es otro bueno, pero tiene muchas más instrucciones y opciones y puede no ser el más adecuado como primer conjunto de instrucciones. Thumb es un subconjunto del conjunto de instrucciones de arm y no está mal, en github tengo un emulador de thumb (thumbulator) y un emulador de msp430 (no probado tanto como el thumb) que son barebones, sólo el procesador y la memoria y poco más, por lo que se puede obtener una buena visibilidad de lo que está pasando. Una alternativa sería qemu, por ejemplo, donde la visibilidad está allí, pero mucho más difícil de conseguir, al igual que con una solución como qemu se necesita mucho más trabajo antes de averiguar si usted tiene algo de trabajo.
ve a mspgcc4.sf.net para construir un toolchain, y/o un binutils de stock (./configure --target=msp430 --prefix=/algo) en combinación con un llvm de stock. Una vez que usted está listo para el hardware de una placa de desarrollo msp430 cuesta menos de 5 dólares. Para las herramientas de arm/thumb sólo tienes que conseguir la versión lite de codesourcery. Una placa cortex-m3 (thumb/thumb2) cuesta unos 12 dólares ahora mismo. Yo evitaría x86 y avr y otros como un primer conjunto de instrucciones, usted querrá aprender otros para estar bien redondeado. El viejo/original conjunto de instrucciones pic es algo que vale la pena mirar también. Podrías escribir un simulador tú mismo en una tarde para ello, así como aprender el ensamblador. Yo no lo aprendería necesariamente primero, enseña algunas cosas interesantes, pero al mismo tiempo no escala y no es necesariamente representativo de las características comunes que se encuentran en la mayoría de los conjuntos de instrucciones. El msp430 me dio la sensación del pdp11 que es el primer conjunto de instrucciones que realmente aprendí, ambos tienen características bien redondeadas, en su mayoría ortogonales. Tanto el msp430 como los conjuntos de instrucciones de microchip pic están documentados en wikipedia, al menos como referencia, para obtener la imagen completa consigue las hojas de datos/manuales de los vendedores que describirán cada registro y modo de direccionamiento, reset/boot, etc.

5voto

David Metcalfe Puntos 1093

Yo también aprendí con un 68HC11 en la universidad. En lugar de sugerir esto sobre cualquier otro MPU/MCU, sólo quería señalar que la placa de desarrollo que utilizamos tenía un programa de monitorización. Así que desde una terminal tonta podíamos recorrer el código y examinar los registros... Yo sugeriría que cuando sepas qué procesador se ajusta a tus necesidades también compruebes qué placas de desarrollo están disponibles con un programa de monitorización.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X