Soy un creyente en escribir un desensamblador. Comience con un programa muy simple de una o dos líneas que cargue un registro con una constante quizás (tengo que leer un tutorial o algo para aprender ese paso). Ensamblarlo. Guarde el binario en un formato que sea capaz o esté dispuesto a escribir un programa para leer (intel hex quizás, o elf si lo admiten).
Escriba un programa para leer el archivo binario y extraer el programa, luego tomar esos bytes y escribir un desensamblador (incluso si el vendedor tiene un desensamblador, todavía debe escribir uno).
Ahora comience a iterar el proceso, aprenda una nueva instrucción o una nueva forma de usar esa instrucción, una instrucción a la vez. Escriba el código para desmontar esa instrucción u opción. Intenta escribir ensamblador para manipular cada uno de los bits en la instrucción.
En el momento en que termine el conjunto de instrucciones, sabrá que el conjunto de instrucciones es mejor que la mayoría de las personas que lo usan todos los días, sabrá cómo escribir ensamblador para cada una de las opciones para cada uno de los códigos de operación, también puede aprenda por qué esta instrucción solo puede abordar N bytes desde su ubicación y otros pueden acceder a cualquier cosa, o que las instrucciones solo pueden usar un bit N inmediato y otras pueden usar cualquier valor. Esa clase de cosas.
He utilizado este proceso muchas veces y he aprendido muchos conjuntos de instrucciones, ymmv. Después del primer par de tres, el proceso anterior solo puede tomar una tarde para completarse.
EDIT:
El objetivo aquí es la educación no es el próximo gran proyecto en Sourceforge. El resultado puede ser tan feo o incompleto como desees, eres el único que va a leerlo.
Nota: Un desensamblador genérico para conjuntos de instrucciones de longitud variable puede ser algo difícil, no desea desensamblar linealmente el binario, en ese caso desea seguir todas las rutas de ejecución. Yo lo evitaría. Tomar programas simples que se ejecutan de forma un tanto lineal y luego desmontar no es difícil incluso en un conjunto de instrucciones de longitud variable. Puede aprender bastante sobre un conjunto de instrucciones desmontando y examinando la salida de un compilador de C (u otro lenguaje de alto nivel), si el compilador no tiene una opción de salida de ensamblador o si no tiene un desensamblador que no puede obtener para aprovechar esto (a menos que sea un conjunto de instrucciones de longitud fija).
También tenga en cuenta que una vez que aprende ensamblador para un procesador, el segundo es mucho más fácil, y así sucesivamente.Las cosas que necesita aprender de una a otra a menudo se vuelven cuán grande puede ser este salto, cuáles son las reglas sobre inmediatos, direccionamiento indirecto, básicamente todas las cosas que están directamente relacionadas con el examen de los códigos de operación. Puede aprenderlo sin mirar los códigos de operación, pero debe confiar en que la documentación o los mensajes de error del ensamblador son de alta calidad.
Esto es lo que solía aprender algún conjunto (para el PIC), sin embargo, los que en el futuro estén advertidos: noté algunos errores y algunos errores ortográficos en los tutoriales. Dicho esto, sin embargo, todavía sentía que era un buen recurso para "tener una idea" de la Asamblea. Otro buen recurso para aprender un poco más Assembly fue el " Introducción al PIC C" de Nigel Gardner. Es un libro sobre "C", pero enumera cómo algunos de los bucles se hacen en Asamblea, por lo que es un buen recurso también. – Seidleroni
¡El sitio en el enlace está abajo! – svarog