Architecture des ordinateurs : Assembleur 2022- 2023 Majdoulayne HANIFI • Un la

Architecture des ordinateurs : Assembleur 2022- 2023 Majdoulayne HANIFI • Un langage d’assemblage ou langage assembleur est un langage de bas niveau qui représente le langage machine sous une forme lisible par un humain. • Les combinaisons de bits du langage machine sont représentées par des symboles dits mnémoniques • Le programme assembleur convertit ces mnémoniques en langage machine en vue de créer un fichier exécutable. • Le langage machine est le seul langage qu’un processeur puisse exécuter Assembleur Introduction • Chaque famille de processeur utilise un jeu d’instructions différent. • Ainsi le langage assembleur, représentation exacte du langage machine, est spécifique à chaque architecture de processeur. • Le langage machine est le langage directement interprétable par le processeur. • Il est défini par un ensemble d’instructions que le processeur exécute directement. Assembleur Introduction • Chaque instruction est codée selon le cas sur un octet, un mot de 16 bits, ... : le format de l’instruction) et se décompose en : 1. une partie codant l’opération à exécuter appelée opcode ou code opération 2. une partie pour les opérandes • Un programme en langage machine est une suite de mots codant opérations et opérandes • Chaque processeur possède son propre langage machine. Assembleur Introduction • D’un point de vue de la programmation, le processeur offre : un certain jeu d’instructions qu’il sait exécuter. un certain nombre de registres. un certain nombre de manière d’accéder à la mémoire : modes d’adressage. Assembleur Introduction • Le jeu d’instructions est l’ensemble des opérations élémentaires qu’un processeur peut accomplir. • Le type de jeu d’instructions d’un processeur détermine son architecture. • On distingue deux types d’architectures RISC (Reduced Instruction Set Computer) : PowerPC, MIPS, Sparc CISC (Complex Instruction Set Computer) : Pentium Assembleur Jeu d’instructions RISC : o jeu d’instructions de taille limitée o instructions simples o format des instructions petit et fixé o modes d’adressage réduits Assembleur Jeu d’instructions : CISC : o jeu d’instructions de taille importante o instructions pouvant être complexes o format d’instructions variables (de 1 à 5 mots) o modes d’adressages complexes. Leurs caractéristiques sont les suivantes : • Les instructions du langage machine manipulent des données. • Selon ou ces données se trouvent, on parle de différents modes d’adressage. • Comment interpréter les opérandes pour trouver les données de l’instruction ? : adressage immédiat, adressage (indirect) indexé, adressage implicite… Assembleur Modes d’adressage • Un programme en assembleur a une forme bien particulière. • Chaque ligne du code assembleur comporte une instruction. • Chaque ligne est composée de champs, de gauche à droite, on a :  le champ étiquette, qui peut être vide  le champ mnémonique (le nom de l’instruction)  le champ opérande (les arguments de l’instruction)  le champ commentaire, qui peut être vide Assembleur Anatomie d’un programme en assembleur • Une étiquette (label) est un identificateur composé de lettres, chiffres et de caractères $, %, _ et ? • Quelques exemples d’étiquettes valides : boucle, fin_de, tant_que, ... • L’étiquette de code doit se terminer par deux points (:). • Elle sert en général comme destinations des instructions ou de retour de début des boucles de répétition. • Un mnémonique est, généralement, composé uniquement de lettres. • Quelques mnémoniques souvent utilisés : MOV, CMP, LOOP, ... • On pourra indifféremment écrire les mnémoniques avec des lettres minuscules ou majuscules. Assembleur Anatomie d’un programme en assembleur • Les opérandes d’une instruction indiquent les données à traiter : 1. soit sous la forme de valeurs constantes, 2. soit en spécifiant l’adresse mémoire (l’emplacement en mémoire) ou se trouve la donnée, 3. soit le nom d’un registre contenant la donnée 4. ou registre contenant l’adresse mémoire de la donnée. • Un commentaire commence par un caractère « ; » et se termine en fin de ligne. • Il sert à ajouter des informations explicatives au sujet du fonctionnement du programme ou de l’instruction correspondante. Assembleur Anatomie d’un programme en assembleur • Les directives : • sont des ordres que l'on donne à l'Assembleur. • Elles concernent seulement et uniquement l’assembleur. • On les utilise pour demander certaines choses, notamment comment on veut qu'il assemble le programme. • Ces directives seront donc lues par EMU8086 avant l'assemblage. • les directives ne feront donc pas partie du programme en langage machine, puisqu'elles ne sont destinées qu'à l'Assembleur et non au processeur Assembleur Anatomie d’un programme en assembleur • Les directives : • MODEL sélectionne le modèle de mémoire. Il y a 6 modèles différents: • TINY: code et données sont sur un même segment de 64 Ko . Les sauts se font au sein de ce segment. • SMALL: code et données sont sur un segment chacun. • MEDIUM: Le code est sur plusieurs segments. Les données sur un seul segment. • COMPACT: Le code est sur 64 Ko, les données sur plusieurs segments. Assembleur Anatomie d’un programme en assembleur • Les directives : • MODEL sélectionne le modèle de mémoire. Il y a 6 modèles différents: • LARGE: Code et données sont multisegment, mais une structure de donnée (tableau par exemple) doit tenir sur un seul segment • HUGE: Id. mais les structures de données sont multi-segment. • Nous travaillerons toujours en modèle SMALL. Assembleur Anatomie d’un programme en assembleur • Les directives : • STACK permet de dimensionner la pile. Cette pile est indispensable, et sauf cas exceptionnel, elle doit toujours être présente et suffisamment dimensionnée. • DATA permet de définir les données simples ou complexes de l'application. • CODE précède les instructions du programme qui se termine par la directive END Assembleur Anatomie d’un programme en assembleur • Les macros : • écrire un programme en assembleur est en général assez long. • Le plus frustrant était que la plupart des tâches sont répétées très souvent. • Ecrire à l'avance le code de toutes les tâches les plus couramment utilisées, et les enregistrer dans des fichiers. • Par ailleurs, ils associent à chacune de ces tâches un nom. • Ces raccourcis sont très utilisés. Ce sont les macros. Il en existe un grand nombre. Assembleur Anatomie d’un programme en assembleur • Les macros : • Exemples de macros : • EXIT : Normalement, pour quitter convenablement un programme, il faut écrire quelques lignes de code à la fin. • Au lieu de cela, nous allons utiliser cette macro qui va faire le travail à notre place. • Exit est une macro qui sert à quitter le programme. • INKEY : c'est une macro qui permet de mettre le programme en pause. Assembleur Anatomie d’un programme en assembleur • Données initialisées • Données simples : • DB (Data Byte) définit une donnée sur 1 octet, • DW (Data Word) sur 1 mot ( 2 octets), • DD (Data Double) un double mot (4 octets), • DQ (Data Quadword)pour 8 octets, • DT (Data Tenbytes) pour 10 octets. Assembleur Déclaration des données V1 DB ‘A’ V2 DW 380 V3 DD 4BFCh • Données initialisées • Tableaux : • TAB DW 0,1,2,3,4 • MATRICE DD 0,1,2 DD 3,4,5 DD 6,7,8 • Le préfixe DUP permet de dupliquer n fois l'argument entre parenthèses. Assembleur Déclaration des données T DW 256 DUP(0) ChaineVide DB 10 DUP(' ') • Données initialisées : • Chaînes : • CH1 DB 'A', 'B', 'C', 'D’ • CH2 DB 'ABCD' • CH3 DB 'Bonjour',13,10 • CH4 DB 'Salut', 0Dh,0Ah, Assembleur Déclaration des données Les déclarations de CH1 et CH2 ont le même résultat. les valeurs 0Dh 13, 0Ah 10 correspondent aux codes ASCII commandant le saut à la ligne ( Carriage return et Line Feed). • Données non initialisées : • La réservation de place en mémoire se fait trés simplement sur le modèle suivant : • BUF DB 10 DUP(?) ; réserve 10 octets pour BUF. • Directive EQU : • Elle permet d’affecter une valeur à un label ( qui ne pourra plus être modifiée) • reponse EQU 'O’ • LongueurMax EQU 1000 Assembleur Déclaration des données Il faut s'obliger à utiliser le plus possible des labels lorsqu'on programme en assembleur. Il est en effet plus facile de lire par exemple: CMP AL, REPONSE que: CMP AL, 'O' • Tous les programmes assembleur devront avoir la structure suivante : • data segment; variables globales initialisées et non initialisées • … • ends • Code segment • start: • … • maFonction proc; déclaration de maFonction • … • maFonction endp • ;------------------------------------------------------------------------------------------------ • end start ; fin du programme • ends Assembleur Assembleur Liste des registres les plus utilisés A. Registres généraux et pointeurs : • AX (A pour accumulateur): joue le rôle d’opérande implicite dans plusieurs opérations: MUL, DIV, INC, etc. • CX (C pour compteur): est utilisé pour les boucles (instruction LOOP). • DX: utilisé dans les multiplications et divisions comme registre d’extension. • SI (Source Index): souvent utilisé comme pointeur sur une adresse mémoire (exemple: MOV AL, [SI]). Il est très utilisé avec les instructions de traitement de chaînes de caractères. • DI (Destination Index): pareil que SI. • BP (base uploads/Industriel/ chap-7-archi.pdf

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