Accueil

Web

FaceBook

Telechargement

Contact

 

Ajouter aux Favoris

    Bienvenue ! 29/03/2024 @ 00:42:34 - IP : 44.204.65.189 -



Les cours du langage Assembleur - ZNsoft Tutorial
 




 

Microsoft

Télécharger

SQL Server 2012

Pinpoint

Visual Studio

Choisir son PC

 
 

Developpement

Visual Basic

Langage C

Java

Assembleur

Delphi

SQL

Python

WinDev

 
 

Systèmes OS

Ms Dos

Windows 9.x

Windows Nt

Windows Vista

Unix

Linux

Mac Os

 
 

Conception Web

PHP

ASP

Html

XmL

Flash Adobe

Director Adobe

WebDev

Java Script

 




Livre GRATUIT:
Livre gratuit pour maitriser Google Docs



 
 

 

Sommaire :


Présentation - Les bases d'Asm - Programmation du microprocesseur - Application Asm

Présentatioon du langage Assembleur

 

Cours du langage Assembleur pour les débutants

 

 

Présentation de l'assembleur :

 Qu'est ce que l'assembleur -  Comment utiliser l'assembleur - Materiels et logiciels nécessaires

 

Développer et déployer facilement vos sites web

Télécharger gratuitement Office 2013

Héberger votre site web sur des serveurs gratuits

Visual Studio 2013

Télécharger et apprenez gratuitement

Trucs et Astuces

Découvrez Windows 8.1 et télécharger le gratuitement

 

  Sachez que cette initiation ne s'adresse pas seulement aux débutants en programmation, ceux maîtrisant déjà un langage et souhaitant incorporer dans leur programme du code assembleur y trouveront également leur compte. Et pour ceux qui connaissent déjà ce langage, ils pourront se référer aux derniers chapitres traitant de l'optimisation du code, de la programmation graphique, bref, de l'utilisation "avancée" de l'assembleur.

• Qu'est ce que l'assembleur ?

L'assembleur est un langage de programmation (c'est-à-dire un moyen pour l'homme de communiquer avec la machine) de très bas niveau (entendez par là "très près de la machine"). En effet, la plupart des langages de programmation (C/C++, Pascal, Java, etc...) ont pour but de simplifier la tâche du programmeur en lui proposant des instructions "prêtes à l'emploi" pour les  tâches  habituelles  d'un programme. Par exemple, pour afficher un texte à l'écran, en langage C, vous faites  tout naturellement :   printf("Hello world!\n");

Mais en assembleur, pas de ça ! Vous êtes obligé de comprendre comment ça ce passe au niveau du processeur (sauf si vous utilisez les interruptions du DOS, bien sûr, mais nous verrons cela plus tard...). De plus, en général, il faut beaucoup de lignes de code pour faire pas grand chose... et le temps de programmation en est d'autant plus long. Mais alors, quels sont les avantages de l'assembleur ??? En fait, étant donné que vous programmez directement le processeur, vous pouvez vous-même effectuer des optimisations sur votre code, suivant les cas ; ce que le compilateur ne fait pas. Mais voyons d'abord ce que fait réellement un compilateur.

• Différences entre le compilateur et l'assembleur

Tout microprocesseur contient en lui-même un jeu d'instructions. Ces instructions, très basiques, se résument à une tâche simple, par exemple, "mettre telle valeur dans la mémoire", ou "additionner telle valeur avec telle autre valeur et mettre le résultat dans la mémoire". On est loin du printf du C ! En fait, l'assembleur va convertir un fichier source contenant les instructions du microprocesseur sous forme de mnémoniques anglaises en un fichier exécutable contenant le code numérique binaire de chaque instruction, et donc compréhensible par le microprocesseur. Ouf ! En clair, l'assembleur ne fait que traduire votre fichier source du langage humain vers le langage binaire. Je suis conscient que ceci peut être difficile à comprendre pour un débutant, je vais donc prendre un exemple concret. Voici ce que peut donner du code en assembleur permettant d'additionner 2 et 3 :

mov ax,2
add ax,3

Traduit en langage binaire, il donnera :

101110000000001000000000000001010000001100000000
( B80200050300 en hexadécimal )

On comprend mieux l'intérêt des mnémoniques et de l'assembleur ! Voyez la section sur les systèmes de numérotation si vous ne savez pas ce qu'est le binaire ou l'hexadécimal.

Le compilateur, lui, analyse un fichier source écrit en un langage dit "structuré", et transforme chaque instruction propre au langage en une suite d'instructions machines, donc il convertit le fichier source en programme assembleur, et ce n'est qu'ensuite qu'est produit le fichier exécutable contenant les codes binaires. En fait, le compilateur effectue une étape de plus que l'assembleur, c'est la transformation "fichier source écrit en langage structuré" vers "fichier source écrit en assembleur". C'est justement l'inconvénient du compilateur : la transformation n'est pas toujours aussi bonne que ce qu'elle pourrait. Evidemment, si vous voulez créer un programme qui affiche "Hello, world !", ou qui calcule la somme de deux nombres, l'utilisation de l'assembleur est inutile (même absurde), car même si le compilateur produit un code assembleur moins bon que ce qu'on pourrait faire directement en assembleur, la perte de vitesse lors de l'exécution du programme ne sera pas perceptible... Par contre, si vous voulez créer une application graphique ou un jeu, l'assembleur vous permettra d'obtenir des fonctions graphiques rapides, à condition bien sûr de bien connaître toutes les subtilités de l'assembleur, de manière à produire un code meilleur que le compilateur.

• Confusion entre le langage assembleur et le programme assembleur

En effet, vous avez peut-être remarqué qu'on désigne par le même nom ("assembleur") le langage et le programme traitant les fichiers sources. Dorénavant, on appellerai "assembleur" le programme assembleur, et "asm" le langage assembleur.

• Avantages et inconvénients de l'asm

Si on compare l'asm aux langages de haut niveau, on peut citer comme inconvénients :

- beaucoup de code pour faire peu
- temps de programmation plus long
- bugs plus fréquents
- débogage plus difficile

Mais non, ne partez pas ! Il n'y a pas que des points faibles :

- rapidité d'exécution
- code compact (peu d'octets)
- on peut absolument tout faire
- on peut optimiser les calculs
- euh... on peut dire : "moi, je connais l'asm !!", ça fait toujours bien pour se faire embaucher dans l'informatique ;).

Cette présentation étant faite, voyons maintenant dans quels cas exactement programmer en asm peut être utile, et comment s'y prendre.

 Comment et quand utiliser l'assembleur ?

• Intégrer de l'asm dans un programme écrit en C

Comme je l'ai déjà dit, de faire un programme entièrement en asm est particulièrement long et difficile. Par conséquent, dans cette initiation, nous verrons comment intégrer du code asm dans vos programmes écrits en langage C. J'ai choisi le langage C car c'est le plus répondu, de plus si vous vous intéressez à l'assembleur, c'est que vous cherchez la performance, donc vous connaissez sûrement le langage C. Ceci dit, je prends le C juste comme exemple, et quand je parlerais du C, vous pourrez facilement l'adapter à votre langage préféré.

En fait, la meilleure chose à faire pour pouvoir utiliser à la fois l'assembleur et le langage C (ou tout autre langage évolué), c'est de créer des fonctions en asm, de les assembler en tant que fichier objet, d'écrire des fichiers en-têtes (extension .h) pour déclarer vos fonctions au compilateur, puis de linker vos fichiers objets à votre exécutable final. Il existe une autre solution : l'assembleur "inline". Dans ce cas, l'asm et le C sont dans le même fichier source. Mais l'inconvénient, c'est que chaque compilateur établit une syntaxe différente pour le code asm. Et surtout, le compilateur n'est pas prévu pour écrire de l'assembleur, donc la gestion des erreurs est limitée. De plus, la syntaxe est souvent très lourde et complexe. Nous allons donc utiliser la première méthode, et il vous faudra vous procurer un compilateur et un assembleur (voir la section matériel et logiciels nécessaires).

• Dans quels cas utiliser l'asm ?

L'asm pourra vous être utile dans plusieurs cas :

- Si vous avez besoin de vitesse d'exécution. Par exemple, il est très judicieux d'écrire vos routines graphiques (affichage de points, de lignes, de polygones, etc...) en asm. Cela pourra vous faire gagner de nombreuses images par seconde, car vous pourrez alors optimiser au maximum les calculs. Et nous verrons dans la section consacrée à l'optimisation du code que le gain de temps peut être assez conséquent.

- Si vous désirez un code compact, de très petite taille, par exemple pour programmer un virus... mais cela dépasse le cadre de cette initiation.

- Ou tout simplement pour faire quelque chose que votre compilateur ne permet pas. Par exemple, vous serez obligés de passer par l'assembleur pour réaliser un programme TSR (Terminate and Stay Resident), ou pour détourner une interruption (voir les sections suivantes) ; quoique certains compilateurs le font.

Mais je pense que la majorité des personnes qui s'intéressent à l'asm aujourd'hui recherchent la performance, la vitesse, par exemple pour pouvoir programmer un moteur 3D digne de ce nom, ou pour effectuer des calculs conséquents assez rapidement.

Maintenant, avant de commencer à écrire nos premières lignes de codes, voyons ce qu'il est nécessaire de posséder pour pouvoir profiter des joies de l'assembleur...

  Materiels et logiciels nécessaires :

• L'assembleur

Il existe de nombreux assembleurs. Les plus connus sont MASM (Macro Assembler) de Microsoft et TASM (Turbo Assembler) de Borland. Mais ce ne sont pas les meilleurs : ils sont payants, et la syntaxe utilisée pour l'asm et horrible et illogique. Il existe aussi de nombreux assembleurs gratuits. Celui que nous allons utiliser lors de cette initiation est NASM ( Netwide Assembler ) . Il est complet (instructions Pentium et MMX), gratuit, bien documenté (y compris la documentation de toutes les instructions supportées), et possède une syntaxe logique et agréable à lire. Le seul hic, c'est qu'il n'est pas encore en version finale : la dernière version est la 0.98. Mais il est parfaitement utilisable et ne possède pas ou très peu de bugs. Téléchargez-le sans plus attendre !

• Le linker

L'assembleur ne créé pas un fichier exécutable (.exe) directement, mais produit un fichier objet. Un fichier objet contient des instructions assemblées, et le nom des symboles (fonctions, variables, etc...) utilisés. Ce fichier n'est pas exécutable directement. C'est le linker qui va se charger de convertir le fichier objet en fichier exécutable. Mais alors quel est son intérêt ? Pourquoi l'assembleur ne produit pas directement un fichier exécutable ? C'est parce-que le linker peut aussi combiner plusieurs fichiers objets (pas obligatoirement créés avec le même assembleur) pour former un seul fichier exécutable. Cela vous permet d'inclure dans vos programmes des librairies, c'est-à-dire un ensemble de fonctions externes au programme (par exemple il existe des librairies qui s'occupent du son, du joystick, de l'affichage en 3 dimensions, etc...) qui ont été crées avec un assembleur différent, ou même avec un compilateur. Cela vous permet aussi de séparer votre programme en plusieurs fichiers sources (ce qui est vivement conseillé pour des gros programmes), ce qui vous permet de mieux vous y retrouver, et aussi d'accélérer les temps d'assemblage (seuls les fichiers sources que vous avez modifiés sont assemblés). Si vous n'avez pas compris ce que je viens de raconter, ne vous inquiétez pas, vous comprendrez plus tard par la pratique.

Comme nous allons programmer en 32 bits, il nous faut un linker qui supporte le mode protégé ). Le 32 bits n'est pas à l'origine supporté par DOS, il faut donc utiliser un DOS-EXTENDER : c'est un programme qui permet de lancer des exécutables fonctionnant en mode protégé (donc en 32 bits) sous DOS. Le plus simple est d'utiliser l'environnement DJGPP : c'est le portage du compilateur GCC du monde Linux pour DOS, créé par DJ Delorie. Il contient un compilateur C et plein d'autres d'outils très utiles, dont un linker 32 bits, un DOS-EXTENDER, un débogueur (sert à trouver les erreurs dans les programmes, en l'exécutant pas à pas), un programme "make" (vous tapez "make", et le programme se charge d'assembler uniquement les fichiers sources modifiés, puis de linker le tout ; mais avant il faut créer un script indiquant les actions à effectuer : voyez la documentation), et même un assembleur (en fait il est utilisé en interne par le compilateur, on ne peut pas l'utiliser pour programmer en asm directement car il possède une syntaxe plus qu'horrible (syntaxe AT&T) et ne possède pas de documentation). Mais surtout, il fait partie du projet GNU, c'est-à-dire qu'il est gratuit et est livré avec ses sources.

En téléchargement :

Si vous voulez des versions à jour, allez sur le site officiel de DJGPP : www.delorie.com/djgpp. Il vous faudra télécharger :

le linker : bnuXXXb.zip
le serveur DPMI : csdpmi
Xb.zip
le compilateur C : gcc
XXXb.zip
le kit de développement : djdev
XXX.zip
texinfo : txi
XXXb.zip
la FAQ : frfaq
XXb.zip

• Un éditeur de texte

N'importe quel éditeur de texte peut faire l'affaire, même l'edit du DOS ou le bloc-notes de Windows.

• Côté matériel

Il vous faut simplement un PC muni d'un processeur Intel 386 ou supérieur. Vous devriez avoir ça... :) Ne vous inquiétez pas : un programme écrit pour le 386 fonctionnera sans problème sur un Pentium ; par contre l'inverse n'est pas vrai. En effet, chaque nouvelle génération de processeur apporte de nouvelles instructions, mais ne modifie pas l'usage des instructions qui existaient déjà (heureusement d'ailleurs).



Déposez votre CV
lien de téléchargement direct
50 tirages offerts à l'inscription chez myPIX.com!
Dépot de CV gratuit sur Touslesemplois
Logiciel de référencement automatique

         

Devenez membre ZNsoft : La communauté Informatique

Cours -  Etudiants -  Concours -  Congrès -  Téléchargement -  Formations


_________________________________________________________________________________________________________
Qui sommes-nous ? | Contact | | Inviter un ami | Soutenir ZNsoft | Revue de press | Références
ZNsoft Corporation, Tous Droits Réservés © 2002/ 2024 ZNsoft RSS
  Dernière mise à jour : 26/03/2024