web-dev-qa-db-fra.com

Existe-t-il un livre canonique sur l'assemblage x86?

Il y a beaucoup de livres sur l'Assemblée. Cependant, ils traitent généralement des ISA dont je ne me soucie pas, comme MIPS ou ARM. Je ne m'occupe pas de ces architectures; il n'y a aucune raison pour moi d'essayer de les apprendre.

Mais les cahiers d'assemblage x86 semblent ... inexistants.

Disons par exemple que j'essaie de construire un compilateur de jouets générant des fichiers exécutables Windows Portable.

Existe-t-il un livre qui constitue la norme de facto pour décrire les meilleures pratiques, les méthodologies de conception et d'autres informations utiles sur l'assemblage x86? Qu'en est-il de ce livre qui le rend spécial?

25
Billy ONeal

J'ai utilisé Assembly Language for x86 Processors comme manuel quand j'étais au collège et je l'ai trouvé très facile à comprendre. J'ai la quatrième édition plus ancienne et je l'ai comparée à la sixième édition et je n'ai pas remarqué beaucoup de changement, vous pouvez donc probablement acheter une copie plus ancienne à bas prix. Les gens se plaignent de son utilisation de sa propre bibliothèque pour les E/S, mais il vous explique comment procéder de la manière "difficile" dans les derniers chapitres.

18
dboss

L'endroit incontournable est le site Web d'Intel, où vous pouvez trouver des manuels de programmation et de référence à télécharger qui contiennent tout ce qu'il y a à savoir sur l'architecture x86.

Ici: Intel® 64 et IA-32 Architectures Software Developer's Manuals

18
Jesper

The Art of Assembly Programming est une excellente ressource qui contient pas mal de choses sur la programmation x86.

documentation ABI x64 est également utile. J'essayais de trouver un lien vers la version qui était sur le site Web d'AMD, mais je n'arrive plus à le trouver, donc je suppose que celui-ci devra le faire.

Quelque chose qui peut aider un peu [un peu] pendant l'apprentissage est, au lieu d'essayer d'écrire une application complète à partir de zéro dans Assembly, au lieu d'écrire la plupart en C (ou tout autre langage compilé vraiment), puis d'appeler un morceau de code Assembly à partir de cette. Une fois que vous avez fait cela, inversez-le, écrivez un programme d'assemblage et appelez quelques fonctions C à partir de cela.

Modifier: correction d'une faute de frappe.

9
Orclev

Un très bon livre pour apprendre l'assemblage x86 est Outils d'optimisation du processeur Pentium . Bien que l'objectif principal du livre soit l'optimisation du code d'assemblage, il enseigne l'assemblage Pentium en cours de route et constitue également un bon livre de référence.

Il est épuisé depuis longtemps mais n'est pas difficile à trouver utilisé.

Il est livré avec une disquette contenant un "optimiseur de code d'assemblage". Il n'optimise pas réellement votre code, mais produit une liste commentée qui indique où se trouvent les inefficacités telles que les blocages de pipeline.

L'outil fourni avec un livre est une version limitée d'un produit plus fonctionnel que la société de l'auteur vendait, mais pour des raisons que je ne connais pas, ils sont depuis longtemps fermés. Je ne sais pas pourquoi - je pense qu'un tel outil se vendrait comme des petits pains.

x86 en général est un sujet très complexe car il existe de nombreuses variantes prises en charge par différents modèles de microprocesseurs. Une fois que vous connaissez les bases, vous voudrez consulter les livres de données d'Intel ou d'AMD pour la puce précise que vous ciblez. Malheureusement, le code qui s'exécute rapidement sur un modèle de CPU peut ne pas être aussi rapide sur une autre puce.

4
Mike Crawford

Pourquoi ne pas essayer le wikibook - http://en.wikibooks.org/wiki/X86_Assembly . Il donne un bon début d'introduction au langage de l'Assemblée.

Le plus dur à propos de l'assemblage est de réaliser à quel point c'est simple, et que vous devez rester avec cette simplicité.

1
Philip Oakley