¿Qué es un buen microprocesador de arranque para aprender a ensamblar?

19

Así que quiero aprender Asamblea primero en un MP, luego pasar a C (ya que parece que eso es lo que la mayoría de ellos usan).

Estoy deseando meterme en la Programación incorporada, me encantan las cosas de bajo nivel C (Kernels / Modules para Linux es principalmente lo que he hecho), pero me encanta la idea de poder programar un nivel incluso más bajo que el de (Microcontroladores / microprocesadores).

Sé sobre Arduino, y eso es genial y todo, pero no puedo encontrar muchos recursos para usar Assembly con ellos. Los AVR de Atmel parecen ser muy populares (y baratos), pero cuando se trata de la parte del hardware real (conectarlos a un tablero, etc.), no encuentro mucha información.

Cualquier sugerencia / información o recursos que ustedes / gals conozcan, hágamelo saber.

Edit: Otra cosa: Parece que todos los libros de microprocesador que leí (generalmente AVR) hablan del microprocesador en sí y lo programan. Pero todavía tengo que ver un libro que realmente habla sobre la instalación de todos los componentes (microprocesador, memoria, alimentación, etc.). Si pudiera encontrar algo que me guíe a través de eso, estaría en el negocio. (Quiero aprender de cero). Sin mencionar que no tengo idea de cómo se comunicaría entre ellos.

    
pregunta ctype.h

11 respuestas

14

Aprendí en un 68HC11 en la universidad. Es muy fácil trabajar con ellos pero, honestamente, 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 de ASM para los microcontroladores es el número y el tipo de memoria soportada modos de direccionamiento . 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.

Una vez que hayas reemplazado una función o algoritmo con ensamblaje, compara y contrasta cómo la codificaste y lo que 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 integrado. 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 encienda las optimizaciones y observe lo que hace el compilador.

RISC vs CISC

RISC significa 'Computación de conjuntos de instrucciones reducidas' no se refiere a un conjunto de instrucciones en particular, sino a una estrategia de diseño que dice que la CPU tiene un conjunto de instrucciones mínimo. Pocas instrucciones que cada uno haga algo básico. No es 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 uso de energía (más grande para los microcontroladores), más económico de hacer y mayores velocidades de reloj que conducen a un mayor rendimiento. El menor consumo de energía y la fabricación más barata son generalmente ciertas, un mayor rendimiento realmente no ha alcanzado el objetivo como resultado de las mejoras de diseño en las arquitecturas CISC.

Hoy en día, casi todos los núcleos de CPU son diseños RISC o de "campo medio". Incluso con la arquitectura CISC más famosa (o infame), x86. Las CPU x86 modernas son internamente RISC como núcleos con un decodificador atornillado en la parte frontal que descompone las instrucciones x86 en múltiples instrucciones tipo RISC. Creo que Intel llama a estas 'micro-operaciones'.

En cuanto a qué (RISC vs CISC) es más fácil de aprender en ensamblaje, creo que es un lanzamiento. 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 por mucho el ejemplo más común y es un poco complicado trabajar con él. Creo que eso es principalmente el resultado de que el conjunto de instrucciones x86 es muy antiguo y se ha expandido media docena o más de veces manteniendo 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 ciertamente una arquitectura de carga de la tienda. El conjunto de instrucciones básico es similar a RISC, pero en las revisiones recientes, el conjunto de instrucciones ha crecido bastante hasta el punto en el que personalmente lo considero un lugar intermedio entre RISC y CISC. El conjunto de instrucciones del pulgar es realmente el más "RISCO" de los conjuntos de instrucciones ARM.

    
respondido por el Mark
8

Creo que los microcontroladores PIC de 8 bits son la mejor opción debido a la cantidad reducida de instrucciones.

El efecto secundario de la cantidad reducida de instrucciones es que debes reinventar la rueda en comparación con otros microcontroladores con más instrucciones.

Pero después de aprender con PIC, puede migrar a otros microcontroladores y ver qué se adapta mejor a usted.

    
respondido por el Daniel Grillo
7

Similar a la sugerencia de Mark del 68HC11, el conjunto de instrucciones de Freescale 68HCS08 family es una versión reducida del Motorola 6809, que creo que tenía uno de los conjuntos de instrucciones de 8 bits más limpios de su tiempo. Puede obtener una placa de desarrollo con interruptores, LED, acelerómetro de 3 ejes y zumbador piezoeléctrico por $ 79 .

    
4

El conjunto de instrucciones msp430 es bueno para aprender a ensamblar. Evita x86. El brazo es otro bueno, pero tiene muchas más instrucciones y opciones y puede que no sea el más adecuado como primer conjunto de instrucciones. El pulgar es un subconjunto del conjunto de instrucciones del brazo y no está mal, en github tengo un emulador de pulgar (pulgar) y un emulador de msp430 (no probado tanto como el del pulgar) que son barebones, solo el procesador y la memoria y poco más , para que pueda obtener una buena visibilidad de lo que está pasando. Una alternativa sería qemu, por ejemplo, donde la visibilidad está ahí pero es mucho más difícil de encontrar, al igual que con una solución de tipo qemu, se necesita mucho más trabajo antes de que averigüe si tiene algo funcionando.
Vaya a mspgcc4.sf.net para crear una cadena de herramientas y / o un binutils de valores (./configure --target = msp430 --prefix = / algo) en combinación con un llvm de valores. Una vez que esté listo para el hardware, una placa de desarrollo msp430 cuesta menos de 5 dólares. Para herramientas de brazo / pulgar solo obtenga la versión liviana de codesourcery. Una tabla de cortex-m3 (pulgar / pulgar2) cuesta alrededor de 12 dólares en este momento. Evitaría x86 y avr y otros como un primer conjunto de instrucciones, querrá aprender que otros estén bien redondeados. El conjunto de instrucciones del pic antiguo / original es algo que vale la pena ver también. Podría escribir un simulador usted mismo en una tarde, así como aprender el ensamblador. No lo aprendería primero necesariamente, 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 de pdp11, que es el primer conjunto de instrucciones que realmente aprendí, ambos tienen características bien redondeadas, en su mayoría ortogonales. Los conjuntos de instrucciones msp430 y microchip pic están documentados en wikipedia, al menos como referencia, para obtener la imagen completa y obtener las hojas de datos / manuales de los proveedores que describirán cada registro y modo de direccionamiento, reinicio / arranque, etc.

    
respondido por el old_timer
4

¿Estás seguro de que quieres aprender Asamblea? ¿Puedes decir por qué? Es toda una tarea, y cada vez es menos recurrente o útil hoy en día. Esto es de una persona que ha escrito en él e incluso de programas ensamblados a mano (sin ensamblador, enlazador, solo una tarjeta con el conjunto de instrucciones).

    
respondido por el russ_hensel
4

Yo también aprendí en un 68HC11 en la universidad. Más bien, sugieren esto sobre cualquier otra MPU / MCU, solo quería señalar que la placa de desarrollo que usamos tenía un programa de monitoreo. Entonces, desde una terminal tonta podríamos revisar el código y examinar los registros ... Le sugeriría que cuando sepa qué procesador se adapta a sus requisitos, también compruebe qué placas de desarrollo están disponibles con un programa de monitoreo.

    
respondido por el mvr
3

Enseño a PIC (núcleo de 14 bits) y ARM. La clase de PIC les digo que una vez que hayan dominado la fealdad de esa arquitectura, pueden asumir cualquier otra cosa. El BRAZO (¡no el Pulgar / Cortex!) Es una arquitectura muy agradable para aprender a ensamblar. Utilizamos una placa LPC2148.

    
respondido por el Wouter van Ooijen
2

Aprendí el ensamblaje PIC de 16 bits con un dsPIC33F. El ensamblaje del procesador es bastante parecido al C, ya que admite punteros y tres operaciones variables (A = B + C, por ejemplo), lo que facilita mucho el aprendizaje y la adaptación a él.     

respondido por el Thomas O
1

Estás confundiendo microcontroladores y microprocesadores aquí. AVR es una línea de microcontroladores de Atmel, no un microprocesador. Le sugiero que primero busque en wikipedia para comprender mejor cuáles son las diferencias entre estos. Básicamente, un microcontrolador es un sistema más o menos completo, mientras que un microprocesador es solo la CPU (por lo tanto, un microcontrolador tiene un microprocesador dentro).

    
respondido por el Erik
1

En mi universidad, nos enseñaron diseño / arquitectura de hardware junto con el lenguaje ensamblador (los dos van de la mano, obviamente) con el MIPS (o quizás DLX ) arquitectura. Desde entonces, he incursionado en el montaje de PIC y AVR un poco en la escuela / trabajo, y todos son bastante similares. Creo que el ensamblaje de MIPS fue un gran punto de partida, ya que el lenguaje es muy simple, al igual que la arquitectura del procesador.

Consulte también: este libro . No es el mejor libro del mundo, pero es el libro de diseño de computadora estándar para muchas universidades.

    
respondido por el Shamtam
0

Mi sugerencia es que cualquiera que vaya a comenzar a estudiar sobre microcontroladores y procesadores debería leer el libro nombrando "codifique el lenguaje oculto de la computadora" si estudia que casi es experto en procesadores y para programar un mejor uso del programador poney prog. y programa de atmel studio6.1 del sitio oficial de atmel

    
respondido por el avinash

Lea otras preguntas en las etiquetas