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.