Upload
lydiep
View
222
Download
3
Embed Size (px)
Citation preview
République Tunisienne Ministère de l’Enseignement Supérieur et de la Recherche scientifique et de la Technologie
Notes de cours Microprocesseurs
3ème niveau Informatique Industrielle
Mohamed Ali KAMMOUN
Année Universitaire : 2006-2007 Version : 2.0
Institut Supérieur des Etudes Technologiques de Mahdia
Table des matières CHAPITRE I :....................................................................................................................................................... 1 INTRODUCTION GENERALE AUX MICROPROCESSEURS.................................................................... 1 1. INTRODUCTION ....................................................................................................................................... 2
1.1. DEFINITIONS ......................................................................................................................................... 2 2. PRINCIPE DE FONCTIONNEMENT DU MICROPROCESSEUR..................................................... 3 3. ARCHITECTURE D’UN MICROPROCESSEUR.................................................................................. 5 CHAPITRE II: ...................................................................................................................................................... 7 LE MICROPROCESSEUR 16 BITS 8086/8088 ................................................................................................ 7 1. INTRODUCTION ....................................................................................................................................... 8 2. STRUCTURE INTERNE ........................................................................................................................... 8
2.1. UNITE D’INTERFACE DE BUS................................................................................................................. 9 2.2. UNITE D’EXECUTION............................................................................................................................. 9 2.3. LES REGISTRES ..................................................................................................................................... 9
2.3.1 Registres de données ..................................................................................................................... 10 2.3.2 Les pointeurs et index.................................................................................................................... 10 2.3.3 Registres de segments.................................................................................................................... 10
3. FONCTIONNEMENT INTERNE DU 8086 ........................................................................................... 10 3.1. FONCTIONNEMENT EN MODE INTERRUPTION....................................................................................... 10
3.1.1 Principe d’échange par interruption............................................................................................. 10 3.1.2 Les différents types d’interruptions............................................................................................... 11
3.2. FONCTIONNEMENT AVEC LA MEMOIRE ............................................................................................... 11 3.2.1 Segmentation ................................................................................................................................. 11 3.2.2 Le mapping.................................................................................................................................... 12 3.2.3 La gestion de la pile ...................................................................................................................... 13
3.3. FONCTIONNEMENT AVEC LES ENTREES/SORTIES ................................................................................. 13 CHAPITRE III:................................................................................................................................................... 15 LA PROGRAMMATION ASSEMBLEUR DU 8086/8088 ............................................................................. 15 1. DEMARCHE A SUIVRE POUR ECRIRE UN PROGRAMME EN ASSEMBLEUR....................... 16 2. CONSTITUTION D’UN PROGRAMME SOURCE ............................................................................. 16
2.1. LES INSTRUCTIONS ............................................................................................................................. 16 2.2. LES DIRECTIVES.................................................................................................................................. 16
2.2.1 Les directives de données.............................................................................................................. 16 2.2.2 Les directives de segment et de procédure .................................................................................... 17 2.2.3 La directive macro ........................................................................................................................ 18 2.2.4 Les directives de blocs................................................................................................................... 18 2.2.5 Les directives de contrôle.............................................................................................................. 19 2.2.6 Les directives de liaison ................................................................................................................ 19
2.3. LES OPERATEURS ................................................................................................................................ 19 2.3.1 Les opérateurs arithmétiques ........................................................................................................ 19 2.3.2 Les opérateurs logiques ................................................................................................................ 20 2.3.3 Les opérateurs relationnels ........................................................................................................... 20 2.3.4 Les opérateurs retournant une valeur ........................................................................................... 21 2.3.5 Les opérateurs attribuant une valeur ............................................................................................ 21
3. LES MODES D’ADRESSAGE ................................................................................................................ 21 3.1. ADRESSAGE IMMEDIAT ....................................................................................................................... 21 3.2. ADRESSAGE REGISTRE ........................................................................................................................ 22
3.3. ADRESSAGE DIRECT............................................................................................................................ 22 3.4. ADRESSAGE INDIRECT ........................................................................................................................ 22 3.5. ADRESSAGE RELATIF A UNE BASE (BASE) ........................................................................................... 22 3.6. ADRESSAGE INDEXE ........................................................................................................................... 22 3.7. ADRESSAGE BASE INDEXE................................................................................................................... 22 3.8. RECAPITULATION ............................................................................................................................... 22
CHAPITRE IV:................................................................................................................................................... 23 LES INSTRUCTIONS DU 8086/8088 ............................................................................................................... 23 1. INTRODUCTION ..................................................................................................................................... 24 2. LES INSTRUCTIONS DE TRANSFERT DE DONNEES.................................................................... 24
2.1. LES INSTRUCTIONS A USAGE GENERAL ............................................................................................... 24 2.2. LES INSTRUCTIONS D’ENTREE / SORTIE .............................................................................................. 25 2.3. LES INSTRUCTIONS DE TRANSFERT D’ADRESSE ................................................................................... 26 2.4. LES INSTRUCTIONS DE TRANSFERT DE FLAGS...................................................................................... 26
3. LES INSTRUCTIONS ARITHMETIQUES........................................................................................... 26 3.1. LES INSTRUCTIONS D’ADDITION.......................................................................................................... 26 3.2. LES INSTRUCTIONS DE MULTIPLICATION............................................................................................. 27 3.3. LES INSTRUCTIONS DE SOUSTRACTION................................................................................................ 27 3.4. LES INSTRUCTIONS DE DIVISION.......................................................................................................... 28 3.5. LES INSTRUCTIONS D’EXTENSION DU SIGNE........................................................................................ 28
4. LES INSTRUCTIONS DE MANIPULATION DES BITS.................................................................... 29 4.1. LES INSTRUCTIONS LOGIQUES............................................................................................................. 29 4.2. LES INSTRUCTIONS DE DECALAGE....................................................................................................... 30 4.3. LES INSTRUCTIONS DE ROTATION ....................................................................................................... 31
5. LES INSTRUCTIONS DE BRANCHEMENT....................................................................................... 32 5.1. BRANCHEMENT INCONDITIONNEL....................................................................................................... 32 5.2. BRANCHEMENT CONDITIONNEL .......................................................................................................... 32 5.3. LES INSTRUCTIONS DE BOUCLE ........................................................................................................... 33
6. LES INSTRUCTIONS STRING.............................................................................................................. 34 6.1. LES INSTRUCTIONS MOVE-STRING ..................................................................................................... 34 6.2. LES INSTRUCTIONS COMPARE-STRING................................................................................................ 34 6.3. LES INSTRUCTIONS LOAD-STRING (LODS) ET STORE-STRING (STOS) .......................................... 34 6.4. LES INSTRUCTIONS SCAN-STRING..................................................................................................... 35
7. LES INSTRUCTIONS D’INTERRUPTION .......................................................................................... 35 8. LES INSTRUCTIONS DE CONTROLE DE PROCESSUS ................................................................. 36
8.1. OPERATIONS SUR LES FLAGS............................................................................................................... 36 8.2. SYNCHRONISATION EXTERNE ............................................................................................................. 37 8.3. NON OPERATION ................................................................................................................................. 37
CHAPITRE V : ................................................................................................................................................... 38 LES OPERATIONS D’ENTREES/SORTIES.................................................................................................. 38 1. INTRODUCTION ..................................................................................................................................... 39 2. ENTREE/SORTIE D’UN CARACTERE ............................................................................................... 39
2.1. ENTREE D’UN CARACTERE .................................................................................................................. 39 2.2. SORTIE D’UN CARACTERE ................................................................................................................... 39
3. ENTREE/SORTIE D’UNE CHAINE DE CARACTERE ..................................................................... 39 3.1. ENTREE D’UNE CHAINE ....................................................................................................................... 39 3.2. SORTIE (AFFICHAGE) D’UNE CHAINE .................................................................................................. 40
4. QUELQUES FONCTIONS DE L’INTERRUPTION 21H DOS........................................................... 40
5. ENTREE/SORTIE SUR PORT................................................................................................................ 41 CHAPITRE VI:................................................................................................................................................... 42 LES INTERRUPTIONS..................................................................................................................................... 42 1. INTRODUCTION ..................................................................................................................................... 43 2. LES INTERRUPTIONS MATERIELLES ............................................................................................. 43 3. LES INTERRUPTIONS LOGICIELLES............................................................................................... 43 4. TRAITEMENT D’UNE INTERRUPTION ............................................................................................ 44
4.1. PRISE EN CHARGE D’UNE INTERRUPTION............................................................................................. 44 4.2. VECTEUR D’INTERRUPTIONS............................................................................................................... 44 4.3. ARCHITECTURE D’UNE ROUTINE DE TRAITEMENT D’INTERRUPTION ................................................... 45 4.4. INSTRUCTIONS SPECIFIQUES................................................................................................................ 46
CHAPITRE VII: ................................................................................................................................................. 47 L’INTERFACE PARALLELE I8255 ............................................................................................................... 47 1. DESCRIPTION ......................................................................................................................................... 48 2. FONCTIONS DES LIGNES DE COMMANDES .................................................................................. 49 3. PROGRAMMATION DU PPI ................................................................................................................. 49
3.1. FORMAT DU MOT DE COMMANDE........................................................................................................ 49 3.2. SEQUENCE DE LECTURE/ECRITURE..................................................................................................... 50
4. MODE 0 DU PPI ....................................................................................................................................... 50 BIBLIOGRAPHIE.............................................................................................................................................. 51
Liste des figures FIG. 1 : INTERVENTION D’UN SYSTEME INFORMATIQUE. SOUS LA DIRECTION D’UN PROGRAMME, IL TRAITE DES
DONNEES ET FOURNIT UN RESULTAT. ............................................................................................................. 2 FIG. 2 : COMPOSITION D’UN SYSTEME INFORMATIQUE DES PLUS CLASSIQUES, ICI UN PC DE BUREAU. ON Y TROUVE
UNE UNITE CENTRALE ET PLUSIEURS PERIPHERIQUES. .................................................................................... 2 FIG. 3 : VOICI LE SYNOPTIQUE LE PLUS DEPOUILLE D’UN MICRO-ORDINATEUR. IL COMPREND LE
MICROPROCESSEUR RELIE D’UNE PART A DES MEMOIRES CENTRALES ET D’AUTRE PART, A DES CIRCUITS
D’INTERFACES LE CONNECTANT AU CLAVIER, A L’ECRAN, ETC ...................................................................... 3 FIG. 4: EN UNE PREMIERE APPROCHE, ON PEUT CONSIDERER QUE LE MICROPROCESSEUR EST DOTE DE TROIS
GROUPES DISTINCTS APPELES 1) L’UNITE DE RECHERCHER D’UNE INSTRUCTION EN MEMOIRE, 2) L’UNITE DE
DECODAGE DE L’INSTRUCTION, ET ENFIN 3) L’UNITE D’EXECUTION. .............................................................. 4 FIG. 5: CE NOUVEAU SYNOPTIQUE EST PLUS DEVELOPPE QUE LE PRECEDENT. IL FAIT INTERVENIR TROIS
IMPORTANTS REGISTRES (IL S’AGIT DE PETITES MEMOIRES LINEAIRES) QUI SONT LE COMPTEUR ORDINAL, LE
REGISTRE D’INSTRUCTIONS ET L’ACCUMULATEUR. DANS LES PROCESSEURS EVOLUES, LE NOMBRE DES
REGISTRES S’ACCROIT CONSIDERABLEMENT ET, BIEN SUR, ILS CHANGENT DE NOMS...................................... 5 FIG. 6 : CERTAINS MICROPROCESSEURS INCORPORENT DES CIRCUITS D’HORLOGE. SEUL, LE QUARTZ, QUI BAT LA
FREQUENCE DE TRAVAIL, RESTE EXTERNE...................................................................................................... 5 FIG. 7 : LE PLUS SOUVENT, LES PHASES DE L’HORLOGE SONT CREEES PAR UN CIRCUIT INTEGRE INDEPENDANT
PILOTE PAR LE QUARTZ. IL Y EN A DEUX, ICI. ELLES SONT ENSUITE APPLIQUEES AU MICROPROCESSEUR. ...... 6 FIG. 8 : LES BATTEMENTS DE L’HORLOGE PILOTENT L’EXECUTION DES INSTRUCTIONS. ICI, ON SUPPOSE QUE
L’INSTRUCTION EST EXECUTEE EN TROIS PERIODES D’HORLOGE, OU TROIS MICROCYCLES............................. 6 FIG. 10 : PRINCIPE DE L’ECHANGE PAR INTERRUPTION........................................................................................... 11 FIG. 11 : PRINCIPE DE LA SEGMENTATION .............................................................................................................. 12 FIG. 12 : LE MAPPING............................................................................................................................................. 12 FIG. 13 : VECTEUR D’INTERRUPTIONS.................................................................................................................... 45 FIG. 14 : STRUCTURE INTERNE DU 8255................................................................................................................. 48 FIG. 15 : BROCHAGE DU PPI 8255.......................................................................................................................... 48 FIG. 15 : MOT DE COMMANDE................................................................................................................................ 49 FIG. 16 : MOT DE COMMANDE EN MODE SET/RESET .............................................................................................. 50
CHAPITRE I :
Introduction Générale aux Microprocesseurs
Plan :
1. Introduction
2. Principe de fonctionnement du microprocesseur
3. Architecture d’un microprocesseur
CHAPITRE I : Introduction Générale aux Microprocesseurs ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 2
1. Introduction
1.1. Définitions
• Système informatique
Un système informatique sert à exécuter des programmes d’applications à partir des nouvelles données qu’on lui fournit. Il procure, en échange, des résultats ou, dans un contexte industriel, prend des décisions. C’est ce qu’illustre la figure 1.
Fig. 1 : Intervention d’un système informatique. Sous la direction d’un programme, il traite
des données et fournit un résultat.
Fig. 2 : Composition d’un système informatique des plus classiques, ici un PC de bureau. On
y trouve une unité centrale et plusieurs périphériques.
Ce système informatique se compose, à son tour, au moins d’une unité centrale et de plusieurs périphériques (figure 2).
• Le microprocesseur
Un microprocesseur est un circuit intégré programmable qui exécute les fonctions d’unité centrale d’ordinateur. Il gère ses périphériques grâces a des circuits spécialisés appelés interfaces ou circuits d’interfaces ou encore entrées-sorties.
Dans l’unité centrale on trouve généralement le microprocesseur qui doit lire son programme, recevoir des données, en fournir d’autres en sortie. Par conséquent, il doit communiquer avec des mémoires centrales ainsi qu’avec des périphériques via des circuits d’entrées-sorties, ou «interfaces». Sachant que tout cela est réuni par des connexions
CHAPITRE I : Introduction Générale aux Microprocesseurs ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 3
électriques qui, regroupées, prennent le nom général de bus, on aboutit à un schéma synoptique aussi dépouillé que celui de la figure 3.
Fig. 3 : Voici le synoptique le plus dépouillé d’un micro-ordinateur. Il comprend le microprocesseur relié d’une part à des mémoires centrales et d’autre part, à des circuits
d’interfaces le connectant au clavier, à l’écran, etc • Les bus
Le microprocesseur communique avec son environnement via 3 bus : données, adresses et commande. 1) Le bus de données il transporte les données ou les instructions du programme.
2) Le bus d’adresses il fournit l’adresse, soit de la cellule mémoire visée, soit du dispositif d’entrée-sortie. Chacun d’eux dispose, en effet, d’une ou de plusieurs adresses qui se distinguent de celles des mémoires d’une façon ou d’une autre.
3) Le bus de commandes il transmet les ordres dans tous les sens. Il s’agit, par exemple, d’un ordre de lire la cellule mémoire adressée, ou de l’écrire.
2. Principe de fonctionnement du microprocesseur Le programme à exécuter est composé d’instructions rangées aux adresses croissantes de la mémoire. Le µP doit accomplir les taches suivantes :
• Il doit appeler une instruction qu’il lit en mémoire. • Il la décode c’est à dire qu’il traduit en commandes d’organisation interne ce qu’elle
lui a dit de faire. • L’exécute.
CHAPITRE I : Introduction Générale aux Microprocesseurs ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 4
Cette procédure est illustrée par la figure suivante :
Fig. 4: En une première approche, on peut considérer que le microprocesseur est doté de trois groupes distincts appelés 1) l’unité de rechercher d’une instruction en mémoire, 2)
l’unité de décodage de l’instruction, et enfin 3) l’unité d’exécution.
Le µP recherche une instruction. Pour savoir, en permanence, qu'elle est l’adresse de la cellule à laquelle il doit accéder, il dispose d’un registre qui conserve le nombre correspondant à cette adresse appelé registre d’adresse, compteur d’instructions, pointeur d’instructions ou compteur ordinal.
Le code de l’instruction qui vient d’être lu dans la mémoire est ramené dans le µP où il est enregistré dans un autre registre appelé registre d’instructions. Il est décodé et le processeur sait maintenant ce qu'il doit faire. Si cet octet de code d’instruction est encore insuffisant, c’est le décodeur qui commandera la recherche d’un second octet.
Dès qu'un octet d'instruction est chargé, le compteur d'instruction s'incrémente automatiquement. De ce fait, il est prêt pour aller chercher l'instruction suivante le compteur ordinal pointe toujours l'instruction suivante.
Les résultats du décodage sont transmis à l'unité d'exécution du µP qui lance l'exécution de l'instruction.
Si l’instruction procure un résultat, ce dernier est temporairement enregistré dans un autre registre appelé accumulateur.
Cette séquence est pilotée par des circuits de commande et de séquencement et d'une horloge qui met chacune de ces unités en service à tour de rôle (figure 5).
Mémoire
Unité de recherche
Unité de décodage
Unité d’exécution
Microprocesseur
CHAPITRE I : Introduction Générale aux Microprocesseurs ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 5
Fig. 5: Ce nouveau synoptique est plus développé que le précédent. Il fait intervenir trois importants registres (il s’agit de petites mémoires linéaires) qui sont le compteur ordinal, le
registre d’instructions et l’accumulateur. Dans les processeurs évolués, le nombre des registres s’accroît considérablement et, bien sûr, ils changent de noms.
3. Architecture d’un microprocesseur
Les circuits de commande et de séquencement mettent chacune des sections du microprocesseur en service à tour de rôle. Ils sont eux-mêmes pilotés par une horloge à quartz (un peu comme dans une montre électronique). Le quartz est forcément externe au processeur ; en revanche, les circuits d’horloge peuvent être internes, externes, ou les deux à la fois.
Fig. 6 : Certains microprocesseurs incorporent des circuits d’horloge. Seul, le quartz, qui bat
la fréquence de travail, reste externe.
CHAPITRE I : Introduction Générale aux Microprocesseurs ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 6
Fig. 7 : Le plus souvent, les phases de l’horloge sont créées par un circuit intégré
indépendant piloté par le quartz. Il y en a deux, ici. Elles sont ensuite appliquées au microprocesseur.
La figure 6 montre comment se présente une horloge interne et la figure 7 comment intervient un circuit d’horloge externe. Prenons un exemple concret de calcul des temps. Soit une horloge à 50 MHz. Dans ce cas, la période d’horloge (une période est l’inverse de la fréquence) vaut : 1 / 50 000 000 = 20 ns (nanosecondes)
Considérons maintenant l’exécution d’une instruction d’addition en supposant que:
• La lecture en mémoire du code de l’instruction avec ses données demande une période d’horloge.
• Le décodage en consomme une.
• L’exécution s’effectue également en une période d’horloge.
Dans ce cas, l’instruction complète est traitée en trois périodes d’horloge, soit : 3*20ns = 60ns
Fig. 8 : Les battements de l’horloge pilotent l’exécution des instructions. Ici, on suppose que
l’instruction est exécutée en trois périodes d’horloge, ou trois microcycles. NB : Le temps d’exécution de chaque instruction est rigoureux et indiqué par le fabricant du microprocesseur en périodes d’horloge. C’est ce qui explique que le fonctionnement s’accélère lorsque la fréquence de travail s’accroît.
L’ensemble des périodes nécessaires pour exécuter une instruction est appelé cycle d’instruction
CHAPITRE II:
Le Microprocesseur 16 Bits 8086/8088
Plan:
1. Introduction
2. Structure interne
3. Fonctionnement interne du 8086
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 8
1. Introduction Créé en 1978 par Intel, le 8086 a été l'un des premiers microprocesseurs 16 bits. Il dispose d'un bus de données sur 16 bits, ce qui constituait à l’époque à la fois un avantage en raison de cette puissance, et un inconvénient car les circuits spécifiques 16 bits d'accompagnement n'existaient pas encore. Force était donc d’uti1iser les « anciens » circuits périphériques 8 bits dans des montages plus complexes. C'est ce qui a amené Intel à créer un sous-produit du 16 bits 8086 mais avec une différence considérable : son bus de données externe est sur 8 bits. C’est le 8088, né en 1979. Ainsi, le microprocesseur 16 bits en interne peut utiliser des circuits périphériques 8 bits dont le double avantage est qu ils existaient et qu'ils étaient économiques. C'est pourquoi le 8088 est désigné par « vrai-faux» 16 bits.
2. Structure interne
Fig. 9 : Structure interne du 8086/8088 Le schéma de la structure interne fait apparaître deux unités : l'unité d'interface du bus (BIU) et l'unité d'exécution (EU). Un microprocesseur exécute un programme en respectant les cycles suivants :
• Recherche de la prochaine instruction dans la mémoire (Fetch). • Lecture (si requise pour l'instruction) d'un opérande. Décodage.
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 9
• Exécution de l'instruction • Ecriture (si requise pour l'instruction) du résultat.
L'unité d'interface du bus (BIU) recherche les instructions, lit les opérandes et écrit les résultats alors que l'EU effectue le décodage et l'exécution. La BIU et l'EU fonctionnent en mode pipeline : pendant que l'EU exécute une instruction, la BIU appelle la suivante, stockée dans la mémoire.
2.1. Unité d’Interface de Bus Les BIU du 8086 et du 8088 sont fonctionnellement identiques mais structurellement différentes pour s'adapter respectivement aux bus de 16 et de 8 bits. La BIU assure la liaison avec le monde extérieur, génère les adresses grâce à un additionneur, cherche les instructions et les range dans une file d'attente (Queue) de 6 octets pour le 8086 et de 4 pour le 8088.
2.2. Unité d’exécution L'EU (identique pour le 8086 et 88) comporte essentiellement l'UAL à 16 bits qui manipule les registres généraux (16 bits) et les opérandes d'instruction. Elle n'a pas de liaison avec le bus système (monde extérieur). Elle reçoit les instructions à partir de la queue et transmet à la BIU le résultat de son travail.
2.3. Les registres Les registres du 8086/88 peuvent être classés en quatre groupes :
• Les registres de données • Les registres pointeurs et index • Les registres de segments • Les registres pointeur d'instruction et indicateur.
Registres de données
AH AL BH BL CH CL DH DL
Pointeurs et index
Pointeur de pile Pointeur de base
Index source Index destination
Registres de segment
Code Données
Pile (Stack) Extra (Supplémentaire)
AX BX CX DX
7 0 7 0
SP BP SI DI
15 0
CS DS SS ES
15 0
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 10
Pointeurs d’instructions et indicateurs
Pointeur d’instructions O D I T S Z A P C
2.3.1 Registres de données Ils sont au nombre de quatre et peuvent travailler par moitié (8 bits) Accumulateur : AX composé de AH et AL. Base : BX composé de BH et BL. Compteur : CX composé de CH et CL. Donnée : DX composé de DH et DL. Bien qu’ils soient généraux, ils ont des fonctions très précises en dehors des opérations arithmétiques et logiques classiques. BX sert à l’adressage en mémoire des données. CX et CL servent de compteur de boucle. DX permet l’adressage des ports et sert également d’extension à AX (donnée sur 16 bits)
2.3.2 Les pointeurs et index Parmi ces quatre registres 16 bits, deux sont appelés pointeurs (SP et BP) et deux index (SI et DI) Les deux pointeurs SP (Stack Pointer: pointeur de pile) et BP (Base Pointer) servent a l’adresse des données ; (SP indique le niveau de remplissage de la pile). Les deux index SI (Index de Source) e DI (Index de Destination) permettent la gestion de suite de mots.
2.3.3 Registres de segments Le 8086/88 possède un bus d’adresse de 20 bits capable d’adresser un espace mémoire de 1 Méga Octets. Cet espace est découpé en tranches de 64 KO maximum appelées «Segment ». Le CPU possède un accès direct aux quatre segments au moyen de leurs adresses de base se trouvent dans les registres segments.
• Segment de code (CS) : sert à l’adressa2e des octets du programme.
• Segment de données (DS) : sert à l’adressage des données. • Segment de pile (SS) : gère la pile. • Segment supplémentaire (ES) : complète DS.
3. Fonctionnement interne du 8086
3.1. Fonctionnement en mode interruption Une interruption est fondamentalement un événement externe par rapport au microprocesseur qui survient à un moment imprévu cela alors que le microprocesseur exécute sa tâche.
3.1.1 Principe d’échange par interruption Une interruption permet ainsi à un événement aléatoire, survenant à un moment quelconque non prévisible, d’être pris en compte par le microprocesseur.
IP Mot d’état
15 0
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 11
Fig. 10 : Principe de l’échange par interruption
• Un périphérique alerte son circuit d'interface (E/S) qu'il veut transmettre une information au processeur.
• Le circuit d'E/S envoie une demande d’interruption au µP. • Le processeur termine l'instruction qu'il est entrain d'exécuter. Il range en mémoire
(Pile) le contenu de tous les registres relatifs au programme en cours d’exécution (compteur ordinal, index et du registre d'état etc). puis il retourne un accusé de réception (Interruption autorisée =1) au circuit d'E/S pour l'informer qu'il est prêt.
• Il passe à la séquence de traitement de l'interruption en appelant le programme spécifique et l'exécute.
• Cela terminé, il rappelle tout ce qu'il avait sauvegardé et reprend l'exécution du programme principal.
3.1.2 Les différents types d’interruptions On distingue deux types d'interruption : les interruptions matérielles, déclenchées par un périphérique, et les interruptions logicielles, introduites sous forme d'un code dans un programme. Les interruptions matérielles se subdivisent encore en plusieurs catégories : Une interruption de plus haute priorité, non masquable. Pour cette raison elle s'appelle interruption NMI, le µP dispose d'une entrée spéciale pour ce type d'interruption. Les 15 interruptions masquables courantes. Une interruption encore supérieure en priorité appelée RESET. Elle sert à la réinitialisation du µP. Après un RESET on aura :
8086/88 CS DS ES SS Flag IP RESET FFFFH 0000H 0000H 0000H 0000H 0000H
3.2. Fonctionnement avec la mémoire
3.2.1 Segmentation Pour les processeurs 8086/88, un segment est une portion de mémoire de 64 Ko au maximum. Le µP dispose d'un registre de segment qui pointe un segment en mémoire via une adresse sur 16 bits.
Microprocesseur
Circuit d’E/S
Demande d’interruption
Interruption autorisée
Bus
Périphérique
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 12
Fig. 11 : Principe de la segmentation Une adresse complète couvrant un espace 1Mo doit être fournie sur 20 bits. Le registre de segment seul est donc insuffisant. La solution consiste à multiplier l'adresse sur 16 bits par 16 (soit tout simplement ajouter quatre 0 à droite). Cette adresse sur 20 bits sert de point de départ à un segment de 64Ko. Dans ce segment, un pointeur, sur l6 bits, désigne une cellule mémoire en indiquant un déplacement par rapport à son début. Sa valeur s’ajoute à celle du pointeur de segment. Par convention, une adresse complète est indiquée en hexadécimal en spécifiant la valeur du segment avant multiplication, donc sur 16 bits, puis la valeur du déplacement dans ce segment, sur 16 bits également. Le tout séparé par un double-point (:) La syntaxe est ainsi :
Segment : déplacement
3.2.2 Le mapping C'est la traduction de l'adresse logique en adresse physique. Pour le 8086/88 ce mécanisme est implémenté dans la BIU, il fournit une adresse sur 20 bits couvrant 1Mo (de 00000H à FFFFFH). Cette adresse est formée de la façon suivante :
Fig. 12 : Le mapping
Code Segment
Data Segment
Stack Segment
Extra Segment
CS
DS
SS
ES
Offset IP Offset BX, SI, DI
Offset SP, BP
Offset BX, SI, DI
0000
FFFF
Adresse logique
15 0
Registre de segment
15 0
0000
Adresse physique sur 20 bits
19 0
+
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 13
Exemple Soit l’adresse 15B2 : 0120 L'adresse du segment est 15B2H le décalage 0120H. D’où l'adresse physique est 15B20 + 0120 = 15C40H Remarque L'adresse calculée finale est l'adresse physique ou réelle. L'adresse effective est l'offset calculé.
3.2.3 La gestion de la pile La pile du 8086/88 est large de 16 bits. C’est une mémoire de type LIFO. On y accède au moyen des registres SS : SP. Le registre de segment SS contient son adresse de base alors que SP pointe son haut (TOS : Top Of Stack), c’est à dire que SP contient l’offset du haut de la pile par rapport à son adresse de base. Un mot est empilé (mis dans la pile) au moyen de l’instruction PUSH, le pointeur de pile SP est alors décrémenté de 2. Il est dépilé (extrait de la pile) au moyen de l’instruction POP, SP est alors incrémenté de 2. Exemple Etat initial AX = 21F4H Empilement : PUSH AX Dépilement : POP AX
3.3. Fonctionnement avec les entrées/sorties Le 8086/88 peut adresser jusqu’à 1Mo en mémoire, de plus il est capable d’adresser des périphériques sur 1 octet (256) ou même sur deux octets (65535 maximum).
XX
XX
XX
00A8
000C
SS SP
+
00A8CH
00A80H
Pile
XX
XX
XX
00A8
000A
SS SP
+
00A8AH
00A80H
Pile
21
F4
XX
XX
XX
00A8
000C
SS SP
+
00A8CH
00A80H
Pile
CHAPITRE II : Le Microprocesseur 16 Bits 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 14
Les instructions IN (INPUT) et OUT (OUTPUT) transfèrent les données entre l’accumulateur AL/AX (8/16 bits) et les ports se trouvant dans l’espace E/S. L’espace E/S n’est pas segmenté. Afin d’accéder à un port, la BIU place l’adresse du port sur les 16 lignes d’adresse de poids le plus faible. Si l’adresse est seulement un octet, il suffit d’en spécifier la valeur dans l’instruction même. Si c’est un mot, c’est une variable à mettre dans le registre DX au préalable.
CHAPITRE III:
La Programmation Assembleur du 8086/8088
Plan:
1. Démarche à suivre pour écrire un programme en
assembleur
2. Constitution d’un programme source
3. Les modes d’adressage
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 16
1. Démarche à suivre pour écrire un programme en assembleur
• Traduire le cahier des charges en un algorithme ou un organigramme explicitant le
fonctionnement du programme.
• Ecrire les instructions du programme puis les saisir à l’aide d’un éditeur. On dispose ainsi d’une version lisible du programme appelée programme source.
• Assembler le programme. S’il contient des erreurs, il faut corriger puis ré-assembler. Le résultat de cette opération est un programme objet.
• Lier le programme. Le linker de l’assembleur permet de lier ensemble les divers modules du programme : on obtient ainsi le programme final (exécutable).
• Exécuter le programme.
2. Constitution d’un programme source Le programme source est constitué de:
• Déclarations destinées au microprocesseur appelées instructions. • Déclarations destinées à l’assembleur appelées directives
2.1. Les instructions Toute instruction du programme source possède le format à quatre champs suivant : [Label :] mnémonique [opérande] [ ; commentaire] La mnémonique est toujours obligatoire, l’opérande pourrait être nécessaire pour l’instruction, alors que le label et le commentaire sont optionnels.
2.2. Les directives Les directives sont des déclarations à l’intention de l’assembleur pour le guider. Elles peuvent en outre, définir des constantes et des symboles, réserver de la place mémoire pour les variables .... A la différence des instructions, elles ne génèrent pas de code machine. Le format d’une directive peut posséder quatre champs [Nom] directive [opérande] [ ; commentaire] Les directives de l’assembleur se classent en cinq catégories :
2.2.1 Les directives de données * EQU : (Equal) • Syntaxe : Nom EQU expression [ ; commentaire] • Fonction : Assigne la valeur de l’expression au nom. Exemples : Nombre EQU 25 ; valeur constante X EQU PI ; nom symbolique Y EQU 2*X+1 ; expression * DB: (Define Byte) • Syntaxe : [Nom] DB expression [; commentaire] • Fonction : Définit une variable ou alloue (réserve) des octets.
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 17
• Exemples : Maxi DB 50 ; définit une variable maxi initialisée à 50. Table DB 2,6, 4 dup(?) Message DB ‘Bonjour $’ * DW : (Define Word) • Syntaxe : [Nom] DW expression [; commentaire] • Fonction : Comme DB mais on alloue des mots de 2 octets. * DD : (Define Double Word) • Syntaxe : [Nom] DD expression [; commentaire] • Fonction : Comme DB mais on alloue des mots de 2 octets.
2.2.2 Les directives de segment et de procédure • Syntaxe : Nom_seg SEGMENT [alignement][combine][‘classe’]
Nom_seg ENDS • Fonction : Délimite un segment donné. ENDS marque la fin du segment. [alignement]: indique l’alignement du début de segment à une adresse: - contiguë : Byte - paire : Word - divisible par 16 (par défaut) : Para (paragraphe) - divisible par 256: Page [combine] : indique qu’il faut: - concaténer avec un autre module : Public - mettre à une adresse fixe : AT valeur [‘classe’] : indique la classe : ‘code’, ‘donnée’. ‘pile’… * ASSUME • Syntaxe : ASSUME Reg_seg1 : Nom_seg1, Reg_seg2 : Nothing [,…] • Fonction : Indique à l’assembleur, que tel segment appartient à tel registre. Assume nothing annule l’ancien assume. • Exemple : Code SEGMENT
ASSUME CS:code, DS:donnée, ES:nothing
Code ENDS * PROC • Syntaxe : Nom_proc PROC
Ret ; permet le retour au programme principal Nom_proc ENDP
• Fonction : Assigne un nom à une procédure. ENDP marque sa fin. • Variété : Nom_proc PROC NEAR ; procédure appelée uniquement à l’intérieur du ; segment où elle se trouve.
Ret Nom_proc ENDP
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 18
PUBLIC Nom_proc ; procédure appelée à partir de n’importe Nom_proc PROC FAR ; quel segment
Ret Nom_proc ENDP Appel : L’appel d’une procédure, dans un programme, se fait au moyen de l’instruction CALL de la façon suivante: CALL Nom_proc
2.2.3 La directive macro * MACRO • Syntaxe : Nom_mac MACRO[ ………]
Nom_mac ENDM • Fonction : Définit un ensemble d’instructions qui sont intercalées dans le programme source chaque fois que le nom de la macro (Nom_mac) est cité. • Avantages : + La macro s’exécute plus rapidement que la procédure. Cette dernière est retardée par les appels et retour d’adresse. + La macro est plus dynamique et souple. + La macro peut faire partie d’une librairie, à la disposition de plusieurs programmes. • Exemple : Mult MACRO op1, op2
MOV AX,opl MOV BX.op2 MUL BX
Mult ENDM Appel de cette macro Mult 5,6 ; 5*6 = résultat dans AX Mult 20, nombre ; 20 = résultat dans AX
2.2.4 Les directives de blocs * GROUP • Syntaxe : Nom GROUP Nom_seg1, Nom_seg2 [,....] • Fonction : Rassemble les segments spécifiés par un nom de sorte quels puissent résider dans un seul segment physique de 64 Ko. • Exemple : Bloc GROUP code, donnée
Assume CS:Bloc, DS :Bloc Donnée SEGMENT
Donnée ENDS
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 19
Code SEGMENT Assume CS:Code, DS:Donnée
Code ENDS
* NAME • Syntaxe : NAME Nom_module • Fonction : Assigne un nom à un module.
2.2.5 Les directives de contrôle * ORG • Syntaxe : ORG Expression • Fonction : Spécifie l’adresse de départ (origine) du code. * END • Syntaxe : END Expression • Fonction : Marque la fin du programme source. Expression est généralement une étiquette à partir de laquelle débutera l’exécution du programme.
2.2.6 Les directives de liaison * PUBLIC • Syntaxe : PUBLIC Symbole [,...] • Fonction : Donne la liste, dans un module assembleur, des symboles non définis par EQU mis à la disposition d’autres modules. * EXTRN • Syntaxe : EXTRN Nom : Type [,…] • Fonction : Spécifie les symboles définies et déclarés PUBLIC dans d’autres modules. Le type peut être BYTE. WORD. DWORD, NEAR. FAR. • Exemple : Module 1 Module 2
PUBLIC Sortie EXTRN Sortie :WORD Sortie DW 25
2.3. Les opérateurs
2.3.1 Les opérateurs arithmétiques * + • Syntaxe : Valeur1 + Valeur2 • Fonction : Addition. • Exemple : Table2 DW Table1+4 * - • Syntaxe : Valeur1 - Valeur2 • Fonction : Soustraction. • Exemple : Diff DW Table2 –Table1 * * • Syntaxe : Valeur1 * Valeur2 • Fonction : Multiplication. • Exemple : Total EQU Quantité * Unité * / • Syntaxe : Valeur1/Valeur2 • Fonction : Retourne la partie entière du quotient. • Exemple : Heure EQU 100/60 ; le résultat est 1.
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 20
* MOD • Syntaxe : Valeur1 MOD Valeur2 • Fonction : Retourne le reste. • Exemple : Minutes EQU 100 MOD 60 ; le résultat est 40. * SHL • Syntaxe : Valeur SHL Expression • Fonction : Décalage à gauche. • Exemple : Mask1 DB 10111001B Mask2 EQU Mask1 SHL 2 ; le résultat est 11100 100B * SHR • Syntaxe : Valeur SHR Expression • Fonction : Décalage à droite. • Exemple : Mask1 DB 10111001B Mask2 EQU Mask1 SHR 2 ; le résultat est 00101110B
2.3.2 Les opérateurs logiques * AND • Syntaxe : Valeur1 AND Valeur2 • Fonction : ET logique. • Exemple : 11000101B AND 00111010B ; le résultat est 0. * OR • Syntaxe : Valeur1 OR Valeur2 • Fonction : OU logique. • Exemple : 11000101B OR 00111010B ; le résultat est FFH. * XOR • Syntaxe : Valeur1 XOR Valeur2 • Fonction : OU Exclusif. • Exemple : 11000101B XOR 11000101B ; le résultat est 0. * NOT • Syntaxe : NOT Valeur • Fonction : Retourne le complément logique. • Exemple : NOT 11000101B ; le résultat est 00111010B.
2.3.3 Les opérateurs relationnels * EQU • Syntaxe : Opérande1 EQU Opérande2 • Fonction : Egalité. L’égalité des deux opérandes donne FFFFH sinon on a 0. * NE • Syntaxe : Opérande1 NE Opérande2 • Fonction : Inégalité. L’inégalité des deux opérandes donne FFFFH sinon on a 0. * LT • Syntaxe : Opérande1 LT Opérande2 • Fonction : Si opérande 1 < opérande2 le résultat est FFFFH sinon 0. • Exemple : MOV AX,Nombre LT 4 ; Si Nombre < 4 AX=FFFFH sinon AX=0. * GT • Syntaxe : Opérande1 GT Opérande2 • Fonction : Si opérande1 > opérande2 le résultat est FFFFH sinon 0. • Exemple : MOV AX,Nombre GT 4; Si Nombre> 4 AX=FFFFH sinon AX=0.
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 21
* LE • Syntaxe : Opérande LE Opérande2 • Fonction : Si opérande1<= opérande2 le résultat est FFFFH sinon 0. * GE Syntaxe : Opérande1 GE Opérande2 • Fonction : Si opérande 1 > = opérande2 le résultat est FFFFH sinon 0.
2.3.4 Les opérateurs retournant une valeur * SEG • Syntaxe : SEG Variable ou SEG Label • Fonction : Retourne la valeur segment d’une variable ou d’un label. • Exemple : MOV AX, SEG Table * OFFSET • Syntaxe : OFFSET Variable ou OFFSET Label • Fonction : Retourne la valeur offset d’une variable ou d’un label. • Exemple : MOV BX, OFFSET Table * TYPE • Syntaxe : TYPE Variable ou TYPE Label • Fonction : Si l’opérande est une variable, TYPE retourne 1 pour BYTE, 2 pour WORD ou 4 pour Double WORD, si c’est un label, elle retourne -1 pour NEAR et -2 pour FAR. * SIZE • Syntaxe : SIZE Variable • Fonction : Retourne le nombre d’octets alloué pour une variable. • Exemple : Table DW 100 Dup(?) MOV CX, SIZE Table ; ici CX reçoit 200. * LENGTH • Syntaxe : LENGTH Variable • Fonction : Retourne le nombre d’éléments d’un tableau. • Exemple : Table DW 100 Dup(?) MOV CX, LENGTH Table ; ici CX reçoit 100.
2.3.5 Les opérateurs attribuant une valeur * PTR • Syntaxe : PTR Expression • Fonction : Permet de préciser la taille du mot concerné lors de traitement de cases mémoire avec un adressage indirect. • Exemples : MOV BYTE PTR [DI], 7AH
MOV WORD PTR [DI], 7AH
3. Les modes d’adressage Pour accéder à un emplacement mémoire, l’EU calcule l’offset sur 16 bits (adresse effective). En plus de la mémoire, le lieu de l’opérande peut être l’instruction elle-même, un registre ou un port d’E/S. Il existe de nombreux mode d’adressage.
3.1. Adressage immédiat La donnée est spécifiée immédiatement après l’instruction. Elle est donc située dans le segment de code. Exemple : MOV AX,20
CHAPITRE III : La Programmation Assembleur du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 22
3.2. Adressage registre Dans ce mode le 8086 cherche un opérande dans un registre. Exemple : MOV AX,BX
3.3. Adressage direct L’adresse effective (généralement un label) se trouve dans l’instruction même. L’assembleur traduit les étiquettes en offset. Exemples : MOV AX, Table ; L’octet à l’adresse « Table » est mis dans AL,
; et celui à « Table +1 » est mis dans AH. MOV AX, [0100]
3.4. Adressage indirect L’adresse effective est le contenu d’un registre de base (BX ou BP) ou index (Dl ou SI). Exemples : MOV AX. [BX]
MOV AX, [SI]
3.5. Adressage relatif à une base (basé) L’adresse effective est la somme d’un label ou un déplacement et d’un registre de base. Exemples : MOV AX,[BX]+3
MOV AX, [BX+3] MOV AX,3[BX] MOV AX, Table[BX]
3.6. Adressage indexé L’adresse effective est la somme d’un label ou un déplacement et d’un registre index. Exemple : MOV AL, Table[SI]
3.7. Adressage basé indexé L’adresse effective est la somme d’un label on un déplacement, d’un registre de base et d’un registre index. Exemple : MOV AL, Table[BX] [SI]
3.8. Récapitulation Mode d’adressage Format de l’opérande Registre segment
Immédiat Donnée Aucun Registre Registre Aucun Direct Déplacement ou label DS Indirect [BX], [BP], [DI], [SI] DS Basé [BX] + Déplacement
[BP] + Déplacement DS SS
Indexé [DI] + Déplacement [SI] + Déplacement
DS DS
Indexé basé [BX][DI] + Déplacement [BX][SI] + Déplacement [BP][DI] + Déplacement [BP][SI] + Déplacement
DS DS SS SS
CHAPITRE IV:
Les Instructions du 8086/8088
Plan:
1. Introduction
2. Les instructions de transfert de données
3. Les instructions arithmétiques
4. Les instructions de manipulation des bits
5. Les instructions de branchement
6. Les instructions STRING
7. Les instructions d’interruption
8. Les instructions de contrôle de processus
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 24
1. Introduction Le 8086 possède 92 instructions de base qu’on peut diviser en sept groupes fonctionnels • Les instructions de transfert de données : déplacent l’information entre les registres et les cases mémoire ou les ports d’E/S. • Les instructions arithmétiques : accomplissent des opérations arithmétiques sur des nombres binaires ou des nombres décimaux mais codés en binaire (BCD). • Les instructions manipulant des bits : accomplissent des opérations logiques, de rotation ou de décalage sur des cases mémoire ou des registres. • Les instructions de branchement permettent des sauts à une autre séquence de programme, les appels et retours de procédure afin d’exécuter un sous programme. • Les instructions string : déplacent, comparent et scrutent des chaînes de caractères. • Les instructions d’interruption : interrompent le microprocesseur pour qu’il exécute une routine et revienne à son travail principal. • Les instructions de contrôle du processeur : mettent et efface les flags de status et chargent l’état d’exécution du processeur Dans ce qui suit nous donnons une description détaillée des instructions les plus employées ; les autres sont données à titre indicatif.
2. Les instructions de transfert de données Ces instructions transfèrent des données et adresses entre registres et cases mémoire ou ports d’E/S. On les divise en quatre catégories : usage général, entrée/sortie, transfert d’adresse et transfert de flags. On les résume comme suit avec la convention pour les flags (**. affecté, --: non affecté, ?: non défini).
2.1. Les instructions à usage général MOV : Move • Syntaxe : MOV Destination, Source • Fonction : Copier des données. Transfère une donnée de la «Source» à la «destination», selon 9 modes. • Exemples : - Accumulateur à mémoire : MOV MEMOIRE, AX
- Mémoire à accumulateur: MOV AX, MEMOIRE - Mémoire ou registre à registre de segment: MOV DS, AX - Registre de segment à mémoire ou registre : MOV AX, DS - Registre à registre: MOV CX, DX - Mémoire ou registre à registre: MOV CX, MEMOIRE - Registre à mémoire ou registre : MOV [BX][SI],DX - Donnée immédiate à registre: MOV AX, 25 - Donnée immédiate à mémoire ou registre : MOV [BX][SI], 25
PUSH : Sauvegarde dans la pile • Syntaxe : PUSH Source
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 25
• Fonction : Décrémente le pointeur de pile SP de 2 puis transfère le mot « Source » dans la pile. •Exemples : - De registre 16 bits: PUSH AX
- D’un registre de segment: PUSH ES - D’une mémoire: PUSH MEMOIRE
POP : Restaure un mot extrait de la pile • Syntaxe : POP Destination • Fonction : Transfère le mot au sommet de la pile dans le registre ou la cellule mémoire indiquée par « Destination ». Après le POP le pointeur de pile SP est incrémenté de 2. • Exemples : - En registre 16 bits : POP AX
- En registre de segment : POP ES - En mémoire : POP MEMOIRE
XCHG : Exchange • Syntaxe : XCHG Destination,Source • Fonction : Echang- le contenu des deux opérandes (en sont exclus les registres de segments). •Exemples : - Accumulateur et registre : XCHG AX, BX
- Registre et mémoire ou registre : XCHG BX, MEMOIRE XLAT : Translate • Syntaxe : XLAT Table • Fonction : Traduction. Sert à exécuter des conversions, en visant dans une table de conversion. Le registre AL sert d’index dans cette table (256 octets maximum) dont l’adresse de départ est pointée par BX. L’octet lu revient dans AL. Donc la position lue est adressée par (BX)+(AL). • Exemple : MOV AL, Cellule
MOV BX.OFFSET Table XLAT Table
2.2. Les instructions d’Entrée / Sortie IN : Input Byte or Word • Syntaxe : IN Accumulateur AL ou AX, Port ou IN Accumulateur AL ou AX, DX • Fonction : Entrée d’un octet ou d’un mot. Transfère l’opérande arrivant par un port d’entrée dans AL ou AX. Le port est spécifiée dans l’instruction, sur 8 bits (on peut désigner les ports de 0 à 255) ou en indirect via le registre 16 bits DX. • Exemples : IN AL,53H IN AX.DX OUT : Output Byte or Word • Syntaxe : OUT Port, Accumulateur ou OUT DX, Accumulateur • Fonction : Transfère l’octet dans AL ou le mot dans AX, vers un port de sortie désigné en mode immédiat sur 1 octet ou en mode indirect par le registre 16 bits DX.
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 26
• Exemples : OUT 18H, AX OUT DX, AL
2.3. Les instructions de transfert d’adresse LDS : Load Data Segment register • Syntaxe : LDS Destination, Source • Fonction : Chargement du registre de segment DS et d’un registre de données. Transfère un « pointeur» de 32 bits contenant l’adresse d’un segment et son décalage dans : DS pour le segment. et un registre 16 bits indiqué par «destination» pour le décalage (et autre qu’un registre de segment). • Exemple : LDS SI,[BX] LEA : Load Effective Address • Syntaxe : LEA Destination, Source • Fonction : Chargement de l’adresse effective. Le registre spécifié reçoit l’adresse effective. La source doit être en mémoire. • Exemple : LEA BX, Table LES : Load Extra Segment register • Syntaxe : LES Destination, Source • Fonction : Chargement du registre de segment ES et d’un registre de données. Transfère un « pointeur» de 32 bits contenant l’adresse d’un segment et son décalage dans : ES pour le segment, et un registre 16 bits indiqué par «destination » pour le décalage (et autre qu’un registre de segment). • Exemple : LES DI,[BX]
2.4. Les instructions de transfert de flags LAHF : Charge les indicateurs dans AH. SAHF : Rangement de AH dans le registre des indicateurs. PUSHF : Sauvegarde le registre des indicateurs dans la pile. POPF : Restauration des indicateurs extraits de la pile.
3. Les instructions arithmétiques
3.1. Les instructions d’addition ADD : Addition • Syntaxe : ADD Destination, Source • Fonction : Exécute une addition. Le résultat est dans « Destination » • Exemples : ADD BL, 17
ADD BL, CL ADD CX, NOMBRE
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
** -- -- -- ** ** ** ** **
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 27
INC : Incrémenter • Syntaxe : INC Destination • Fonction : Ajoute 1 à l’opérande. • Exemple : INC AX
INC MEMOIRE On trouve aussi les instructions AAA : Ajustage ASCII pour l’addition. ADC : Addition avec retenue. DAA : Ajustage décimal pour l’addition.
3.2. Les instructions de multiplication MUL : Multiplication non signée • Syntaxe : MUL Multiplicateur • Fonction : Multiplication du contenu de l’accumulateur par le « multiplicateur» contenu dans un registre ou une cellule mémoire. Le multiplicande dans AL (8 bits) ou AX (16 bits). Le multiplicateur peut être un octet ou un mot. Le résultat va dans AX pour un multiplicande 8 bits ou dans DX:AX pour un multiplicande 16 bits. • Exemples : MUL CL MUL AL,CL ; variante autorisée IMUL : Multiplication entière signée • Syntaxe : IMUL Multiplicateur • Fonction : Multiplication signée du contenu de l’accumulateur par le «multiplicateur» contenu dans un registre ou une cellule mémoire. • Exemples : IMUL BX
IMUL [BX] ; variante autorisée On trouve aussi l’instruction AAM : Ajustage ASCII pour la multiplication.
3.3. Les instructions de soustraction SUB : Soustraire • Syntaxe : SUB Diminuende, Diminuteur • Fonction : Exécute l’opération (Diminuende -Diminuteur) et range la différence dans « Diminuende » • Exemples : Registre - Mémoire ou registre: SUB AX, MEMOIRE Accumulateur - opérande immédiat : SUB AL, 37 Mémoire ou registre - opérande immédiat: SUB SI, 37 DEC : Décrémentation • Syntaxe : DEC Destination • Fonction : Soustrait I de l’opérande. • Exemples : DEC BL
DEC NOMBRE
** -- -- -- ** ** ** ** --
** -- -- -- ? ? ? ? **
** -- -- -- ? ? ? ? **
** -- -- -- ** ** ** ** **
** -- -- -- ** ** ** ** --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 28
NEG : Formation du complément à 2 • Syntaxe : NEG opérande • Fonction : Exécute la soustraction (0-opérande) et range le résultat à la place de l’opérande : c’est son complément à 2. L’opérande est dans un registre ou une cellule mémoire. • Exemple : NEG AL CMP : Comparaison de deux opérandes • Syntaxe : CMP Destination, Source • Fonction : Soustrait un opérande du second, n’en modifie aucun et ne retient pas le résultat, mais positionne les indicateurs. L’opération est la suivante : Destination-source. • Exemples :CMP BX, CX CMP AX, 320 CMP NOMBRE, 37H On trouve aussi les instructions AAS : Ajustage ASCII pour la soustraction. SBB : Soustraction avec retenue. DAS : Ajustage décimal pour la soustraction.
3.4. Les instructions de division DIV : Division non signée • Syntaxe : DIV Diviseur • Fonction : Exécute une division non signée d’un dividende de 16 bits contenu dans AX, ou d’un nombre de 32 bits contenu dans DX:AX par le diviseur de 8 ou 16 bits. Le quotient va dans AL (dividende de 16 bits) ou AX (dividende de 32 et le reste dans AH ou DX. • Exemples : DIV CL DIV CX DIV NOMBRE IDIV : Division entière signée • Syntaxe : IDIV Diviseur • Fonction : Exécute une division signée. • Exemples : IDIV CL IDIV NOMBRE On trouve aussi l’instruction AAD : Ajustage ASCII pour la division.
3.5. Les instructions d’extension du signe CBW : Convertir Octet en Mot • Syntaxe : CBW • Fonction : Conversion d’octet en mot de 16 bits. Exécute une expansion du signe de (AL) dans (AH), ce signe étant dupliqué sur les 8 bits de AH. Donc si (AL)<80H alors (AH)=0 et si (AL)>=80H alors (AH)=FFH • Exemple : Si AL contient 80H, après CBW, AX contiendra : FF80H.
** -- -- -- ** ** ** ** **
? -- -- -- ? ? ? ? ?
? -- -- -- ? ? ? ? ?
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 29
CWD : Convertir Mot en Double mot • Syntaxe : CWD Fonction : Conversion de mot de 16 bits en double mot de 32 bits. Le bit de signe de AX est étendu sur les 16 bits de DX. Donc si (AX)<8000H, (DX)=0; et (AX)>=8000H, (DX)=FFFFH. • Exemple : Si AX contient F000H, après CWD, DX contiendra : FFFFH.
4. Les instructions de manipulation des bits
4.1. Les instructions logiques AND : ET Logique • Syntaxe : AND Destination, Source • Fonction : Exécute la fonction logique ET entre « Destination » et « Source ». Le résultat est rangé dans « Destination ». • Exemples : AND BL, CL AND AX, NOMBRE AND AX,37H OR : OU Logique • Syntaxe : OR Destination, Source • Fonction : Exécute la fonction logique OU entre « Destination » et «Source ». Le résultat est rangé dans « Destination ». • Exemples : OR BL,CL OR AX,NOMBRE OR AX,37H XOR : ou exclusif • Syntaxe : XOR Destination, Source • Fonction : Exécute la fonction logique OU exclusif entre « Destination » et « Source ». Le résultat est rangé dans « Destination ». Des bits identiques fournissent un 0, des bits différents fournissent un 1. Exemples : XOR AL, 2AH XOR MEM, 37 XOR AX, MEM
XOR MEM, AX NOT : Opérateur logique d’inversion • Syntaxe : NOT Opérande • Fonction : Inverse les bits, forme le complément à 1 de l’opérande. L’opérande est dans un registre ou en mémoire. • Exemples : NOT AL
-- -- -- -- -- -- -- -- --
0 -- -- -- ** ** ? ** 0
0 -- -- -- ** ** ? ** 0
0 -- -- -- ** ** ? ** 0
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 30
TEST : TEST(COMPARAISON LOGIQUE) • Syntaxe : TEST Destination, Source • Fonction : Compare deux opérandes bit à bit sans fournir le résultat mais positionne les indicateurs. La comparaison est assurée par un ET logique. • Exemples : TEST AL, 25 TEST MEMOIRE, 37 TEST BX, NOMBRE
4.2. Les instructions de décalage SAL : Shift Arithmetic Left SHL : Shift Logical Left • Syntaxe : SAL Destination, Compte / SHL Destination, Compte • Fonction : Décalage arithmétique ou logique à gauche. Le nombre de décalages est spécifié par «Compte», qui doit être 1 ou mentionner dans le registre CL servant alors de compteur. Chaque décalage est équivalent à une multiplication par 2 (attention au bit du plus fort poids). SAL et SHL ont le même code machine. • Exemples : SAL AL, 1 SHL MEMOIRE, CL SAR : Shift Arithmetic Right • Syntaxe : SAR Destination, Compte • Fonction : Décalage arithmétique à droite. Le bit de signe est conservé. Le nombre de décalages est spécifié par « Compte », qui doit être 1 ou mentionner dans le registre CL. • Exemples : SAR AL,1 SAR MEMOIR,CL SHR : Shift Logic Right • Syntaxe : SHR Destination,Compte • Fonction : Décalage logique à droite. Le nombre de décalages est spécifié par «Compte», qui doit être 1 ou mentionner dans le registre CL. • Exemples : SHR AL,1 SHR MEMOIRE,CL
** -- -- -- ** ** ? ** **
** -- -- -- ** ** ? ** **
** -- -- -- ** ** ? ** **
** -- -- -- ** ** ? ** **
8 ou 16 bits 0 CF
8 ou 16 bits CF
8 ou 16 bits0 CF
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 31
4.3. Les instructions de rotation RCL : Rotate Left through Carry • Syntaxe : RCL Destination, Compte • Fonction : Rotation à gauche via l’indicateur de retenue CF. • Exemples : RCL AL, 1 RCL MEMOIRE,CL RCL BX,CL RCR : Rotate Right through Carry • Syntaxe : RCR Destination,Compte • Fonction : Rotation à droite via l’indicateur de retenue CF. • Exemples : RCR AL,1 RCR MEMOIRE,CL RCR BX,CL ROL : Rotate Left • Syntaxe : ROL Destination,Compte • Fonction : Rotation à gauche. • Exemples : ROL AL,1 ROL MEMOIRE,CL ROL BX,CL ROR : Rotate Right • Syntaxe : ROR Destination,Compte • Fonction : Rotation à droite. • Exemples : ROR AL,1 ROR MEMOIRE, CL ROR BX,CL
** -- -- -- -- -- -- -- **
** -- -- -- -- -- -- -- **
** -- -- -- -- -- -- -- **
8 ou 16 bitsCF
8 ou 16 bits CF
8 ou 16 bitsCF
8 ou 16 bits CF
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 32
5. Les instructions de branchement
5.1. Branchement inconditionnel JMP : Jump • Syntaxe : JMP Cible • Fonction : Saut- branchement inconditionnel. • Exemples : JMP Cible JMP SI JMP [BP][DI] déplacement CALL : Appel d’une procédure • Syntaxe : CALL Cible Fonction : L’appel d’une procédure déclenche
- le rangement de CS puis IP dans la pile. - le chargement des 2 3 octets de l’instruction dans IP. - le chargement des 4 5 octets de l’instruction (pour un appel inter segments) dans CS.
L’exécution se poursuit à partir de cette nouvelle adresse (CS:IP). • Exemples : CALL TEMPORISATION CALL BX RET : Retour de procédure • Syntaxe : RET ou RET nombre à ajouter à SP • Fonction : Termine une procédure et renvoie à F instruction qui suivait le CALL d’appel. Le retour peut être court (NEAR) ou long (FAR). Avec un RET NEAR, l’adresse du déplacement est automatiquement déchargée du sommet de la pile dans IP ; avec un FAR c’est IP puis CS qui sont restaurés. Le RET peut se voir associer un nombre immédiat qui sera ajouté au pointeur de pile SP, afin d’abandonner des paramètres dans la pile. • Exemples RET RET 4
5.2. Branchement conditionnel • Syntaxe : Jx label-court (label se trouve à -128/+127 octets de Jx) Mnémonique Sens Equivalent
à Saut si
OF SF PF ZF CF
Nombres non signés JA Jump if Above JNBE -- -- -- 0 et 0JNA Jump if Not Above JBE -- -- -- 1 ou 1JAE Jump if Above or Equal JNB -- -- -- -- 0JNAE Jump if Not Above or Equal JB/JC -- -- -- -- 1JB Jump if Below JNAE/JC -- -- -- -- 1JNB Jump if Not Below JAE -- -- -- -- 0JBE Jump if Below or Equal JNA -- -- -- 1 ou 1JNBE Jump if Not Below or Equal JA -- -- -- 0 et 0
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 33
JC Jump if Carry -- -- -- -- 1JNC Jump if Not Carry -- -- -- -- 0JCXZ Jump if CX = 0 -- -- -- -- -- JE Jump if Equal JZ -- -- -- 1 --JNE Jump if Not Equal JNZ -- -- -- 0 --JZ Jump if Zero JE -- -- -- 1 --JNZ Jump if Not Zero JNE -- -- -- 0 --JPE Jump on Parity Even (paire) JP -- -- 1 -- --JP Jump on Parity JPE -- -- 1 -- --JNP Jump if no Parity (impaire) JPO -- -- 0 -- --JPO Jump if Parity Odd
(impaire) JNP -- -- 0 -- --
Nombres signés JG Jump if Greater JNLE ** = ** -- 0 -- JNG Jump if Not Greater JLE ** ≠ ** -- 1 -- JGE Jump if Greater or Equal JNL ** = ** -- -- -- JNGE Jump if Not Greater or
Equal JL ** ≠ ** -- -- --
JL Jump if Less JNGE ** ≠ ** -- -- -- JNL Jump if Not Less JGE ** = ** -- -- -- JLE Jump if Less or Equal JNG ** ≠ ** -- 1 -- JNLE Jump if Not Less or Equal JG ** = ** -- 0 -- JS Jump if Sign -- 1 -- -- -- JNS Jump if Not Sign -- 0 -- -- -- JO Jump on Overflow 1 -- -- -- -- JNO Jump on Not Overflow 0 -- -- -- --
5.3. Les instructions de boucle LOOP : Loop until count complete • Syntaxe : LOOP Cible • Fonction : Boucler jusqu’à exécution du compte. Décrémente CX de 1 puis transfère le contrôle à l’opérande cible si CX n’est pas à zéro. En relatif, de +127 à -128. LOOPE : Loop if Equal LOOPZ : Loop if Zero • Syntaxe : LOOPE Cible / LOOPZ Cible • Fonction : Boucler si égal/si zéro. Bouclage conditionnel : a lieu si ZF = 1 et si le registre compteur CX n’est pas à zéro. Ces deux instructions possèdent le même code machine. LOOPNE : Loop if Not Equal LOOPNZ : Loop if Not Zero • Syntaxe : LOOPNE Cible / LOOPNZ Cible
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 34
• Fonction : Boucler si non égal/si non zéro. C’est la condition inverse de LOOPE/LOOPZ. Le bouclage conditionnel a lieu si ZF=0 et si le registre compteur CX n’est pas à zéro. Ces deux instructions possèdent le même code machine.
6. Les instructions STRING
6.1. Les instructions Move-String MOVS : Move Byte or Word String MOVSB : Move Byte String MOVSW : Move Word String • Syntaxe : MOVS Chaîne-Destination, Chaîne-Source : MOVSB ; pas d’opérande : MOVSW ; pas d’opérande • Fonction : Déplacement d’un octet ou d’un mot d’une chaîne. Transfère l’octet ou le mot de la chaîne pointée par DS:DI. Après le transfert, SI et DI sont incrémentés ou décrémentés selon DF, du nombre d’octets transférés. Le préfixe REP sert à répéter l’opération. • Exemples : MOVS Recu,Emis
6.2. Les instructions Compare-String CMPS CMPSB CMPSW • Syntaxe : CMPS Chaîne-Destination,Chaîne-Source : CMPSB ; pas d’opérande : CMPSW ; pas d’opérande • Fonction : Comparaison d’octets ou de mots (16 bits) de chaînes. Agit comme CMP mais sur des chaînes pointées par DS:SI pour la source et ES:Dl pour la destination. Après la comparaison, SI et DI sont : - Incrémentés si l’indicateur de direction DF = 0. - Décrémentés si DF = 1. L’opération se poursuit si elle est préfixée par REP ou REPNZ ou REPZ. • Exemples : CMPS Alpha, Beta REP CMPS Alpha, Beta
6.3. Les instructions LOAD-String (LODS) et STORE-String (STOS) LODS : Load Byte or Word String LODSB : Load Byte String LODSW : Load Word String • Syntaxe : LODS Chaîne, Source : LODSB ; Pas d’opérande
: LODSW ; Pas d’opérande
-- -- -- -- -- -- -- -- --
** -- -- -- ** ** ** ** **
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 35
• Fonction : Chargement d’un octet ou d’un mot d’une chaîne. Transfère un octet ou un mot de la chaîne pointée par DS:SI dans l’accumulateur AL ou AX puis incrémente ou décrémente SI (selon DF) de 1 ou 2. • Exemple : LOADS Phrase STOS : Store Byte or Word String STOSB : Store Byte String STOSW : Store Word String • Syntaxe : STOS Chaîne, Source : STOSB ; Pas d’opérande : STOSW ; Pas d’opérande • Fonction : Rangement d’un octet ou d’un mot dans une chaîne. L’octet est dans AL ou le mot dans AX, il est transféré dans la chaîne pointée par ES:DI. Après exécution. DI est incrémenté ou décrémenté (selon DF). Peut être préfixée par REP, pour répétition. Exemple : STOS Cible Phrase
6.4. Les instructions SCAN-String SCAS : Scan Byte or Word String SCASB : Scan Byte String SCASW : Scan Word String • Syntaxe : SCAS Chaîne Destination : SCASB ; Pas d’opérande : SCASW ; Pas d’opérande • Fonction : Analyse d’un octet ou d’un mot dans une chaîne. Exécute la soustraction (AL-Destination) pour un octet, ou (AX-Destination) pour un mot, ne retient aucun résultat mais positionne les indicateurs. Cela permet de comparer les octets ou les mots successifs d’une chaîne. Peut être préfixée par REP, pour répétition. La chaîne est pointée par ES:DI. • Exemple REP SCAS Chaine
7. Les instructions d’interruption INT : Interruption • Syntaxe : INT Type de l’interruption • Fonction : Appelle une interruption vectorisée. • Exemple : INT 21H INTO : lnterrupt if Overflow • Syntaxe : INTO • Fonction : Interruption si dépassement. Si l’indicateur OF = 0, équivalent à un NOP si OF=1, exécute une interruption de type 4. RET : lnterrupt Return • Syntaxe : IRET
-- -- -- -- -- -- -- -- --
** -- -- -- ** ** ** ** **
** -- -- -- ** ** ** ** **
-- -- 0 0 -- -- -- -- --
** ** ** ** ** ** ** ** **
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 36
• Fonction : Retour d’interruption. Transfère le contrôle à F adresse de retour ( CS et IP) qui avait été sauvegardée par déclenchement de l’interruption.
8. Les instructions de contrôle de processus
8.1. Opérations sur les flags STC : Set Carry Flag • Syntaxe : STC • Fonction : Mise à 1 de l’indicateur de retenue CF. CLC : Clear Carry Flag • Syntaxe : CLC • Fonction : Mise à 0 de l’indicateur de retenue CF. CMC : Complement Carry Flag • Syntaxe : CMC • Fonction : Complémentation de l’indicateur de retenue. STD : Set Direction Flag • Syntaxe : STD • Fonction : Mise à 1 de l’indicateur de direction DF. Le travail sur les chaînes se fera en auto-décrémentation. CLD : Clear Direction Flag • Syntaxe : CLD • Fonction : Mise à 0 de l’indicateur de direction DF. Le travail sur les chaînes se fera en auto-incrémentation. STI : Set Interrupt Flag • Syntaxe : STI • Fonction : Mise à 1 de l’indicateur d’interruption IF. On autorise les interruptions masquables. CLI : Clear Interrupt Flag • Syntaxe : CLI • Fonction : Mise à 0 de l’indicateur d’interruption IF. Les interruptions masquables sont interdites.
-- -- -- -- -- -- -- -- 1
-- -- -- -- -- -- -- -- 0
-- -- -- -- -- -- -- -- **
-- 1 -- -- -- -- -- -- --
-- 0 -- -- -- -- -- -- --
-- -- 1 -- -- -- -- -- --
-- -- 0 -- -- -- -- -- --
CHAPITRE IV : Les Instructions du 8086/8088 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 37
8.2. Synchronisation externe HLT : Halte • Syntaxe : HLT • Fonction : Le processeur entre dans l’état « halte » attendant une interruption externe ou une réinitialisation. WAIT : Attente • Syntaxe : WAIT • Fonction : Met le microprocesseur en attente de l’arrivée d’un signal ramenant à 0 volt sa broche marqué TEST. WATT sert généralement à synchroniser le microprocesseur avec du matériel externe. ESC : Escape • Syntaxe : ESC Code opération externe,Source • Fonction : Echappement. Introduit dans un programme des instructions destinées à d’autres microprocesseurs. Si l’opérande est un registre 16 bits, l’instruction est équivalente à un NOP pour le 8088. Sinon, le bus de données reçoit l’adresse effective. Exemple : ESC 17,AL LOCK : Lock Bus • Syntaxe : LOCK • Fonction : Verrouillage des bus. Préfixe précédant n’importe quelle instruction et garantissant l’usage exclusif des bus pour l’opération suivante. Dans un système à plusieurs processeurs, on interdit à tout autre de prendre inconsidérablement la maîtrise des bus. • Excmple : LOCK XCHG AL,MEMOIRE
8.3. Non opération NOP : No operation • Syntaxe : NOP • Fonction : Le microprocesseur se croise les bras pendant 3 coups d’horloge.
0F DF IF TF SF ZF AF PF CF -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- --
CHAPITRE V :
Les Opérations d’Entrées/Sorties
Plan :
1. Introduction
2. Entrée/Sortie d’un caractère
3. Entrée/Sortie d’une chaîne de caractère
4. Quelques fonctions de l’interruption 21H DOS
5. Entrée/Sortie sur port
CHAPITRE V : Les Opérations d’Entrées/Sorties ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 39
1. Introduction Au sens usuel du terme, les entrées et sorties désignent l’une des quatre opérations
suivantes : • L’affichage d’un caractère à l’écran; • La saisie d’un caractère frappé au clavier; • L’affichage d’une chaîne à l’écran; • La saisie d’une chaîne frappée au clavier.
Les opérandes de ces opérations sont donc les chaînes de caractères codées en ASCII. Toutes ces opérations font appel à des fonctionnalités externes à l’assembleur
désignées comme « appels au système » (DOS), et réalisées à l’aide du mécanisme dit d’«interruption logicielle».
2. Entrée/Sortie d’un caractère Une séquence de deux instructions est nécessaire :
• la première indique le numéro de l’appel du DOS à activer (le paramètre ou fonction de l’interruption). Ce numéro doit être mis dans le registre AH:
• la deuxième active l’interruption.
2.1. Entrée d’un caractère La séquence ci-dessous permet la lecture (entrée) d’un caractère frappé au clavier.
MOV AH, 7 ; 7 est le numéro de la fonction. INT 21H
Le caractère frappé est mémorisé dans le registre AL. Si on utilise la fonction 1 (au lieu de 7), le caractère frappé sera également affiché à l’écran. Ce phénomène est appelé « écho ».
2.2. Sortie d’un caractère La séquence ci-dessous affiche un caractère à l’écran.
MOV AH,2 INT 21H
Le caractère affiché est supposé avoir été mémorisé au préalable dans le registre DL.
3. Entrée/Sortie d’une chaine de caractère Une chaîne de caractères exige un tampon (une zone mémoire) par lequel elle transite.
3.1. Entrée d’une chaîne La chaîne frappée est effectivement transmise au système lorsqu’elle est terminée par le
caractère «retour» qui est composé de deux caractères de contrôle du clavier: • « retour chariot » ou CR (CR : carnage return. code ASCII 0D); • « changement de ligne » ou LF (LF: line feed. code ASCII 0A).
La chaîne frappée est mémorisée dans un tampon, (un tableau d’octets en mémoire) à partir du 3ième octet, les deux premiers contenant la longueur attendue de la chaîne et la longueur effective (réelle) de la chaîne lue. La longueur attendue (de 1 à 255 caractères) doit prévoir un octet pour le caractère CR (le caractère LF est ignoré par le système). La longueur effective (après la saisie) ne compte pas le caractère CR.
CHAPITRE V : Les Opérations d’Entrées/Sorties ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 40
Si la chaîne lue est plus longue qu’attendue, un « bip » sera émis, et les caractères supplémentaires seront ignorés (le caractère CR est mémorisé à la dernière position du tampon).
La réservation du tampon et l’initialisation de son premier octet sont à la charge du programmeur. Le tampon doit se trouver dans le segment de données (associé à DS) et doit être pointé par le registre DX.
La séquence ci-dessous « lit une chaîne frappée au clavier»
CHAINE DB 8, ?, 8 DUP(?) LEA DX, CHAINE MOV AH,10 INT 21H
En supposant que la chaîne « BONJOUR» a été frappée, la figure suivante montre le contenu du tampon CHAINE après l’exécution des instructions ci-dessus.
8 7 42 4F 4E 4A 4F 55 52 0D
3.2. Sortie (Affichage) d’une chaîne La chaîne à afficher doit être mémorisée dans un tampon pointé par le registre DX (et
implanté dans le segment associé au registre DS). Elle doit être terminée par le caractère «$», qui ne sera pas affiché à l’écran. La suite d’instructions ci-après affiche la chaîne ‘BON COURAGE’.
CHAINE DB ‘BON COURAGES’ LEA DX, CHAINE MOV AH,9 INT 21H
La déclaration de la chaîne de la façon ci-dessous, permet un retour à la ligne après l’affichage:
CHAINE DB ‘BON COURAGE’, 10,13, ‘$’
4. Quelques fonctions de l’interruption 21H DOS AH Fonction 0 Fin de programme : Identique à INT 20H. 1 Entrée au clavier: attend un caractère, l’affiche à l’écran et le retourne dans AL Si
on à frappé Ctrl+Break. déclenche INT 23H. 2 Affichage à l’écran du caractère dans DL. 3 Lit un caractère sur la carte de transmission asynchrone et le range dans AL. 4 Envoie le caractère dans DL à la carte de transmission asynchrone. 5 Imprime (imprimante) le caractère contenu dans DL. 6 Entrées-sorties directes Si (DL)=0FFH, AL reçoit un caractère du clavier s’il en
existe. Si (DL) est différent de 0FFH, DL contient un caractère envoyé à l’écran. 7 Entrée directe: attend qu’un caractère soit frappé (à moins qu’il n’y en ait un de
prêt) et l’envoie dans AI, uns affichage. Pas de vérification de la frappe de Ctrl+Break.
8 Entrée du clavier, comme (1), mais sans affichage.
CHAPITRE V : Les Opérations d’Entrées/Sorties ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 41
9 Chaîne de caractères. DS:DX doit pointer une chaîne de caractères en mémoire, se terminant par le symbole $ (soit 24H). Chaque caractère de la chaîne est affiché (comme en 2).
A Entrée du clavier vers la mémoire tampon. B Vérification de l’état de l’unité d’entrée C Vidage du tampon du clavier, puis exécution de l’une des fonctions 1, 6, 7, 8 et A
dont le numéro est dans AL. F Ouverture de fichier 10 Fermeture de fichier. 13 Suppression de fichier. 14 Lecture séquentielle. 15 Ecriture séquentielle. 16 Création de fichier. 17 Changement de nom de fichier 2A Obtention de la date, renvoyée dans CX:DX avec CX pour ramée (1980 à 2099 )
mais en binaire, DH pour le mois et DL le jour. 2B Initialisation de la date. 2C Obtention de l’heure renvoyée dans CX:DX avec l’heure dans CH, les minutes
dans CL, les secondes dans AH et les centièmes dans DL. 4C Fin d’un traitement (EXIT) et retour au DOS : à utiliser à la place de INT 20H.
5. Entrée/Sortie sur port On a vu que le 8088 pouvait adresser jusqu’à un méga-octet en mémoire. En plus, il
est capable d’adresser des périphériques sur un octet (donc 256) ou même sur deux octets (donc un maximum de 65336) grâce à des instructions spécifiques de sortie (OUT) ou d’entrée (IN).
Chaque périphérique est géré par des circuits d’interface et en fait, c’est leur adresse qui est prise en compte Ainsi, le haut-parleur interne du micro-ordinateur est piloté par un circuit de référence 8255 (une classique interface parallèle) dont l’adresse propre est 61 en hexadécimal.
Ce qui entre avec IN ou sort avec OUT va dans, ou provient obligatoirement de l’accumulateur, AL en 8 bit, ou AX en 16 bits. Lorsque l’adresse est sur 16 bits, elle doit se trouver dans DX. Taille du port Lecture Ecriture
MOV DX, Adresse du port MOV DX, Adresse du port 8 bits IN AL,DX MOV AL,octet à écrire
OUT DX,AL MOV DX, Adresse du port MOV DX, Adresse du port
16 bits IN AX,DX MOV AX,mot à écrire OUT DX,AX
CHAPITRE VI:
Les Interruptions
Plan:
1. Introduction
2. Les interruptions matérielles
3. Les interruptions logicielles
4. Traitement d’une interruption
CHAPITRE VI : Les Interruptions ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 43
1. Introduction Une interruption est un événement imprévu qui peut avoir une origine logicielle
(déclenchées par programme) ou matérielle (commandées par le câblage électrique). On désigne par interruption un signal pouvant intervenir à tout moment et de façon imprévue (incontrôlée, non programmée). Ce concept a été introduit pour :
• Signaler un événement important interne et/ou externe à l’unité centrale de traitement (un événement qui apparaît en temps réel);
• Arrêter et/ou modifier le fonctionnement programmé de l’ordinateur.
2. Les interruptions matérielles Le microprocesseur 8088 dispose de deux broches d’accès capables de recevoir des
interruptions : INTR: la demande d interruption générale, dont on peut condamner l’accès, si on le désire, par Logiciel. Parce qu’on peut interdire l’accès de et type d’interruption, on dit de INTR que c’est «l’interruption masquable ». Ce masquage est assuré par l’indicateur IF. En effet, lorsque le bit IF, pour «Interrupt Flag», est activé, le microprocesseur ne prend plus en compte les demandes d’interruptions INT NMI : pour « Non-Maskable Interrupt », une entrée de d d’interruption non masquable offrant une très haute priorité, la plus grande urgence. On ne peut pas l’interdire au niveau du microprocesseur, par logiciel. Dans le cas de INTR il s’ajoute une ligne (une broche au microprocesseur) INTA : pour «Interrupt Acknowledge», demande d’interruption acquise, que le microprocesseur active lorsqu’il a reçu la demande d’interruption et est prêt à la prendre en compte. Par conséquent les Interruptions matérielles sont déclenchées électriquement et non pas par programme. Il appartient au programmeur de rédiger la séquence d’instructions qu’elles vont mettre en œuvre.
3. Les interruptions logicielles L’interruption logicielle est déclenchée par le programme. On Introduit une instruction INT dans le programme, en précisant son numéro d’ordre. Ces interruptions peuvent être masquable ou non masquable. Parmi les interruptions non masquables on trouve:
• L’interruption générée à l’aide de l’instruction d’assembleur INTO (interruption lorsque l’indicateur overflow est positionné à 1);
• L’interruption due à la division par zéro (lors de l’exécution de l’instruction DIV ou IDIV) le cas où le quotient est plus grand que la destination spécifiée est aussi assimilée à la division par zéro
CHAPITRE VI : Les Interruptions ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 44
Parmi les interruptions masquables, l’interruption de trap (TF : trap flag) ou de «pas-à-pas» (single step) est très utile pour la mise au point des programmes ; en effet, lorsque l’indicateur IF est positionné à 1, il est possible alors d’exécuter un programme pas à pas (c’est à dire instruction par instruction).
4. Traitement d’une interruption Pour qu’une interruption puisse être traitée par l’unité centrale, son occurrence doit être reconnue. Une interruption logicielle peut être générée à l’aide de l’instruction
INT n° Où n° code l’adresse de la routine de traitement spécifique de l’interruption.
4.1. Prise en charge d’une interruption Lorsque les interruptions masquables sont autorisées, l’occurrence d’une interruption
peut être signalée à l’unité centrale seulement à la fin de l’exécution de l’instruction en cours (sauf pour les instructions MOV et POP lorsqu’elles impliquent un registre - segment). La prise en charge d’une interruption entraîne :
• la sauvegarde sur la pile • Du registre d’état; • De l’adresse de retour (CS et IP) de la procédure interrompue (qui est toujours FAR vis-à-vis de la routine de traitement d’interruption)
• l’inhibition des interruptions externes (CLI) et du mode de trap (pas-à-pas); • La recherche de l’adresse de la routine de traitement de l’interruption spécifique; • l’exécution de cette routine.
Toutes les phases de prise en charge d’une interruption sont similaires au traitement d’une procédure (vue jusqu’à présent) sauf pour ce qui est de la recherche de l’adresse de la routine à exécuter. En effet, son numéro (dit aussi vecteur d’interruptions) ne pouvant pas être connu a priori, l’adresse de la routine spécifique est calculée à partir de ce numéro, qui est, en fin de compte, un index de la table des vecteurs d’interruption.
4.2. Vecteur d’interruptions La table des vecteurs d’interruptions est une table dont chaque élément représente
l’adresse d’implantation physique d’une routine de traitement d’interruption. Chaque élément en donc codé sur 4 octets pour mémoriser l’adresse physique sur 32 bits (CS et IP) d’une procédure. La table des vecteurs d’interruption est implantée à une adresse fixe, 00000H dans les systèmes à base de I80x86, et elle occupe 1Ko (en autorisant 256 interruptions).
Lors de la prise en charge d’une interruption, son numéro indiqué dans l’instruction est
multiplié par 4 et le résultat constitue l’adresse physique de l’emplacement du vecteur d’interruption qui renferme finalement l’adresse physique de la routine recherchée (il s’agit là d’un adressage indirect). La figure 13 donne l’organisation de la table des vecteurs d’interruptions. A l’adresse physique (4*n, 4*n + 1) on trouve toujours la valeur de l’IP, et à l’adresse (4*n + 2, 4*n + 3) la valeur du CS de la routine de traitement de l’interruption numéro n.
CHAPITRE VI : Les Interruptions ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 45
Fig. 13 : Vecteur d’interruptions
Lorsque le microprocesseur reçoit une interruption logicielle, la 21H, par exemple, soit 33 en décimal, il multiplie cette valeur par 4 (soit 132 en décimal, donc 84H) et va chercher en 84H deux adresses qu’il loge dans IP et dans CS, puis il poursuit l’exécution à partir des ses nouvelles adresses.
4.3. Architecture d’une routine de traitement d’interruption L’architecture d’une routine de traitement d’interruption est assez similaire à celle d’une
routine (procédure) : elle comprend
• L’instruction CLI (inhibition des interruptions) • La sauvegarde des registres internes; • Le corps: • La restauration des registres internes; • L’instruction STI (autorisation des interruptions) • L’instruction IRET (retour à la routine interrompue).
L’instruction IRET dépile CS : IP et le registre d’état.
CHAPITRE VI : Les Interruptions ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 46
4.4. Instructions spécifiques La gestion des interruptions logicielles ne fait appel qu’à un petit nombre d’instructions, dont voici le tableau: Instruction De l’anglais Fonction INT Interruption Appel d’une interruption logicielle INTO Interrupt on Overflow Interruption sur dépassement après une division IRET Interrupt Return Retour de procédure d’interruption HLT Halt Halte jusqu’à une interruption ou une ré-initialisation STI Set interrupt Flag Mise à 1 de l’indicateur IF CLI Clear Interrupt Flag Mise à 0 de l’indicateur IF Remarque Il n’existe aucune instruction agissant directement sur l’indicateur de pas à pas TF. Pour le positionner à 0 ou à 1, il faut agir globalement sur le mot d’état, passé dans la pile ou dans un registre tel que l’accumulateur, et exécuter une fonction logique :
• Or avec 0100H pour le mettre à 1; • AND avec FEFFH pour le mettre à 0.
CHAPITRE VII:
L’Interface Parallèle i8255
Plan:
1. Description
2. Fonctions des lignes de commande
3. Programmation du PPI
4. Mode 0 du PPI
CHAPITRE VII : L’Interface Parallèle i8255 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 48
1. Description Le PPI (Programmable peripheral Interface) 8255A est une interface Programmable travaillant en mode parallèle. Ce circuit possède :
• Un bus de données de 8 bits pour la communication avec le microprocesseur: • 24 lignes programmables en entrées ou en sorties, réparties en 2 port de 8 bits (A et B)
et deux demi-ports (C) de 4 lignes. Il est complètement compatible TTL. Sa tension d’alimentation est 5V ±5% et il dissipe au maximum une puissance de 1W.
Fig. 14 : Structure interne du 8255
Fig. 15 : Brochage du PPI 8255 Le buffer de données transfère les données entre le bus de données externe et le
registre de contrôle ou les ports. Quand le PPI n’est pas sélectionné, les entrées du buffer de données sont en troisième état.
CHAPITRE VII : L’Interface Parallèle i8255 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 49
2. Fonctions des lignes de commandes • Do à D7 : ce sont les huit lignes de données bidirectionnelles du PPI. Elles sont
pilotées par un amplificateur 3 états, qui est lui-même commandé par les instructions d’entrées-sorties que nous lui enverrons. C’est également par lui que transitent les mots de contrôle qui initialiseront le PPI.
• WR : ligne active à un niveau bas. Lorsque le PC écrira un mot, il devra d’abord mettre cette ligne au niveau bas.
• RD : ligne active à un niveau bas. Le micro devra activer cette ligne lorsqu’il souhaitera lire une donnée.
• CS : ligne de sélection du boîtier. Aucune opération ne pourra être exécutée si cette ligne n’est pas d’abord validée.
• A0 et Al : avec ces deux lignes d’adresses directement prélevées sur le bus du PC, nous disposons de quatre adresses à l’intérieur du PPI.
A1 A0 Port sélectionné 0 0 A 0 1 B 1 0 C 1 1 Registre de contrôle
• RESET : lorsqu’un niveau haut est appliqué sur cette entrée. le PPI est réinitialisé et toutes les lignes des 3 ports sont positionnées en entrée avec un niveau logique 1 sur les broches de trois ports. Le 8255 reste dans cet état jusqu’à l’écriture du mot de commande dans le registre de contrôle, qui définit le mode de fonctionnement: MODE 0 : Entrée/Sortie de base. MODE 1 Entrée/Sortie échantillonné ; MODE 2 : Bus bidirectionnel
Dans ce chapitre on se limite au mode 0.
3. Programmation du PPI
3.1. Format du mot de commande Le format du mot de commande du circuit 8255 est le suivant :
D7 D6 D5 D4 D3 D2 D1 D0
Fig. 15 : Mot de commande
Mode set flag=1
Sélection du mode
00 : mode 0 01 : mode 1 1X : mode 2
Port A 1 : entrée 0 : sortie
Port C (bits 4..7) 1 : entrée 0 : sortie
Sélection du mode
0 : mode0 1 : mode1
Port B 1 : entrée 0 : sortie
Port C (bits 0..3) 1 : entrée 0 : sortie
Groupe A Groupe B
CHAPITRE VII : L’Interface Parallèle i8255 ISET Mahdia
Informatique Industrielle 3ème niveau Med Ali KAMMOUN 50
Exemple: Le mot 90H permet de programmer le 8255 en mode 0 avec le port A en entrée et les ports B et C en sortie.
3.2. Séquence de Lecture/Ecriture PORTA EQU ADR_8255 PORTB EQU ADR_8255+1 PORTC EQU ADR_8255+3 ;Programmation du 8255 MOV DX, RCNT ; adresse du registre de contrôle dans DX MOV AL, 90H ; mot de commande dans AL MOV DX, AL ; programmation du PPI ;Lecture du port A MOV DX, PORTA ; adresse du port A dans DX IN AL, DX ; l’état du port A est mis dans AL ;Ecriture sur le port B MOV DX, PORTB ; adresse du port B dans DX MOV AL, OCTET ; Octet à écrire dans AL OUT DX,AL ;envoie du contenu de AL au port B
4. Mode 0 du PPI Dans ce mode chaque port peut être programmé en entrée ou en sortie. Par exemple le mot
de contrôle 8AH met le port A en sortie, le haut du port C en entrée, le bas du port C en sortie et le port B en entrée.
Les bits du port C du 8255 pourraient être mis à 1 ou à 0 individuellement, lorsque le bit 7 du registre de contrôle est mis à 0, dans ce cas il s d’une commande SET/RESET
0 X X X D3 D2 D1 D0
Fig. 16 : Mot de commande en mode Set/Reset Exemple : Le mot 0BH permet de mettre à 1 le bit 5 du port C.
BIT SET/RESET1 : Reset 0 : Set
SELECT BIT 000 : bit 0 001 : bit 1
111 : bit 7
51
Bibliographie [1] E. Cerney, Le Langage d’Assemblage et l’Assembleur, Dép. D’IRO., Université de Montréal. [2] Ecole d’ingénieurs d’Arc jurassien University of Applied Sciences, cours Microprocesseurs Architecture de base, Département MT, Octobre 2001. [3] Intel Corporation, 8086 16-Bit Microprocessor 8086/8086-1/8086-2, Septembre 1990. [4] J. Harms, Cours système informatique I-Assembleur, Université de Genève, 2001/2002. [5] O. Benyattou, Support de cours Assembleur 80x86, 1999/2000. [6] P. Bettens, J.C. Jaumain, J.M. Van Loock, Langage Assembleur, Version 2002, HEB ESI. [7] Ph. Leray, cours Architecture des ordinateurs et système d’exploitation, INSA Rouen. http://www.trotek.ec-lyon.fr/~muller/cours/8086/