Il se trouve que je travaille sur quelque chose comme celui-ci, mais je ne suis pas encore prêt à en sortir. (du moins pas publiquement)
Je pense cependant que vous devez modifier / affiner votre question. Prendre un coup de couteau général à la question. Je commencerais par quelque chose de plus simple que l'ARM et le x86, et j'éviterais tous ensemble x86.
Avoir un livre d'assembleur implique que vous êtes un programmeur ou que vous avez des compétences en programmation. Je ne sais pas si votre question concerne davantage la programmation ou la conception numérique.
Si vous venez du côté programmeur, je commencerais par apprendre l'assembleur pour le msp430, et le bras ou le pouce (ne jouez pas encore avec x86, ce n'est pas une bonne architecture), peut-être PIC (plus ancien pic, pas le dspic ni le pic32). Ensuite, écrivez un désassembleur et / ou un simulateur de jeu d'instructions. s'il ne s'agit que d'un désassembleur, choisissez un jeu d'instructions de longueur de mot non variable comme le bras ou le pouce (oui si vous y réfléchissez, vous pouvez gérer cette instruction de branche) ou le PIC. Éventuellement, écrivez un simulateur de jeu d'instructions, au moins assez d'un pour implémenter une poignée d'instructions et une branche, faites une boucle le voir s'exécuter. Ensuite, étudiez les machines à états et réécrivez le simulateur en utilisant des machines à états. J'ai un simulateur de jeu d'instructions, pas nécessairement complètement basé sur une machine à états, mais qui pourrait vous donner une idée de ce dont je parle. recherchez thumbulator sur github. Mon nom d'utilisateur est dwelch67 là-bas.
si vous abordez cela du point de vue d'un ingénieur électricien, vous voudrez peut-être regarder les ouvertures. La lisibilité et les autres fonctionnalités du hdl peuvent être difficiles, mais elles sont là pour être consommées. verilator et icarus verilog sont de bons simulateurs verilog. J'aime plus verilator en partie parce qu'il est si rigide avec l'analyse de verilog et deuxièmement, il est super facile de franchir la limite C / C ++ et HDL pour écrire un logiciel pour parler au matériel simulé, et à d'autres choses de type réutilisables. Il y en a un minuscule appelé mcpu ou quelque chose comme ça sur lequel tout tient sur une page de papier s'il est imprimé. Vous devez vraiment comprendre comment écrire un programme avec seulement une ou deux opérations réelles (je pense qu'il n'a qu'un NOR). Si vous êtes un ingénieur électricien et avez besoin d'un cours intensif en numérique, les transistors sont toujours saturés, ils sont essentiellement utilisés comme interrupteurs à commande électrique. Prenez-en une paire avec du câblage et d'autres composants et vous pouvez créer des portes ET et OU, ajouter un transistor inverseur et créer une porte NON permettant NAND et NOR. Vous voudrez en savoir plus sur les machines à états si vous ne le savez pas déjà.
En général, vous devez comprendre la logique de base ET, OU, PAS, etc. En savoir plus sur les machines à états qui fonctionnent très bien avec le logiciel ou le matériel , Le concept est le même. La réinitialisation et la synchronisation font en fait partie de l'apprentissage automatique d'état, faire fonctionner la machine à états et penser en termes de chaque passage à travers la logique / code est un cycle d'horloge dans le processeur et vos variables d'état sont utilisées à chaque passage pour indiquer ce qu'il faut faire pendant ce cycle d'horloge, quel est l'état actuel, et en fonction de l'état actuel et des entrées quel sera l'état suivant, etc.