l'assembleur  [livre #4602]

par  pierre maurette




Introduction

Cet ouvrage est la réédition, revue en profondeur, de l'ouvrage "Assembleur" dans la collection Savoir Développer!

Le champ de cet ouvrage est la programmation en assembleur sur micro-ordinateurs compatibles PC munis d’un système d’exploitation DOS ou Windows. Un programmeur Linux sur architecture x86 y trouvera également support à initiation, mais il serait bon, par rapport aux exemples donnés, qu'il puisse utiliser le temps de l'apprentissage une plate-forme Windows.

Nous aborderons par la pratique plusieurs assembleurs parmi les plus courants, plus exactement plusieurs mises en oeuvre de l'assembleur.

La structure de la machine sera abordée jusqu'au seuil de la programmation système, tout en tentant la gageure d'intéresser le débutant absolu n'ayant même aucune notion d'électronique.

Nous sommes partis de la constatation suivante : beaucoup de programmeurs amateurs et professionnels souhaitent s’essayer à l’assembleur, pour faire face à un problème particulier, améliorer les performances de leurs programmes, ou simplement pour le plaisir.

Cette ambition bute alors contre de nombreuses difficultés. Or l’assembleur vu comme une liste d’instructions, ce n’est pas compliqué. C’est même le langage le plus simple qui soit, puisque a priori totalement prévisible. Nous nous sommes penchés sur ces difficultés, en ayant expérimenté nous-mêmes une partie. Nous en avons trouvé de deux ordres :

  Windows fait tout, à juste titre, pour masquer à l’utilisateur les entrailles de la machine. Or, cette connaissance, au moins partielle, est très utile, voire nécessaire. Nous avons donc consacré à ce sujet deux chapitres introductifs, et y avons ajouté une approche la plus intuitive possible de notions théoriques, mathématiques, indispensables.

  Pour saisir une seule ligne de code, il faut être en situation de le faire. Depuis l’époque où les machines démarraient sur l’invite d’un interpréteur Basic, les choses ont considérablement évolué, et dans un sens qui n'est pas celui de l'expérimentation. Pour la moindre ligne dans n’importe quel langage, il faut installer un outil de développement, souvent une usine à gaz, pour nous retrouver dans un environnement confortable. Admettons malgré tout que ces outils, uns fois installés, sont très efficaces. La situation est pire en assembleur, où il n’existe pas de véritable environnement de développement intégré. Nous avons résolu ce problème de deux façons. L’une passe par l’installation et l’exploitation de MASM, l’autre, très confortable, utilise l’excellent assembleur BASM intégré à Delphi, de Borland.

Cette dernière option, efficace et pragmatique, est décrite jusque dans les moindres détails d'installation. En effet, une autre caractéristique de l’ouvrage est de ne pas éluder le problème de l’approvisionnement du logiciel et surtout de sa mise en oeuvre.

Nous adressant en partie à des lecteurs désireux d’essayer ou de s'amuser, nous n’avons préconisé que des solutions peu onéreuses, souvent gratuites.

Parfois la place nous a imposé un choix, en particulier dans le cas de MASM et équivalents.  Nous avons choisi de permettre au lecteur de bénéficier d'un environnement opérant et des moyens de se procurer de la documentation et de s'en nourrir, plutôt que de décrire par le menu, voire cloner, cette documentation.

Cette seconde édition part du même niveau que la première, c'est à dire l'initiation. La différence est qu'un autre ouvrage plus ambitieux est depuis disponible dans la collection Référence , ce qui nous a permis d'en recadrer les ambitions.

Pour qui ?

Indubitablement, ce livre s’adresse tout d’abord au débutant complet comme au programmeur expérimenté voulant s’initier à l'assembleur. Il suffira, pour en profiter pleinement, de disposer d’un PC sous Windows muni d’un lecteur de CD-Rom et d'un accès occasionnel à Internet, un atout non négligeable.

L'ouvrage s'adresse également au lecteur contemporain des débuts de la micro-informatique, qui s'est en son temps, par plaisir ou nécessité, adonné au langage machine, et qui aujourd'hui aimerait bien s’y remettre. Il s'aperçoit que le processeur s'est empâté, sans rien perdre de sa vivacité, bien au contraire. Et qu'il est malheureusement devenu difficile d'accès, voire distant. À lui, comme à d'autres, nous présenterons, en toute fin d’ouvrage, un traitement alternatif, une sorte de médecine douce à base de microcontrôleurs PIC.

Vous programmez peut-être en C/C++, Pascal Objet, C#, ou pourquoi pas Java. Vous avez parfois des petits soucis, que vous résolvez en modifiant une variable signée en non signée, par exemple. Parcourez ce livre en testant les exemples, simplement à l’aide de Delphi ou de votre langage habituel qui prend certainement en charge l’assembleur, sauf s'il s'agit de Java. Puis oubliez l’assembleur et revenez à vos programmes. Nous vous garantissons un gain de productivité à la mesure du flou dans lequel vous étiez auparavant.

Démarrant au niveau 0, nous avons voulu aller plus loin qu’une simple addition ou l’affichage d’une chaîne de caractères. C’est pour cette raison que, une fois que le lecteur a en main tous les éléments pour progresser de lui-même, les choses s’accélèrent et les étapes sont brûlées. Le livre est en quelque sorte le début d’une série, dont vous écririez le tome 2 et les suivants aidés par quelques excursions dans ce premier tome. Pour aborder dans un avenir très proche, par vos propres moyens, l’architecture AMD64, par exemple.

C’est dans cette optique que certains paragraphes, vous le constaterez, sont écrits sans recul. Quand un point suscite des interrogations, nous exposons immédiatement les moyens mis en œuvre pour y répondre ; en effet, quand certaines constatations inattendues sont faites pendant la rédaction, nous traitons ces questions à la volée, en direct. Nous sommes convaincus que ces moyens sont parfois plus importants que la question elle-même, et qu’il serait dommage de les cacher par une réécriture "au propre" pour affirmer une quelconque expertise.

Nous avons voulu qu'un lecteur débutant mais motivé puisse ex-nihilo aller jusqu'à aborder des notions déjà complexes. Dans ces conditions, il est inévitable que certaines parties paraissent trop simples à d'autres lecteurs. Attention toutefois, l'Internet existe, et donc l'accès facile à une bonne information, dans le domaine de l'informatique s'entend. Nous avons donc appuyé sur l'explication et l'expérimentation. Et un programmeur déjà aguerri peut tirer avantage d'une approche de certaines notions non pas inévitablement meilleure, mais différente. Pensons aux variables et pointeurs, ou aux entiers signés.

Il nous a paru préférable, dans un volume donné, de sélectionner un certain nombre de notions, commandes, techniques et de les expliquer en profondeur, en détaillant le passage de la documentation à la pratique par le test, et de simplement citer les autres. Le travail restant pourra facilement être effectué en autonomie.

Comment lire cet ouvrage ?

De ce qui vient d'être écrit, nous déduisons que, bien entendu, la lecture de ce livre ne sera pas linéaire. Il devra être largement fait usage du sommaire et de l'index.

Le chapitre 1, Structure d'un micro-ordinateur , sera lu, parcouru ou négligé selon votre niveau de culture en micro-informatique et électronique. Il en ira de même pour le chapitre 2, L'architecture IA , à ceci près qu'y sont donnés un certain nombre de renseignements indispensables qui ne sont pas repris dans la suite du livre.

Le chapitre suivant, DOS et DEBUG : premiers programmes , est un peu particulier. Il propose quelques manipulations réalisables quelle que soit votre version de Windows, sans nécessité d'installer quoi que ce soit. De plus, il aborde la problématique de l'environnement DOS ou DOS‑like sous Windows.

Les choses changent aux chapitres suivants, Assembleurs autonomes , MASM / MASM32 , et Assembleurs intégrés . Dans ces chapitres, vous choisirez, installerez et testerez, si ce n'est déjà fait, un environnement de travail. Il est fortement conseillé d'installer un assembleur et ses outils issus du chapitre Assembleurs autonomes , et de celui sur MASM / MASM32 , la distribution MASM32 par exemple, ainsi que Delphi 6, quitte à le désinstaller en fin d'apprentissage. Vous pourrez également opter pour une solution cent pour cent Visual Studio (6 ou .NET) si vous possédez ce produit, au prix d'un petit travail d'adaptation des exemples.

Donc, pour résumer : lecture facultative, mais survol conseillé, des premiers chapitres, puis, ou mieux parallèlement, installation des environnements de travail proposés. Vous serez ensuite en position de continuer l'exploration de l'ouvrage, dans l'ordre ou dans le désordre. Vous y trouverez, en trois chapitres, la présentation très commentée des jeux d'instructions standard, FPU, MMX, 3DNow! et SSE. Enfin, nous traiterons de la pile et des cadres de pile, sujet méconnu qui nous tient à cœur, de chronométrage de code et donc d'optimisation.

Des notions importantes sont susceptibles d'être expliquées à n'importe quel endroit de l'ouvrage, qui fourmille d'exemples simples mais pragmatiques : que se passe-t-il si ... ? Il est donc important de ne pas se contenter de lire les chapitres consacrés à l'environnement de votre choix.

Il est impératif d'ouvrir le CD-Rom dès le début de la lecture, il peut s'y trouver des renseignements non signalés dans les pages du livre. Au moment même de la rédaction de cette introduction, la possibilité de joindre Delphi 7 conforte cette nécessité. Nous avons d'ailleurs décidé de doubler le CD‑Rom d'une page sur Internet, qui en sera le miroir actualisé.

Contact

Il est possible, et même bienvenu, de contacter l'auteur à assembleur.maurette @free.fr . Si votre message est muni d'une adresse de retour valide, soyez assurés d'une réponse rapide. Donc, à bientôt et bonne lecture.

Sète, mai 2004

Pierre Maurette

Envoyer un message à l'auteur

se connecter pour pouvoir écrire

Ce site est créé et maintenu (laborieusement) par Pierre Maurette
hébergé par 1 & 1