Je suis un croyant par écrit un désassembleur. Commencez avec un programme très simple d'une ou deux lignes qui charge un registre avec une constante peut-être (dois lire un tutoriel ou quelque chose pour apprendre cette étape). Assemblez-le. Enregistrez le binaire dans un format que vous êtes capable ou désireux d'écrire un programme à lire (Intel hex peut-être, ou elf s'ils supportent cela).
Ecrivez un programme pour lire le fichier binaire et extraire le programme puis prenez ces octets et écrivez un désassembleur (même si le vendeur a un désassembleur, vous devriez toujours en écrire un).
Commencez maintenant l'itération du processus, apprenez une nouvelle instruction ou une nouvelle façon d'utiliser cette instruction, une instruction à la fois. Écrire du code pour désassembler cette instruction ou cette option. Essayez d'écrire l'assembleur pour manipuler chacun des bits de l'instruction. Au moment où vous passerez à travers le jeu d'instructions, vous connaîtrez le jeu d'instructions mieux que la plupart des gens qui l'utilisent tous les jours, vous saurez comment écrire l'assembleur pour chacune des options pour chacun des opcodes, vous pouvez aussi Apprenez pourquoi cette instruction ne peut adresser que N octets à partir de son emplacement et que d'autres peuvent accéder à n'importe quoi, ou que l'instruction ne peut utiliser qu'un bit N immédiat et que d'autres peuvent utiliser n'importe quelle valeur. Ce genre de chose.
J'ai utilisé ce processus plusieurs fois et j'ai appris de nombreux jeux d'instructions, ymmv. Après le premier couple-trois, le processus ci-dessus peut prendre seulement un après-midi pour terminer.
EDIT:
L'objectif est ici l'éducation non le prochain grand projet sourceforge. La sortie peut être aussi laide ou incomplète que vous le souhaitez, vous êtes le seul à le lire.
Remarque: Un désassembleur générique pour les jeux d'instructions de longueur variable peut être quelque peu difficile, vous ne voulez pas désassembler linéairement le binaire dans ce cas, vous voulez suivre tous les chemins d'exécution. Je l'éviterais. Prendre des programmes simples qui exécutent un assemblage linéaire, puis désassembler n'est pas difficile, même sur un jeu d'instructions de longueur variable. Vous pouvez en apprendre beaucoup sur un jeu d'instructions en désassemblant et en examinant la sortie d'un compilateur C (ou d'un autre langage de haut niveau), si le compilateur n'a pas d'option de sortie assembleur ou s'il n'a pas de désassembleur pour en profiter (à moins qu'il s'agisse d'un jeu d'instructions de longueur fixe).
Notez également une fois que vous avez appris l'assembleur pour un processeur, le second est beaucoup plus facile, et ainsi de suite.Les choses que vous devez apprendre de l'une à l'autre deviennent souvent de la taille de ce saut, quelles sont les règles sur l'immédiat, l'adressage indirect, essentiellement tout ce qui est directement lié à l'examen des opcodes. Vous pouvez l'apprendre sans regarder les opcodes, mais vous devez compter sur la documentation ou les messages d'erreur de l'assembleur étant de haute qualité.
C'est ce que j'avais l'habitude d'apprendre de l'assemblage (pour le PIC), cependant, ceux dans le futur être averti: J'ai remarqué quelques erreurs et quelques fautes d'orthographe dans les tutoriels. Cela étant dit, cependant, j'ai toujours estimé que c'était une bonne ressource pour «avoir une idée» de l'Assemblée. Une autre bonne ressource pour apprendre plus d'assemblage était le " Intro to PIC C" de Nigel Gardner. C'est un livre sur "C" mais indique comment certaines des boucles sont faites dans l'Assemblée, donc c'est aussi une bonne ressource. – Seidleroni
Le site dans le lien est en panne! – svarog