Langage assembleur Imane HALKHAMS 1 Introduction • Lorsque l'on doit lire ou éc

Langage assembleur Imane HALKHAMS 1 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). 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). • La saisie du programme source au clavier nécessite un programme appelé éditeur de texte. 2 Introduction • 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, le chargeur est responsable de la lecture du fichier exécutable, de son implantation en mémoire principale, puis du lancement du programme. 3 Introduction • 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. 4 Pourquoi faire de l'assembleur ? • Ecrire un compilateur • Environnements embarqués, micro-controlleurs • Systèmes temps-réels durs Avantages • Meilleure compréhension des langages • Meilleure compréhension des machine 5 La machine • Deux fonctions Calculer : rôle du (micro)-processeur Stocker : rôle de la mémoire • Langage spécifique Un langage par processeur, appelé jeu d'instructions Une référence commune : le binaire 6 Processeur: Registres • Mémoires de calcul Les calculs se décomposent en opérations élémentaires Ces opérations ont besoin de stocker des résultats intermédiaires Le processeur contient de petites mémoires appelées registres • Registres sur 8086 8 Registres généraux (16 bits) ax, bx, cx, dx, si, di, bp et sp 4 Registres de segments (16 bits) cs, ds, es et ss 2 Registres spéciaux (16 bits) ip et flags 7 Processeur: Registres • Sous-registres: • Les registres A, B, C et D se décomposent en deux sous-registres de 8 bits chacun • h (partie haute) et l (partie basse). • Par exemple, ax se décompose en ah et al 8 Structure de la mémoire • La mémoire se comporte comme un grand tableau d'octets • Accéder à la mémoire consiste à accéder à une case du tableau en indiquant son indice, appelé adresse • Un accès mémoire se fait selon une certaine taille : on peut accéder à plusieurs octets contiguës en une seule fois On peut lire l'octet situé à l'adresse 123h On peut écrire deux octets situés à l'adresse 456h Le premier va dans la case 456h et le deuxième dans la case 457h 9 Les modes d’adressages • Ce sont les diverses manières de définir la localisation d’un opérande. Les trois modes d’adressage les plus courant sont : • Adressage immédiat: On parle de mode d'adressage immédiat lorsque le code opérande contient une donnée. La taille de la donnée peut varier entre 1 et 2 octets. • Exemple : • LDA #$12 charger la valeur $12 dans l’accumulateur A Le symbole ‘#’ signifie immédiat dans la syntaxe assembleur. • LDX #$E000 charger la valeur $E000 dans le registre d’index X 10 Les modes d’adressages 11 Les modes d’adressages • Ce sont les diverses manières de définir la localisation d’un opérande. Les trois modes d’adressage les plus courant sont : • Adressage direct (ou absolu): Dans ce mode d'adressage, l'adresse de la donnée en mémoire (RAM, ROM ou port d'E/S s'il est intégré à la mémoire) est donnée. Dans ce mode, le champ opérande de l'instruction contient l'adresse effective de l'opérande et on doit faire un accès à la mémoire pour obtenir ce dernier. 12 Les modes d’adressages 13 Les modes d’adressages • Adressage indirect: Dans ce mode d'adressage, le champ adresse de l'instruction ne contient plus l'adresse de l'opérande, mais l'adresse d'une position mémoire qui, elle, contient l'adresse de l'opérande. Dans ce mode d'adressage, l'adresse de la donnée se trouve dans un registre spécial du processeur (le registre BX) (du même nombre de bits que son bus d'adresses), le pointeur de données. L'avantage, comparé à l'adressage direct, est que l'adresse peut être manipulée commodément, par exemple pour accéder à une suite de données consécutives en mémoire. Ceci est spécifiquement utile quand on manipule des données stockées dans un tableau. 14 Les modes d’adressages 15 Les modes d’adressages • Implicite : • Le mode d'adressage implicite correspond à une instruction ne comportant pas d'opérande. • L'instruction est composée du code opération uniquement et sa taille peut varier entre 1 octet et 2 octets selon l'opération. • Ex. ADD AX, BX • Relatif : • Ce type de mode d'adressage met en jeu un champ opérande contenant un entier relatif (sa taille est donc un octet). • On l'utilise pour les opérations de saut, l'entier relatif est appelé déplacement, il correspond à la longueur du saut que le processeur doit effectuer dans les instructions. 16 Jeu d'instructions Instructions: Les instructions permettent de spécifier les opérations à effectuer. Elles sont données au processeur sous la forme d'une chaine binaire. En assembleur, on les écrit sous forme de mnémoniques. On utilise un programme d'assemblage pour transformer les mnémoniques en binaire. La traduction binaire d'un mnémonique est appelée un opcode. 17 Exemples d'instructions 18 Exemples d'instructions 19 Exemples d'instructions • Quelques instructions: • L’instruction MOV: • L'instruction MOV attend deux opérandes, le premier indique la destination du déplacement de la donnée, le second opérande indique la source. • La destination peut être un registre, une adresse mémoire ou un registre de segment (sauf pour le registre CS qui ne peut jamais être une destination). • La source peut être un registre, une adresse mémoire, un registre de segment ou une valeur immédiate. 20 Exemples d'instructions • Le tableau ci-dessous inventorie quelques les manières d'utiliser l'instruction MOV: MOV r1 , r2 r1 reçoit la valeur identique à celle contenue dans r2 MOV r , i Le registre r est initialisé avec une valeur immédiate MOV m , i Ecriture d'une valeur immédiate en mémoire MOV m , r Ecriture en mémoire à partir du registre r Echanges entre registres généraux et registres de segment MOV s , r MOV r , s 21 Exemples d'instructions • D’autres instructions: • Les instructions MOV ont été utiles pour illustrer les modes d'adressage mais avec les MOV il est juste possible de déplacer les données d'un endroit à l'autre. Il faut d'autres instructions pour faire des opérations arithmétiques et logiques, des sauts, des appels à des fonctions, à des interruptions etc. Voici donc quelques instructions: • Opérations arithmétiques et logiques élémentaires : ADD SUB CMP AND TEST OR XOR * TEST: Cette instruction permet d'effectuer un «Et binaire» sur une opérande cible sans modifier sa valeur et définit les drapeaux d'état SF, ZF et PF en fonction du résultat. 22 Exemples d'instructions • Multiplications et divisions: MUL IMUL DIV IDIV • Exemples : MUL BYTE PTR Valeur AX := AL x Valeur DIV BYTE PTR Valeur AL := AX / Valeur • Incrémentation, décrémentation, inversion logique, négation: INC DEC NOT NEG • Appel d'un sous-programme : CALL label • Sauts inconditionnels: JMP label • Sauts conditionnels : JZ (=JE) JNZ ( = JNE) JC JNC JS JNS (voir diapo suivante) *NEG: Cette instruction permet d'effectuer le complément à 2 d'une opérande. 23 Sauts (Branchements) • On appelle saut (ou branchement) en assembleur le fait de passer à une instruction autre que celle qui suit celle en cours en mémoire. En effet, en temps normal (c'est- à-dire sans instruction contraire) le processeur exécute les instructions séquentiellement, il exécute l'instruction située à l'emplacement mémoire suivant. • C'est le registre spécial (le registre IP) qui indique l'adresse de l'instruction suivante à exécuter. Dans certaines conditions il peut être intéressant de « choisir » la prochaine instruction à effectuer. • Ce type de condition peut notamment se rencontrer dans les structures conditionnelles (saut si...) ou bien dans les structures de boucle (en effet dans le cas où on désire exécuter un grand nombre de fois une instruction il peut être intéressant d'utiliser une instruction de branchement, qui indique au processeur l'adresse de la prochaine instruction à exécuter au lieu de gaspiller la mémoire en stockant plusieurs fois la même instruction en mémoire). 24 Sauts (Branchements) • Lors de l'exécution « normale » d'un programme, le processeur lit l'adresse contenue dans le registre IP, incrémente celui-ci pour qu'il pointe vers l'instruction suivante, puis exécute l'instruction contenue uploads/Industriel/ 11-assembleur.pdf

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