Por lo tanto, 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).
Quiero ingresar a la Programación Embebida, realmente me encantan las cosas de bajo nivel C (Kernels / Módulos para Linux es principalmente lo que he hecho), pero me encanta la idea de poder programar un nivel aún más bajo que eso (Microcontroladores / Microprocesadores).
Sé sobre Arduino, y eso es genial, 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 de hardware real (conectarlos a una placa de pruebas, etc.), no encuentro mucha información.
Cualquier sugerencia / información o recursos que conozcan ustedes, por favor háganmelo saber.
Editar: Otra cosa: parece que todos los libros de microprocesadores que leo (generalmente AVR) hablan sobre el 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 usted mismo (microprocesador, memoria, alimentación, etc.). Si pudiera encontrar algo que me guíe, estaría en el negocio. (Quiero aprender desde cero). Sin mencionar que no tengo idea de cómo se comunicaría entre ellos.
fuente
Respuestas:
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.
fuente
Creo que los microcontroladores PIC de 8 bits son la mejor opción debido al reducido número de instrucciones.
El efecto secundario del número reducido de instrucciones es que debe 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é le queda mejor.
fuente
Similar a la sugerencia de Mark del 68HC11, el conjunto de instrucciones de la familia Freescale 68HCS08 es una versión reducida del Motorola 6809, que pensé 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 aquí .
fuente
El conjunto de instrucciones msp430 es bueno para aprender ensamblador. Evita x86. Arm es otro buen pero tiene muchas más instrucciones y opciones y puede que no sea el más adecuado como primer conjunto de instrucciones. Thumb es un subconjunto del conjunto de instrucciones del brazo y no está mal, en github tengo un emulador de pulgar (thumbulator) y un emulador msp430 (no probado tanto como el thumb) que son barebones, solo el procesador y la memoria y poco más , para que pueda obtener una buena visibilidad de lo que está sucediendo. Una alternativa sería qemu, por ejemplo, donde la visibilidad está allí, pero es mucho más difícil de alcanzar, del mismo modo con una solución similar a qemu, se necesita mucho más trabajo antes de darse cuenta si algo funciona.
vaya a mspgcc4.sf.net para construir una cadena de herramientas y / o un binutils de stock (./configure --target = msp430 --prefix = / something) en combinación con un llvm de stock. Una vez que esté listo para el hardware, una placa de desarrollo msp430 cuesta menos de 5 dólares. Para las herramientas de brazo / pulgar, simplemente obtenga la versión lite de codeourcery. Una tabla cortex-m3 (pulgar / pulgar2) es de aproximadamente 12 dólares en este momento. Evitaría x86 y avr y otros como primer conjunto de instrucciones, querrás aprender a otros a ser bien completos. El conjunto de instrucciones de imagen antiguo / original es algo que vale la pena mirar también. Podrías escribir un simulador tú mismo en una tarde y aprender el ensamblador. No lo aprendería primero necesariamente, sí 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 los conjuntos de instrucciones msp430 como de microchip pic están documentados en wikipedia, al menos como referencia, para obtener la imagen completa, obtener las hojas de datos / manuales de los proveedores que describirán cada modo de registro y direccionamiento, reinicio / arranque, etc.
fuente
¿Estás seguro de que quieres aprender Asamblea? ¿Puedes decir por qué? Es una tarea bastante, y cada vez es menos relevante o útil en la actualidad. Esto es de una persona que ha escrito en él e incluso programas ensamblados a mano (sin ensamblador, enlazador, solo una tarjeta con el conjunto de instrucciones).
fuente
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 utilizamos tenía un programa de monitoreo. Entonces, desde una terminal tonta podríamos pasar por el código y examinar los registros ... Sugeriría que cuando sepa qué procesador cumple con sus requisitos, también verifique qué placas de desarrollo están disponibles con un programa de monitor.
fuente
Enseño ensamblaje PIC (núcleo de 14 bits) y ARM. La clase PIC les digo que una vez que hayan dominado la fealdad de esa arquitectura, pueden asumir cualquier otra cosa. El ARM (¡no el Thumb / Cortex!) Es una arquitectura muy agradable para aprender ensamblaje. Utilizamos una placa LPC2148.
fuente
Aprendí el ensamblado PIC de 16 bits con un dsPIC33F. El ensamblaje del procesador es bastante similar a C, ya que admite punteros y tres operaciones variables (A = B + C, por ejemplo), lo que facilita mucho el aprendizaje y la adaptación.
fuente
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 obtener una mejor comprensión de 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).
fuente
En mi universidad, nos enseñaron arquitectura / diseño de hardware junto con lenguaje ensamblador (los dos van de la mano, obviamente) con la arquitectura MIPS (o tal vez DLX ). Desde entonces, he incursionado un poco en el montaje de PIC y AVR en la escuela / trabajo, y todos son bastante similares. Creo que el ensamblaje de MIPS fue un excelente punto de partida, ya que el lenguaje es muy simple, al igual que la arquitectura del procesador.
Ver también: este libro . No es el mejor libro del mundo, pero es el libro estándar de diseño de computadoras para muchas universidades.
fuente
mi sugerencia es que cualquiera que vaya a comenzar a estudiar sobre microcontroladores y procesadores debería leer el libro nombrando "codificar el lenguaje oculto de la computadora" si considera que casi es un experto en procesadores y para programar mejor use el programador y programa poney prog de atmel studio6.1 del sitio oficial de atmel
fuente