Así que quiero aprender a ensamblar primero en un MP, luego pasar a C (ya que parece que eso es lo que la mayoría de ellos usa).
Quiero ingresar a la programación integrada, realmente me encantan las cosas de C de bajo nivel (Kernels/Modules for Linux es principalmente lo que he hecho), pero me encanta la idea de poder programar un nivel incluso más bajo que ese (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 real del hardware (conectarlos a una placa de prueba, etc.), no encuentro mucha información.
Cualquier sugerencia/información o recursos que ustedes conozcan, 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 su programación. Pero todavía tengo que ver un libro que realmente hable sobre la instalación de todos los componentes usted mismo (microprocesador, memoria, energía, 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ían entre ellos.
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 admitidos . Debe evitar los dispositivos más complicados al principio, 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 haber reemplazado una función o algoritmo con ensamblador, compare y contraste cómo lo codificó y lo que generó el compilador de C. En mi opinión, esta es probablemente una de las mejores formas de aprender a ensamblar y, al mismo tiempo, aprender cómo funciona un compilador, lo cual es increíblemente valioso como programador integrado. Solo asegúrese de desactivar las optimizaciones en el compilador de C al principio o probablemente se sentirá muy confundido por el código generado por el compilador. Active gradualmente las optimizaciones y observe lo que hace el compilador.
RISC frente a 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 que cada uno hace algo básico. No existe 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 previstas de RISC son que el diseño de su CPU necesita menos transistores, lo que significa menos uso de energía (grande para los microcontroladores), más barato de fabricar y velocidades de reloj más altas que conducen a un mayor rendimiento. El menor uso de energía y la fabricación más barata son generalmente ciertas, el mayor rendimiento no ha estado a la altura de la meta 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 internamente núcleos similares a RISC con un decodificador atornillado en la parte frontal que descompone las instrucciones x86 en múltiples instrucciones similares a RISC. Creo que Intel las llama 'microoperaciones'.
En cuanto a cuál (RISC vs CISC) es más fácil de aprender en el ensamblaje, creo que es un error. 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 tiene una mala reputación 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 ampliado media docena o más de veces manteniendo la compatibilidad con versiones anteriores. Incluso su Core i7 de 4,5 Ghz puede ejecutarse en modo 286 (y lo hace al arrancar).
En cuanto a que ARM sea una arquitectura RISC, lo consideraría moderadamente discutible. Sin duda, es una arquitectura de almacenamiento 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 consideraría más como un término medio entre RISC y CISC. El conjunto de instrucciones del pulgar es realmente el más 'RISCish' de los conjuntos de instrucciones ARM.
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 tienes que 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 cuál se adapta mejor a sus necesidades.
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í .
El conjunto de instrucciones msp430 es bueno para aprender ensamblador. Evite 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 arm y no está mal, en github tengo un emulador de pulgar (thumbulator) y un emulador de msp430 (no probado tanto como el de pulgar) que son básicos, 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á ahí 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 averiguar si tiene algo que funcione.
vaya a mspgcc4.sf.net para crear una cadena de herramientas y/o 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, solo obtenga la versión lite de codesourcery. Una placa cortex-m3 (thumb/thumb2) cuesta alrededor de 12 dólares en este momento. Evitaría x86 y avr y otros como un primer conjunto de instrucciones, querrá aprender otros para estar bien redondeado. El conjunto de instrucciones pic antiguo/original también es algo que vale la pena mirar. Podría escribir un simulador usted mismo en una tarde y 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 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 pic del microchip están documentados en wikipedia, al menos como referencia, para obtener una imagen completa, obtenga las hojas de datos/manuales de los proveedores que describirán cada registro y modo de direccionamiento, reinicio/arranque, etc.
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 recorrer el código y examinar los registros... Sugeriría que cuando sepa qué procesador se ajusta a sus requisitos, también verifique qué placas de desarrollo están disponibles con un programa de monitoreo.
Enseño tanto PIC (núcleo de 14 bits) como ensamblaje ARM. A 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 Pulgar/Cortex!) es una arquitectura muy agradable para aprender a ensamblar. Usamos una placa LPC2148.
2019-12-29 actualización
Cambié a Cortex, primero al LPC1114/820, luego al Arduino Due. El Arduino Due es barato (de China), potente, se puede usar con C, C++, Assembler (y si quieres Python), y si realmente quieres, puedes usarlo con el IDE de Arduino. Prefiero mi propio sistema de compilación y la libre elección de un editor/IDE.
¿Seguro que quieres aprender Montaje? ¿Puedes decir por qué? Es toda una tarea, y es cada vez menos relevante o útil hoy en día. Esto es de una persona que ha escrito en él e incluso ha ensamblado a mano programas (sin ensamblador, enlazador, solo una tarjeta con el conjunto de instrucciones).
Aprendí ensamblador de PIC de 16 bits con un dsPIC33F. El ensamblaje del procesador es bastante parecido 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.
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 en su interior).
En mi universidad, nos enseñaron diseño/arquitectura de hardware junto con lenguaje ensamblador (los dos van de la mano, obviamente) con la arquitectura MIPS (o quizás DLX ). Desde entonces, he incursionado un poco en el ensamblaje 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.
mi sugerencia es que cualquiera que vaya a comenzar a estudiar sobre microcontroladores y procesadores debe leer el libro que nombra "codificar el lenguaje oculto de la computadora" si estudia que casi es un experto en procesadores y para programar avr mejor use el programador poney prog y el programa de atmel studio6.1 del sitio oficial de atmel
kevin vermeer
usuario3073
kevin vermeer
usuario3073
toby jaffey
sherrellbc