PROGRAMMATION EN ASSEMBLEUR I ) Introduction : Lorsque l'on doit lire ou écrire

PROGRAMMATION EN ASSEMBLEUR I ) Introduction : Lorsque l'on doit lire ou écrire un programme en langage machine, il est difficile d'utiliser la notation hexadécimale. On écrit les programmes à l'aide des instructions en mnémonique comme MOV, ADD, etc. Les concepteurs de processeurs, comme Intel, fournissent toujours une documentation avec les codes des instructions de leurs processeurs, et les symboles correspondantes. L'assembleur est un utilitaire qui n'est pas interactif, (contrairement à l'utilitaire comme debug : voir plus loin dans le cours). Le programme que l'on désire traduire en langage machine (on dit assembler) doit être placé dans un fichier texte (avec l'extension .ASM sous DOS). La saisie du programme source au clavier nécessite un programme appelé éditeur de texte. L'opération d'assemblage traduit chaque instruction du programme source en une instruction machine. Le résultat de l'assemblage est enregistré dans un fichier avec l'extension .OBJ (fichier objet). Le fichier .OBJ n'est pas directement exécutable. En effet, il arrive fréquemment que l'on construise un programme exécutable à partir de plusieurs fichiers sources. Il faut (relier) les fichiers objets à l'aide d'un utilitaire nommé éditeur de lien (même si l'on a qu'un seul). L'éditeur de liens fabrique un fichier exécutable, avec l'extension .EXE. Le fichier .EXE est directement exécutable. Un utilitaire spécial du système d'exploitation (DOS ici), le chargeur est responsable de la lecture du fichier exécutable, de son implantation en mémoire principale, puis du lancement du programme. Donc en conclusion pour assembler un programme on doit passer par les phases suivantes : - Saisie du code source avec un éditeur de texte. - Compiler le programme avec un compilateur. - Editer les liens pour avoir un programme exécutable. Les trois phases sont schématisées par la figure suivante : Remarque 1 :  On ne peut passer du code source vers le code objet que si le programme source ne présente aucune erreur.  La saisie se fait par des logiciels qui s'appellent éditeurs de texte, donc on peut utiliser n'importe quel éditeur de textes (tel que EDLINE sous MSDOS de Microsoft) sauf les éditeurs sous Windows car ces éditeurs ajoutent dans le fichier des informations (la taille des caractères, la police utilisée, la couleur etc...) que l'assembleur ne peut pas comprendre .Pour utiliser les éditeurs sous Windows il est conseiller d'enregistrer les fichiers sous forme RTF. Editeur de lien :  permet de lier plusieurs codes objets en un seul exécutable.  permet d'inclure des fonctions prédéfinies dans des bibliothèques. Plusieurs logiciels permettent le passage entre les trois phases présentée dans la figure précédente on peut citer : MASM (Microsoft Assembler : avec LINK comme éditeur de lien), TASM (Turbo assembler : avec TLINK comme éditeur de lien) et NASM etc ... Remarque 2 : On peut générer à partir d'un fichier objet d'autres formes de fichier pour des systèmes autres que l'ordinateur (compatible IBM). Les formes les plus connues sont INTEL HEX, ASCII HEX etc ... Remarque 3 : L'assembleur est utilisé pour être plus prés de la machine, pour savoir exactement les instructions générées (pour contrôler ou optimiser une opération) On retrouve l'assembleur dans : - la programmation des systèmes de base des machines (le pilotage du clavier, de l'écran, etc...), - certaines parties du système d'exploitation, - le pilotage de nouveaux périphériques (imprimantes, scanners, etc.. - l'accès aux ressources du système, L'avantage donc de l'assembleur est de générer des programmes efficaces et rapides (à l'exécution) par contre ses inconvénients : développement et mise au point long. II ) Le fichier source (code source) : Comme tout programme, un programme écrit en assembleur (programme source) comprend des définitions, des données et des instructions, qui s'écrivent chacune sur une ligne de texte. Les données sont déclarées par des directives, mots clefs spéciaux que comprend l'assembleur (donc ils sont destinés à l'assembleur. Les instructions (sont destinées au microprocesseur) II-1 ) Les instructions : La syntaxe des instruction est comme suit : {Label :} Mnémonique {opérande} { ; commentaire} - Le champ opérande est un champ optionnel selon l'instruction (parfois l'instruction nécessite une opérande et parfois non). - Le champ commentaire : champ sans signification syntaxique et sémantique pour l'assembleur , il est optionnel mais très intéressant lorsque on programme en assembleur, en effet les instructions en assembleur sont des instructions élémentaires donc dans un programme le nombre d'instructions et assez élevé (par exemple pour utiliser des fonctions tels que COS ou SIN il faut réaliser ça en utilisant des opérations arithmétiques et logiques de base) donc contrairement au langage évolué de programmation dans les programmes source on va trouver plus d'instructions. Ce qui va rendre la compréhension des programmes assez délicate et difficile. Pour cette raison lorsque on programme en assembleur il vaut mieux mettre des commentaires pour que le programme soit lisible pour les utilisateurs. Remarque : Les commentaires sont mis en général dans les passages délicats. - Le champ Label (étiquette) est destiné pour marquer une ligne qui sera la cible d'une instruction de saut ou de branchement. Une label peut être formée par 31 caractère alphanumérique ({A.. Z} {a.. z} {0.. 9} {.?@_$}) au maximum .Les noms des registres ainsi que la représentation mnémonique des instructions et les directives (voir plus loin) ne peuvent être utilisées comme Label. Le champ Label doit se terminer par ' : ' et ne peut commencer par un chiffre. De même il n'y a pas de distinction entre minuscules et majuscules. Exemple : ET1 : MOV AX , 500H ; mettre la valeur 500 dans le registre AX II-2 ) Les directives : Pour programmer en assembleur, on doit utiliser, en plus des instructions assembleur, des directives ou pseudo-instructions : Une directive est une information que le programmeur fournit au compilateur. Elle n'est pas transformée en une instruction en langage machine. Elle n'ajoute donc aucun octet au programme compilé. Donc les directives sont des déclarations qui vont guider l'assembleur. Une directive est utilisée par exemple pour créer de l'espace mémoire pour des variables, pour définir des constantes, etc... Pour déclarer une directive il faut utiliser la syntaxe suivante : {Nom} Directive {opérande} { ; commentaire}  Le champ opérande dépend de la directive  Le champ commentaire a les mêmes propriétés vues dans le paragraphe précèdent.  Le champ Nom indique le nom des variables : c'est un champ optionnel (selon la directive). II-3 /Exemple de directives : III- 3-1 ) Les directives de données : III-3- 1-1 / EQU : Syntaxe : Nom EQU Expression Exemples : VAL EQU 50 ; assigne la valeur 50 au nom VAL ET1 EQU VAL* 5 + 1 ; assigne une expression calculer a VAL III-3- 1-2 ) DB/DW/DD/DF/DP/DQ/DT: Ces directives sont utilisées pour déclarer les variables : L'assembleur attribue à chaque variable une adresse. Dans le programme, on repère les variables grâce à leurs noms. Les noms des variables sont composés d'une suite de 31 caractères au maximum, commençant obligatoirement par une lettre. Le nom peut comporter des majuscules, des minuscules, des chiffres, plus les caractères @, et _. Lors de la déclaration d'une variable, on peut lui affecter une valeur initiale. a° ) DB (Define byte): définit une variable de 8 bits : c a d elle réserve un espace mémoire d'un octet : donc les valeurs qu'on peut stocker pour cette directive sont comprises entre 0 et 255 ( pour les nombres non signés ) et de -128 jusqu'à 127 pour les nombres signés . Syntaxe : Nom DB Expression Exemple : Vil DB 12H ; Définit une variable (un octet) de valeur Initiale 12. Tab DB 18H, 15H, 13H ; définit un tableau de 3 cases ;(3 octet) Qui démarre à partir de l'adresse TAB. Mess DB 'ISET' ; définit aussi un tableau mais les valeurs de chaque case ;n'est autre que le code ascii de chaque lettre. Name DB ? ; définit une variable 8 bits de valeur initiale quelconque . b° ) DW ( define word) : définit une variable de 16 bits : c a d elle réserve un espace mémoire d'un mot : donc les valeurs qu'on peut stocker pour cette directive sont comprises entre 0 et 65535 ( pour les nombres non signés ) et de -32768 jusqu'à 32767 pour les nombres signés . Syntaxe : Nom DW Expression Exemple : TT1 DW 500H ; réserve deux cases mémoire (un mot) a partir de l'adresse TT1. TAB1 DW 10H,11H,14H ; réserve u tableau de 6 cases chaque valeur sera mise sur deux cases YY DW ? ; réserve un mot dans la mémoire de valeur initial quelconque. c° ) DD : (Define Double) : réserve un espace mémoire de 32 bits ( 4 cases mémoire ou 4 octets ) : Syntaxe : nom DD expression Exemple : ff DD 15500000H e°/ Directive dup Lorsque l'on veut déclarer un tableau de n cases, toutes initialisées à la même valeur, on utilise la directive dup: tab DB 100 dup (15) ; 100 octets valant 15 y DW 10 dup (?) ; 10 mots de 16 bits non initialises f°/ Les uploads/s3/ chapitre-3-programmation-en-assembleur.pdf

  • 26
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager