42 votes

Quelle est la meilleure façon d'apprendre l'assemblage ? En particulier, pour quelqu'un qui a de l'expérience dans les langages dynamiques.

J'utilise Python depuis un certain temps déjà, et j'aime absolument sa facilité d'utilisation et sa flexibilité, mais je veux vraiment me rapprocher du matériel pour certaines mathématiques itératives sur lesquelles je travaille. Je suis également intrigué par le fait d'être si proche du matériel, sans que rien ne vous empêche d'utiliser tout ce qu'il possède.

J'ai fait des recherches pour des introductions à l'Assemblée et pour moi, elles vont beaucoup plus vite qu'elles ne devraient. Ils sautent directement aux registres et aux opérations sans expliquer ce qu'ils sont exactement, et pourquoi ils sont importants.

J'aimerais bien voir une introduction approfondie à l'Assembleur, pour être sûr de bien comprendre les concepts avant de se lancer dans toute forme de programmation avec cet outil.

40voto

Chris Points 4263

Comme d'autres l'ont dit, commencer par un langage de niveau inférieur comme le C / C++ est un bon début. Familiarisez-vous avec leurs caractéristiques, telles que pointeurs , références, bitmasks etc., puis de tenter montage .

Un tutoriel que j'aime beaucoup est le Tutoriel d'assemblage de PC (le PDF de la fermeture éclair peut être trouvé aquí ) trouvé ici. Tant que vous n'aurez pas créé et exécuté un programme simple, et que vous ne l'aurez pas débogué, il sera difficile de comprendre l'assemblage.

Plus important encore, connaître votre Von Neumann architecture informatique et d'autres informations de base sont extrêmement importantes : conception du processeur , conception de la mémoire , architecture de bus , divers caches le système de nombres binaires et les opérations, etc. Il est impossible de comprendre l'assemblage sans une solide compréhension des mathématiques que vous utilisez et du matériel sur lequel vous programmez, car vous êtes très proche du matériel lorsque vous programmez à ce niveau.

Dans de nombreux cas, il est plus facile d'apprendre sur un processeur plus simple. J'ai d'abord appris sur un simulateur Java qui utilisait un dérivé plus simple du jeu d'instructions x86, avec moins de registres, puis je suis passé à la programmation sur un processeur Motorola MC68HC12 conseil d'administration du projet.

6voto

Daniel Auger Points 8459

Personnellement, je pense qu'il est amusant de travailler avec l'assemblage sur des ordinateurs rétro comme le c64 ou l'Apple II. C'est à peu près aussi simple et fonctionnel que vous pouvez le faire. Une fois que vous vous y sentez à l'aise, vous devriez pouvoir passer à l'assemblage x86.

4voto

Steve M Points 4852

En dehors des tutoriels et des références mentionnés, je vous suggérerais de vous familiariser d'abord avec le C, car ce ne sera pas un saut aussi important que celui de Python à l'assembleur. Le C est également aussi proche que possible de l'assembleur (en termes de performances et de proximité du matériel), avec une courbe d'apprentissage moins importante.

Une fois que vous êtes à l'aise avec le langage C, apprenez à connaître les instructions et les registres de votre architecture, puis lancez un débogueur (GDB sous Linux et WinDbg ou OllyDebug sous Windows) sur quelques applications C de base pour voir comment elles fonctionnent à ce niveau.

Les avantages que vous mentionnez en codant en assembleur sont quelque peu vrais, mais vous aurez beaucoup moins de mal à le faire en C. Comme la plupart des choses, si vous codez mal en assembleur (et sans vouloir vous offenser, vous le ferez probablement en tant que débutant), il fonctionnera plus lentement qu'une application C bien écrite.

Et vous pouvez toujours assemblage en ligne en C .

2voto

Henrik Paul Points 22787

J'ai assisté à un cours à mon université où nous avons écrit Assemblage MIPS . C'est un processeur RISC, ce qui rend l'effort humain un peu plus humain. Et, à vrai dire, c'est plutôt amusant et pas si difficile que ça, une fois qu'on a pris le coup de main.

Malheureusement, je ne me souviens pas des livres que nous avons utilisés dans ce cours, mais je suis sûr qu'Amazon a de bonnes propositions.

Essayez SPIM comme plateforme de simulation.

2voto

Mark Harrison Points 77152

Daniel Auger a raison.

Selon votre inclination, trouver un émulateur CP/M Z80 ou un émulateur 6502 Apple ][ est un bon pari.

"A l'époque, nous avons tous appris l'assembleur, car c'était un langage pratique à utiliser. Pas de cache, pas d'exécution prédictive, etc. Vous avez une poignée de registres, une vingtaine d'instructions, etc. Et un gros programme (selon mes critères !) faisait 8 ou 10 kilo-octets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X