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

19

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.

ctype.h
fuente
3
Odio enviarlo a otro lugar, pero si está interesado en los AVR, debe conocer AVRfreaks.net .
Kevin Vermeer
Ya estoy inclinando hacia AVR ... principalmente porque ellos tanta información acerca de ellos, y son mucho más barato que la TI-MPS430 ...
2
AVR es popular entre los aficionados, pero no estoy seguro de dónde obtiene sus datos de costos. Ambas familias tienen algunas ofertas que son menos de 1 USD y otras empujan 20 USD.
Kevin Vermeer
Bueno ... cuando miraba el MPS430 parecía que el software (depuradores, etc.) era un poco caro cuando se agregaba a las placas de desarrollo.
1
Mi consejo es que no elijas MSP430 si eres un principiante. Las herramientas oficiales son buenas, pero el soporte gratuito que encontrará en línea no coincide con PIC / AVR
Toby Jaffey

Respuestas:

14

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.

marca
fuente
@Mark: los ARM también son procesadores RISC, el conjunto de instrucciones no es tan malo. En realidad está bastante bien diseñado; Hay algunas instrucciones para la diferenciación del espacio de usuario frente al espacio del núcleo y otras complejidades, pero se pueden ignorar mientras comienza.
Kevin Vermeer
1
@reemrevnivek Estaba más tratando de alejarlo de las complejidades de lidiar con múltiples modos de procesador y MMU cuando comenzó a ASM, por lo que mencioné ARM de gama alta. La inicialización y configuración de SoC ARM de gama alta también es sustancialmente más compleja que algo como un AVR / PIC / MSP430.
Mark
RISC? No estoy seguro de entender la diferencia entre eso y lo que sea que los demás son ... ¿te importaría explicar? ¿No son la mayoría de los microcontroladores RISC? solo significa menos conjuntos de instrucciones correctos?
1
@sauron Agregué a mi respuesta re: RISC vs CISC.
Mark
¿Son cosas como AVR / PICS generalmente RISC o CISC?
8

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.

Daniel Grillo
fuente
No estaría totalmente en desacuerdo ya que esto es lo que estoy explorando ahora, pero los núcleos de 8, 16 y 32 bits tienen estrategias asm totalmente diferentes.
Jugador de Grady
7

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í .

tcrosley
fuente
El número reducido de registros que tiene el S08 frente al HC11 puede hacer que las cosas sean un poco más difíciles por adelantado, ya que tendrá que descubrir que la pila hace mucho de todo (lo que se enseñó más tarde en mi laboratorio con HC11 (o fue 12's)). Por extensión, los AVR son realmente buenos porque tienes 32 registros para jugar antes de preocuparte por la pila.
Nick T
En realidad, me gusta la simplicidad del acumulador único, a pesar de que puede ser un cuello de botella. En lugar de usar la pila para las variables temporales, para empezar me resulta más simple usar los 144 bytes de variables de página directa a las que se puede acceder con instrucciones más cortas (los otros 112 bytes de página directa se usan para registros de E / S). El uso de la pila (que permite rutinas reentrantes y recursivas) se puede aprender más tarde.
tcrosley
¿No se derivó el HC (S) 08 del HC05?
Johan.A
@ Johan.A Sí, tienes toda la razón. El HCS08 es una versión mejorada del HC05. Debería haber mencionado eso. Creo que la derivación es algo así como 6800 -> 6801 -> 6805 -> HC (S) 08. Escribí mucho código de ensamblaje para el 6805. Comparé el HCS08 con el 6809 para vincularlo con los otros comentarios sobre el 68HC11 (que es aproximadamente una versión de microcontrolador del 6809).
tcrosley
4

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.

viejo contador de tiempo
fuente
solo para ensamblador solo necesita binutils, al menos para arm / thumb o msp430, y puede construir el ensamblador y el enlazador. Si desea un compilador de C desde el que pueda examinar la salida del ensamblador como herramienta de aprendizaje, entonces necesita mspgcc4 o código fuente o simplemente usar llvm para ambos.
old_timer
4

¿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).

russ_hensel
fuente
Esto no es realmente una respuesta, sino un comentario. También dudaría en confiar en un programador de C incorporado que no estaba dispuesto a caminar de vez en cuando al intentar comprender una rareza en el comportamiento de un proyecto.
Chris Stratton
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 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.

mvr
fuente
El programa del monitor suena como si fuera muy útil. ¿Qué libro usaste para aprender esto? si te importa que pregunte ....
Yo también tenía experiencia con el 68HC11 y el "Programa de Monitoreo" se conoce como Buffalo Monitor . Básicamente, es solo un programa que se almacena en la ROM que se comunica en serie con su PC. Escribe en una terminal y el programa interpreta sus solicitudes y le devuelve información. Puede volcado de memoria a la pantalla, los valores de cambio de memoria, paso a través de instrucciones, etc. El tablero que utilizamos fue este uno. Es fácil aprender con este controlador pero está muy anticuado.
sherrellbc
... El libro que utilizamos fue este si estás interesado. Sugeriría ir con un controlador más moderno como AVR; su placa de desarrollo se puede encontrar aquí .
sherrellbc
3

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.

Wouter van Ooijen
fuente
Hola Wouter, ¡qué bueno verte por aquí!
Olin Lathrop
2

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.

Thomas O
fuente
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 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).

Erik
fuente
Ya lo sabía, no sé por qué no puse eso. Me refería al igual que muchas guías no hablan de hecho la conexión de un MP y memoria (como flash o EEPROM), etc ...
1
Como la mayoría de los microprocesadores ahora tienen caché / memoria y algunas E / S, es una línea muy borrosa.
kenny
1
@Sauron - ¿Seguro que lo sabías? Usaste MP nuevamente; un microcontrolador (que es el término correcto para un AVR y el 99% de los dispositivos que discutimos aquí) casi siempre tiene memoria (tanto no volátil, como EEPROM y Flash, como SRAM volátil) a bordo. Aprenda a usar las cosas a bordo antes de comenzar a aventurarse en los periféricos.
Kevin Vermeer
1

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.

Shamtam
fuente
El Microchip PIC32 usa la arquitectura MIPS y es bastante fácil mezclar el ensamblador MIPS con C.
tcrosley
0

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

avinash
fuente
Describa las características clave del libro y el programador, que inclinarían el OP para usarlas exactamente.
Vorac
se trata de entender un microcontrolador cómo se desarrolla a partir de sistemas digitales y explica el lenguaje ensamblador
avinash
vaya a este sitio j.mp/mpcinterest para obtener ese libro
avinash