¿Cuáles son algunos libros sobre lenguaje ensamblador que deberían ser fáciles de entender?

Aquí hay una cosa fundamental que debe entenderse primero:

El lenguaje ensamblador no es como aprender un lenguaje de nivel superior como Python o Java o incluso C.

Assembly está aprendiendo las instrucciones específicas de una familia de CPU específica, y las convenciones y matices del código de construcción que se ejecuta dentro de esa Arquitectura de conjunto de instrucciones.

Entonces …

No se puede “aprender lenguaje ensamblador”. Aprenderá “lenguaje ensamblador para el procesador x86-64” o “lenguaje ensamblador para Intel 8080” o “lenguaje ensamblador para IBM S / 370” o incluso cuando el usuario de Quora sugiera “lenguaje ensamblador para MIPS tal como lo representa SPIM”.

Y si bien es cierto que si conoce el ensamblaje para una CPU, es más fácil aprender para otra, lo que realmente está aprendiendo es la Arquitectura del procesador. ¿El lenguaje utilizado para codificar operaciones? No tanto.

Eso es lo primero que debe decidir: qué arquitectura de procesador y, lo que es más importante, ¿por qué?

Si desea codificar aplicaciones de control en tiempo real para una Raspberry Pi, necesitará aprender ARM, no x86.

Si desea aprender a microajustar los controladores para Linux que se ejecutan en procesadores x86, tendrá que aprender eso.

Si encontraste un PDP-11/44 en Goodwill, bueno …

Entonces, reconsidera tu enfoque. ¿Cuál es la arquitectura que quieres aprender? ¿Por qué?

Deje que eso lo lleve a los recursos para ayudarlo a aprenderlo.

Si solo desea aprender el código al nivel más básico cercano al hierro solo por haberlo hecho, podría hacerlo mucho peor que seguir los consejos de Barry. De lo contrario, necesitarás encontrar la clavija cuadrada para tu agujero particularmente cuadrado.

Buena suerte.

Organización y diseño de computadoras: la interfaz hardware / software / David A. Patterson, John L. Hennessy

La versión original utilizaba lenguaje ensamblador MIPS. Una versión más nueva usa ARMv8a (64 bits, no el ARM tradicional de 32 bits que se encuentra en Raspberry Pi). Y el más reciente, que salió solo este mes, usa el lenguaje ensamblador RISC-V.

Cualquiera de ellos lo hará. Tengo un punto débil particular para RISC-V, que es una nueva arquitectura informática de código abierto en la que muchas empresas están trabajando en implementaciones. Siempre es difícil hacer predicciones, especialmente sobre el futuro, pero creo que RISC-V será importante. Probablemente también sea el más fácil de aprender. Fue * diseñado * en la Universidad de California en Berkeley especialmente para que sea fácil de enseñar programación en lenguaje ensamblador y hacer que los estudiantes desarrollen CPU simples. RISC-V ya está bien soportado por el software de desarrollo (por ejemplo, gcc, binutils), el kernel de Linux y varios simuladores como qemu. El hardware real está disponible ahora con el “HiFive1” compatible con Arduino (tengo uno) y mucho más estará disponible en el próximo año más o menos, por ejemplo, pequeñas computadoras linux similares a Raspberry Pi. También puede, hoy, descargar diseños para varias CPU RISC-V y cargarlos en chips FPGA y ejecutarlos en hardware. Puede estudiar el diseño interno, cambiarlo (tal vez agregar nuevas instrucciones) y cargar su diseño modificado y ejecutarlo en el FPGA. ¡Puede hacer esto con una tarjeta FPGA Artix-7 “Arty” de Digilent de $ 99 y tener una CPU de 65 MHz que usted mismo modificó!

Me diferencia de algunas de las otras respuestas en que creo que todos los lenguajes ensambladores son básicamente los mismos, con algunas excepciones notables. Todos tienen conceptos de una gran memoria RAM; un pequeño número (1, 2, 4, 8, 16, 32) de registros donde se realiza la computación real; las instrucciones se ejecutan en secuencia; una forma de mover cosas entre registros y RAM; instrucciones para sumar y restar (y tal vez multiplicar y dividir); operaciones binarias como AND, OR, XOR, NOT y turnos; una forma de comparar dos valores; una forma de cambiar la secuencia de instrucciones en base a una comparación.

Las similitudes son mucho más grandes que las diferencias. Desafortunadamente, el x86 muy común es un caso atípico extraño y más complicado de aprender que otros. No sugiero comenzar con eso.

Las cosas sensibles para comenzar (si encuentra materiales de instrucción usándolos y algo para ejecutar programas) incluyen:

PDP11, 6502/6800/6809, 68000, ARM, Thumb, MIPS, PowerPC, Alpha, Aarch64, RISC-V, AVR, MSP430.

Comencé con el 6502 porque eso era lo que había en las pequeñas computadoras a las que tenía acceso en 1979-1981. La Apple] [vino con una documentación brillante de toda la máquina, incluido el hardware y el software en la ROM, por lo que con un poco de estudio podría entenderlo TODO. El 6502 es una CPU muy simple y muy fácil de entender. Lo que no es tan fácil de entender es cómo lograr que haga algo útil 🙂 Todos los demás en la lista anterior hacen que la programación del ensamblaje sea mucho más simplificada (incluso 6809, pero no 6800).

Hoy, lo más parecido a Apple] [o Commodore 64 es la gama Arduino (tanto oficial como clones). Son baratos, fáciles de programar en C o ensamblador, fáciles de estudiar y comprender toda la máquina, y puede enchufar cosas como LED e interruptores y motores y pantallas LCD y servos R / C y … bueno, casi cualquier cosa. Los originales usan CPU AVR, mientras que otros usan ARM. Y, como dije antes, ahora hay uno RISC-V. Creo que hay algunos con MIPS también.

No sugiero comenzar con:

x86, IA64, z80 / 8080, 8051, PIC (excepto PIC32, que es MIPS), SPARC

También recomiendo un enfoque en el que aprenda C (no C ++) al mismo tiempo que el lenguaje ensamblador. Escriba programas C simples, compílelos con -O1 (optimización mínima), examine el lenguaje ensamblador producido y descubra cómo funciona. Escriba funciones de lenguaje ensamblador a las que pueda llamar desde C. Escriba cosas en lenguaje ensamblador y luego en C y compare.

Si ya conoces C, ¡por supuesto, mucho mejor! Y aprenderá más sobre cómo funciona realmente.

En una vida anterior, enseñé un semestre de lenguaje ensamblador en el estado de Florida. El libro de texto se basó en la arquitectura MIPS y había un pequeño simulador llamado SPIM (hey, somos científicos de la computación, se deben tener en cuenta) que podrían usarse para ejecutar el código. Tenía estudiantes que escribían ensamblajes para generar fractales basados ​​en ascii. Fue casi tan indoloro como puede ser el montaje.

Parece que James Larus todavía mantiene SPIM. Toma eso y cualquier libro de texto MIPS que lo use y sumérgete.

Siempre hay “El arte de la programación de computadoras Vol 1 / Algoritmos fundamentales” por Donald Knuth y Mix.