´ Institut Sup´rieur des Etudes Technologiques de Rad`s e e ´ D´partement de G´nie Electrique e e MICROPROCESSEUR Support de cours e ´ e 4`me niveau G´nie Electrique ` Dr J.Y. Haggege Ing´nieur ENIT e ´ Agr´g´ de G´nie Electrique e e e Technologue a l’ISET de Rad`s ` e 2003 ii ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Table des mati`res e 1 Historique et ´volution des ordinateurs e 1.1 « Pr´histoire » des ordinateurs . . . . . e 1.2 Machines ´lectrom´caniques . . . . . . e e 1.3 Machines ´lectroniques . . . . . . . . . e 1.4 Machines actuelles . . . . . . . . . . . 1 1 1 1 2 3 3 4 5 6 6 11 11 11 12 13 14 16 17 19 19 20 20 26 29 32 33 33 33 37 38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Architecture et fonctionnement d’un microprocesseur 2.1 Structure d’un calculateur . . . . . . . . . . . . . . . . . 2.2 Organisation de la m´moire centrale . . . . . . . . . . . . e 2.3 Circulation de l’information dans un calculateur . . . . . 2.4 Description mat´rielle d’un microprocesseur . . . . . . . e 2.5 Fonctionnement d’un microprocesseur . . . . . . . . . . . 3 Les 3.1 3.2 3.3 3.4 3.5 3.6 3.7 m´moires e M´moires ROM et RAM . . . . . . . . . . . . . e Sch´ma fonctionnel d’une m´moire . . . . . . . e e Interfa¸age microprocesseur/m´moire . . . . . . c e Chronogrammes de lecture/´criture en m´moire e e Connection de plusieurs boˆ ıtiers m´moire . . . . e D´codage d’adresses . . . . . . . . . . . . . . . e Classification des m´moires . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Le microprocesseur Intel 8086 4.1 Description physique du 8086 . . . . . . . . . 4.2 Sch´ma fonctionnel du 8086 . . . . . . . . . . e 4.3 Description et utilisation des signaux du 8086 4.4 Organisation interne du 8086 . . . . . . . . . . 4.5 Gestion de la m´moire par le 8086 . . . . . . . e 4.6 Le microprocesseur 8088 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 La programmation en assembleur du microprocesseur 8086 5.1 G´n´ralit´s . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e e 5.2 Les instructions de transfert . . . . . . . . . . . . . . . . . . . 5.3 Les instructions arithm´tiques . . . . . . . . . . . . . . . . . . e 5.4 Les instructions logiques . . . . . . . . . . . . . . . . . . . . . ` HAGGEGE, 2003 cours de microprocesseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . ISET Rad`s e iv 5.5 5.6 6 Les 6.1 6.2 6.3 6.4 6.5 7 Les 7.1 7.2 7.3 7.4 7.5 Table des mati`res e Les instructions de branchement . . . . . . . . . . . . . . . . . . . . . . . . 42 M´thodes de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . 48 e interfaces d’entr´es/sorties e D´finitions . . . . . . . . . . . e Adressage des ports d’E/S . . Gestion des ports d’E/S par le L’interface parall`le 8255 . . . e L’interface s´rie 8250 . . . . . e . . . . . . 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 51 52 53 55 60 71 71 72 73 74 75 77 81 interruptions D´finition d’une interruption . . . . . . . . . . . . . . . . e Prise en charge d’une interruption par le microprocesseur Adresses des sous-programmes d’interruptions . . . . . . Les interruptions du 8086 . . . . . . . . . . . . . . . . . Le contrˆleur programmable d’interruptions 8259 . . . . o Annexe - Jeu d’instructions du 8086 Bibliographie ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 1 Historique et ´volution des e ordinateurs 1.1 « Pr´histoire » des ordinateurs e Les premi`res machines ` calculer ´taient purement m´caniques : bouliers, abaques, ... e a e e (antiquit´). e Premi`re vraie machine ` calculer : Pascal, 1642, machine a additionner. e a ` Machine ` multiplier : Leibniz, 1694, bas´e sur les travaux de John Neper (1617, logaa e rithmes). e Premi`re machine programmable : m´tier ` tisser, Jacquard, xviii`me si`cle, machine ` e e a e a cartes perfor´es. e e e e Machine programmable universelle : Babbage, xviii`me si`cle, non r´alisable avec les technologies de l’´poque (machines ` vapeur), principe des machines actuelles. e a 1.2 Machines ´lectrom´caniques e e Machine ` calculer a cartes perfor´es : Hermann Hollerith, 1885, facilite le recensement a ` e am´ricain. e Machines industrielles pour la comptabilit´ et les statistiques. Ces machines sont ` base e a de relais ´lectrom´caniques (Aiken et Stibitz, 1936-1939). e e 1.3 Machines ´lectroniques e Premi`re machine ` calculer ´lectronique : ENIAC, 1944, Eckert et Mauchly, 18000 tubes e a e ´lectroniques, machine a programme cˆbl´. e ` a e Machine ` programme enregist´ : John Von Neumann, 1946, les instructions sont enrea e gistr´es dans la m´moire du calculateur : ordinateur. e e Premier ordinateur commercialis´ : SSEC d’IBM, 1948. e Ordinateur a transistors : 1963, PDP5 de Digital Equipment Corporation (DEC), intro` duction des m´moires ` ferrites : mini-ordinateurs. e a ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 2 Chapitre 1 - Historique et ´volution des ordinateurs e Micro-ordinateurs : 1969-70, utilisation des circuits int´gr´s LSI. e e Premier microprocesseur : Intel, 1971, microprocesseur 4004, puis 8008, premier microordinateur : le Micral, 1973, France, puis l’Altair, 1975, Etats-Unis. Autres microprocesseurs : 8080 et 8085 d’Intel, 6800 de Motorola, Z80 de Zilog : microprocesseurs 8 bits, d´but des ann´es 1980. e e Microprocesseurs 16 bits : 8086/8088 d’Intel, 68000 de Motorola. Microprocesseurs 32 bits en 1986 : 80386 d’Intel et 68020 de Motorola. Fabrication en grandes s´ries des micro-ordinateurs : 1977, Apple, Commodore, Tandy. e IBM PC + MS-DOS (Microsoft) en 1981. 1.4 Machines actuelles Ordinateurs de plus en plus puissants, bas´s sur des microprocesseurs performants : Pene tium, Power PC, ... Nouvelles architectures de microprocesseurs : RISC. Applications multim´dia, r´seaux, ... e e Syst`mes embarqu´s : microcontrˆleurs, processeurs de traitement de signal (DSP), ... e e o ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 2 Architecture et fonctionnement d’un microprocesseur 2.1 Structure d’un calculateur unité centrale de traitement (UCT) horloge registres unité de contrôle unité arithmétique et logique (UAL) unité de transfert unité d'entrées/ sorties monde extérieur (périphériques, capteurs, actionneurs, ...) : ordre ou commande : données mémoire centrale L’´l´ment de base d’un calculateur est constitu´ par l’unit´ centrale de traitement ee e e (UCT, CPU : Central Processing Unit). L’UCT est constitu´e : e • d’une unit´ arithm´tique et logique (UAL, ALU : Arithmetic and Logic Unit) : e e c’est l’organe de calcul du calculateur ; • de registres : zones de stockage des donn´es de travail de l’UAL (op´randes, e e r´sultats interm´diaires) ; e e • d’une unit´ de contrˆle (UC, CU : Control Unit) : elle envoie les ordres (ou come o mandes) ` tous les autres ´l´ments du calculateur afin d’ex´cuter un programme. a ee e La m´moire centrale contient : e • le programme a ex´cuter : suite d’instructions ´l´mentaires ; ` e ee • les donn´es ` traiter. e a ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 4 Chapitre 2 - Architecture et fonctionnement d’un microprocesseur L’unit´ d’entr´es/sorties (E/S) est un interm´diaire entre le calculateur et le monde e e e ext´rieur. e L’unit´ de transfert est le support mat´riel de la circulation des donn´es. e e e Les ´changes d’ordres et de donn´es dans le calculateur sont synchronis´s par une horloge e e e qui d´livre des impulsions (signal d’horloge) a des intervalles de temps fixes. e ` D´finition : un microprocesseur consiste en une unit´ centrale de traitement (UAL + e e registres + unit´ de contrˆle) enti`rement contenue dans un seul circuit int´gr´. Un cale o e e e culateur construit autour d’un microprocesseur est un microcalculateur ou un microordinateur. Remarque : un circuit int´gr´ qui inclut une UCT, de la m´moire et des p´riph´riques e e e e e est un microcontrˆleur. o 2.2 Organisation de la m´moire centrale e La m´moire peut ˆtre vue comme un ensemble de cellules ou cases contenant chacune e e une information : une instruction ou une donn´e. Chaque case m´moire est rep´r´e par e e ee un num´ro d’ordre unique : son adresse. e Repr´sentation : e adresse des cases mémoire (généralement notée en hexadécimal) 12H contenu des cases mémoire C6H 05H 3EH 0003H 0002H 0001H 0000H largeur des cases mémoire : en général 1 octet (8 bits) = unité d'adressage Une case m´moire peut ˆtre lue ou ´crite par le microprocesseur (cas des m´moires e e e e vives) ou bien seulement lue (cas des m´moires mortes). e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 2.3 - Circulation de l’information dans un calculateur 5 2.3 Circulation de l’information dans un calculateur microprocesseur mémoire E/S BUS Le microprocesseur ´change des informations avec la m´moire et l’unit´ d’E/S, sous forme e e e de mots binaires, au moyen d’un ensemble de connexions appel´ bus. Un bus permet e de transf´rer des donn´es sous forme parall`lle, c’est-`-dire en faisant circuler n bits e e e a simultan´ment. e Les microprocesseurs peuvent ˆtre class´s selon la longueur maximale des mots binaires e e qu’ils peuvent ´changer avec la m´moire et les E/S : microprocesseurs 8 bits, 16 bits, e e 32 bits, ... Le bus peut ˆtre d´compos´ en trois bus distincts : e e e • le bus d’adresses permet au microprocesseur de sp´cifier l’adresse de la case e m´moire ` lire ou a ´crire ; e a `e • le bus de donn´es permet les transferts entre le microprocesseur et la m´moire ou e e les E/S ; • le bus de commande transmet les ordres de lecture et d’´criture de la m´moire et e e des E/S. périphériques bus de données 16 bus d'adresses bus de commande ISET Rad`s e largeur du bus (nombre de bits en parallèle) 8 microprocesseur mémoire E/S Remarque : les bus de donn´es et de commande sont bidirectionnels, le bus d’adresse e est unidirectionnel : seul le microprocesseur peut d´livrer des adresses (il existe une e d´rogation pour les circuits d’acc`s direct ` la m´moire, DMA). e e a e ` HAGGEGE, 2003 cours de microprocesseur périphériques La r´alisation mat´rielle des ordinateurs est g´n´ralement bas´e sur l’architecture de Von e e e e e Neumann : 6 Chapitre 2 - Architecture et fonctionnement d’un microprocesseur 2.4 Description mat´rielle d’un microprocesseur e Un microprocesseur se pr´sente sous la forme d’un circuit int´gr´ muni d’un nombre e e e g´n´ralement important de broches. Exemples : e e • Intel 8085, 8086, Zilog Z80 : 40 broches, DIP (Dual In-line Package) ; • Motorola 68000 : 64 broches, DIP ; • Intel 80386 : 196 broches, PGA (Pin Grid Array). Technologies de fabrication : NMOS, PMOS, CMOS. On peut repr´senter un microprocesseur par son sch´ma fonctionnel : e e alimentation n bits bus d'adresses horloge reset microprocesseur signaux de commande du microprocesseur p bits bus de données bus de commande 2.5 Fonctionnement d’un microprocesseur Un microprocesseur ex´cute un programme. Le programme est une suite d’instructions e stock´es dans la m´moire. Une instruction peut ˆtre cod´e sur un ou plusieurs octets. e e e e Format d’une instruction : opération à effectuer opérande 1 , opérande 2 données traitées par l'opération Exemple : e e ADDITIONNER case m´moire 1, case m´moire 2 op´ration e op´randes e cours de microprocesseur ` HAGGEGE, 2003 ISET Rad`s e 2.5 - Fonctionnement d’un microprocesseur Rangement en m´moire : e 7 opérande p instruction n opérande 2 opérande 1 code opératoire de l'addition 3EH 0002H 0001H 0000H Pour ex´cuter les instructions dans l’ordre ´tabli par le programme, le microprocesseur e e doit savoir a chaque instant l’adresse de la prochaine instruction a ex´cuter. Le micropro` ` e cesseur utilise un registre contenant cette information. Ce registre est appel´ pointeur e d’instruction (IP : Instruction Pointer) ou compteur d’instructions ou compteur ordinal. Exemple : pointeur d'instruction 3A2BH adresse de la prochaine instruction à exécuter opérande p instruction n 3A2BH opérande 2 opérande 1 instruction 1 0002H 0001H 0000H Remarque : la valeur initiale du pointeur d’instruction est fix´e par le constructeur e du microprocesseur. Elle vaut une valeur bien d´finie ` chaque mise sous tension du e a microprocesseur ou bien lors d’une remise a z´ro (reset). ` e Pour savoir quel type d’op´ration doit ˆtre ex´cut´ (addition, soustraction, ...), le mie e e e croprocesseur lit le premier octet de l’instruction point´e par le pointeur d’instruction e (code op´ratoire) et le range dans un registre appel´ registre d’instruction. Le code e e op´ratoire est d´cod´ par des circuits de d´codage contenus dans le microprocesseur. Des e e e e signaux de commande pour l’UAL sont produits en fonction de l’op´ration demand´e qui e e est alors ex´cut´e. e e Remarque : pour ex´cuter une instruction, l’UAL utilise des registres de travail, e exemple : l’accumulateur, registre temporaire recevant des donn´es interm´diaires. e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 8 Chapitre 2 - Architecture et fonctionnement d’un microprocesseur Pendant que l’instruction est d´cod´e, le pointeur d’instruction est incr´ment´ de fa¸on ` e e e e c a pointer vers l’instruction suivante : pointeur d'instruction 3A2DH instruction n+1 opérande p 3A2BH instruction n 3A2DH 3A2CH 3A2BH puis le processus de lecture et de d´codage des instructions recommence. e A la suite de chaque instruction, un registre du microprocesseur est actualis´ en fonction e du dernier r´sultat : c’est le registre d’´tat du microprocesseur. Chacun des bits du e e registre d’´tat est un indicateur d’´tat ou flag (drapeau). e e Exemple : registre d’´tat du microprocesseur Z80 : e 7 S 6 Z 5 4 AC 3 2 P/O 1 N 0 C signe zéro retenue auxiliaire soustraction retenue parité/ (carry) dépassement Les indicateurs d’´tat sont activ´s lorsqu’une certaine condition est remplie, exemple : le e e flag Z est mis a 1 lorsque la derni`re op´ration a donn´ un r´sultat nul, le flag C est mis ` e e e e ` un lorsque le r´sultat d’une addition poss`de une retenue, ... a e e Les indicateurs d’´tat sont utilis´s par les instructions de saut conditionnels : en fonction e e de l’´tat d’un (ou plusieurs) flags, le programme se poursuit de mani`re diff´rente. e e e Toutes ces ´tapes (lecture de l’instruction, d´codage, ex´cution) sont synchronis´es par e e e e un s´quenceur qui assure le bon d´roulement des op´rations : e e e mémoire horloge bus d'adresse pointeur d'instruction bus de commande : "lire la mémoire" registre d'instruction séquenceur bus de données micro-code décodeur exécution ` HAGGEGE, 2003 ISET Rad`s e cours de microprocesseur 2.5 - Fonctionnement d’un microprocesseur 9 Pour ex´cuter le programme contenu dans la m´moire centrale, le s´quenceur du microproe e e cesseur ex´cute lui-mˆme un programme appel´ micro-code, contenu dans une m´moire e e e e morte a l’int´rieur du microprocesseur. ` e Le s´quenceur est dirig´ par une horloge qui d´livre un signal de fr´quence donn´e pere e e e e mettant d’enchaˆ ıner les diff´rentes ´tapes de l’ex´cution d’une instruction : e e e cycle d'instruction période d'horloge (microcycle) T1 recherche de l'instruction T2 décodage T3 exécution instruction suivante Chaque instruction est caract´ris´e par le nombre de p´riodes d’horloge (ou microcycles) e e e qu’elle utilise (donn´e fournie par le fabricant du microprocesseur). e Exemple : horloge a 5 MHz, p´riode T = 1/f = 0, 2 µs. Si l’instruction s’ex´cute en 3 ` e e microcycles, la dur´e d’ex´cution de l’instruction est : 3 × 0, 2 = 0, 6 µs. e e L’horloge est constitu´e par un oscillateur a quartz dont les circuits peuvent ˆtre internes e ` e ou externes au microprocesseur. Structure compl`te d’un microprocesseur simple : pour fonctionner, un microprocesseur e n´cessite donc au minimum les ´l´ments suivants : e ee registres pointeur d'instruction registre d'instruction accumulateur indicateurs d'état séquenceur horloge décodeur d'instructions Unité Arithmétique et Logique (UAL) quartz ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 10 Chapitre 2 - Architecture et fonctionnement d’un microprocesseur ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 3 Les m´moires e 3.1 M´moires ROM et RAM e On distingue deux types de m´moires : e • les m´moires vives (RAM : Random Access Memory) ou m´moires volatiles. Elles e e perdent leur contenu en cas de coupure d’alimentation. Elles sont utilis´es pour e stocker temporairement des donn´es et des programmes. Elles peuvent ˆtre lues et e e ´crites par le microprocesseur ; e • les m´moires mortes (ROM : Read Only Memory) ou m´moires non volatiles. e e Elles conservent leur contenu en cas de coupure d’alimentation. Elles ne peuvent ˆtre que lues par le microprocesseur (pas de possibilit´ d’´criture). On les utilise e e e pour stocker des donn´es et des programmes de mani`re d´finitive. e e e Les m´moires sont caract´ris´es par leur capacit´ : nombre total de cases m´moire contee e e e e nues dans un mˆme boˆ e ıtier. 3.2 Sch´ma fonctionnel d’une m´moire e e A0 A1 A2 An-1 RAM ou ROM D0 D1 D2 Dp-1 n lignes d'adresses p lignes de données (le plus souvent, p = 8) actifs à l'état bas signal de lecture : RD ou OE signal d'écriture (RAM) : WR validation de boîtier : CS (chip select) Le nombre de lignes d’adresses d´pend de la capacit´ de la m´moire : n lignes d’adresses e e e n e permettent d’adresser 2 cases m´moire : 8 bits d’adresses permettent d’adresser 256 oc` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 12 Chapitre 3 - Les m´moires e tets, 16 bits d’adresses permettent d’adresser 65536 octets (= 64 Ko), ... Exemple : m´moire RAM 6264, capacit´ = 8K × 8 bits : 13 broches d’adresses A0 a A12, e e ` 213 = 8192 = 8 Ko. 3.3 Interfa¸age microprocesseur/m´moire c e microprocesseur D0 D1 données D7 D7 An-1 commandes RD WR RD WR CS A0 A1 A2 An-1 D0 D1 mémoire A0 A1 A2 adresses Repr´sentation condens´e (plus pratique) : e e microprocesseur D0 D1 données D7 D7 An-1 commandes RD WR RD WR CS A0 A1 A2 n An-1 bus 8 D0 D1 mémoire A0 A1 A2 adresses ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 3.4 - Chronogrammes de lecture/´criture en m´moire e e 13 3.4 Chronogrammes de lecture/´criture en m´moire e e Une caract´ristique importante des m´moires est leur temps d’acc`s : c’est le temps qui e e e s’´coule entre l’instant o` l’adresse de la case m´moire est pr´sent´e sur le bus d’adresses e u e e e et celui o` la m´moire place la donn´e demand´e sur le bus de donn´es. Ce temps varie u e e e e entre 50 ns (m´moires rapides) et 300 ns (m´moires lentes). e e Chronogramme de lecture en m´moire : e une période d'horloge horloge temps d'établissement de l'adresse adresse stable bus d'adresses lecture interdite commande de lecture temps d'accès bus de données valeurs non significatives donnée stable donnée sur le bus adresse sur le bus (0 ou 1) lecture autorisée Remarque : si le temps d’acc`s d’une m´moire est sup´rieur a une p´riode d’horloge e e e ` e (m´moire lente), le microprocesseur peut accorder a la m´moire un temps suppl´mentaire e ` e e (une ou plusieurs p´riodes d’horloge), a la demande de celle-ci. Ce temps suppl´mentaire e ` e est appel´ temps d’attente (wait time : TW ) : e signal de lecture microprocesseur demande de temps d'attente ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e mémoire 14 Chronogramme d’´criture en m´moire : e e Chapitre 3 - Les m´moires e horloge bus d'adresses adresse sur le bus bus de données pallier de sécurité commande de lecture donnée sur le bus écriture autorisée 3.5 Connexion de plusieurs boˆ ıtiers m´moire sur le e bus d’un microprocesseur Les boˆ ıtiers m´moire poss`dent une broche not´e CS : Chip Select. Lorsque cette broche e e e est active (´tat bas), le circuit peut ˆtre lu ou ´crit. Lorsqu’elle est inactive( ´tat haut), e e e e le circuit est exclu du service : ses broches de donn´es D0 ` D7 passent a l’´tat de haute e a ` e imp´dance : tout se passe comme si la m´moire ´tait d´connect´e du bus de donn´es du e e e e e e microprocesseur, d’o` la possibilit´ de connecter plusieurs boˆ u e ıtiers m´moire sur un mˆme e e e ` e e bus : un seul signal CS doit ˆtre actif a un instant donn´ pour ´viter les conflits entre les diff´rents boˆ e ıtiers. Exemple : connexion de trois boˆ ıtiers m´moire d’une capacit´ de 8 Ko chacun (13 lignes e e d’adresses) sur un bus d’adresse de 16 bits : ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 3.5 - Connection de plusieurs boˆ ıtiers m´moire e 13 microprocesseur A0 A1 A2 A12 A13 A14 A15 bus d'adresses A0 - A12 mémoire 1 A0 A1 A2 8 Ko A12 CS RD WR D0 D1 D7 mémoire 2 A0 A1 A2 8 Ko A12 CS RD WR D0 D1 D7 mémoire 3 A0 A1 A2 8 Ko A12 CS RD WR D0 D1 D7 15 D0 D1 D7 RD WR signaux de selection de boîtier 8 bus de données D0-D7 Dans un mˆme boˆ e ıtier, une case m´moire est d´sign´e par les bits d’adresses A0 ` A12 : e e e a A12 0 A11 0 ... ... 0000H A1 0 A0 0 ` a A12 1 A11 1 ... ... 1FFFH A1 1 A0 1 ` ` Pour atteindre la m´moire no 1, il faut mettre a 1 le bit A13 et a 0 les bits A14 et A15. e La plage d’adresses occup´e par cette m´moire est donc : e e A15 0 A14 0 A13 A12 ... 0 ... 1 2000H A0 0 ` a A15 0 A14 0 A13 A12 ... 1 ... 1 3FFFH A0 1 De mˆme, pour la m´moire no 2, on doit avoir A13 = 0, A14 = 1 et A15 = 0 d’o` la plage e e u d’adresses occup´e cette m´moire : e e A15 0 A14 1 A13 A12 ... 0 ... 0 4000H A0 0 ` a A15 0 A14 1 A13 A12 ... 1 ... 0 5FFFH A0 1 Pour la m´moire no 3, on doit avoir A13 = 0, A14 = 0 et A15 = 1 d’o` la plage d’adresses e u occup´e cette m´moire : e e A15 1 A14 0 A13 A12 ... 0 ... 0 8000H A0 0 ` a A15 1 A14 0 A13 A12 ... 1 ... 0 9FFFH A0 1 On en d´duit la cartographie ou mapping de la m´moire visible par le microprocesseur : e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 16 FFFFH Chapitre 3 - Les m´moires e 9FFFH mémoire no 3 8000H mémoire réelle implantée mémoire totale adressable par le microprocesseur 5FFFH mémoire no 2 mémoire no 1 2000H 0000H 4000H 3FFFH 3.6 D´codage d’adresses e Les trois bits A13, A14 et A15 utilis´s pr´c´demment fournissent en fait 8 combinaisons, e e e de 000 a 111, d’o` la possibilit´ de connecter jusqu’` 8 boˆ ` u e a ıtiers m´moire de 8 Ko sur le e bus. La m´moire totale implant´e devient donc de 8 × 8 Ko = 64 Ko : valeur maximale e e possible avec 16 bits d’adresses. Pour cela, il faut utiliser un circuit de d´codage d’adresses, dans ce cas : un d´codeur e e 3 vers 8. A0 à A12 microprocesseur A15 A14 A13 mémoire no 0 1 D0 à D7 2 3 CS 4 5 CS CS 6 7 CS CS CS CS CS A B C Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 décodeur 3 vers 8 (ex: 74138) ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 3.7 - Classification des m´moires e Table de v´rit´ du d´codeur d’adresses : e e e C 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 A 0 1 0 1 0 1 0 1 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 17 Le mapping de la m´moire devient ainsi : e FFFFH mémoire n 7 mémoire no 6 C000H BFFFH mémoire no 5 A000H 9FFFH mémoire no 4 mémoire no 3 mémoire no 2 mémoire no 1 mémoire no 0 2000H 1FFFH 0000H 8000H 7FFFH 6000H 5FFFH 4000H 3FFFH o E000H DFFFH 3.7 Classification des m´moires e Jusqu’` la fin des ann´es 1970, on utilisait des m´moires ` tores magn´tiques, lentes et a e e a e de faibles capacit´s. Actuellement, on n’utilise plus que des m´moires ` semiconducteurs. e e a mémoires à semiconducteurs mémoires mortes ROM ` HAGGEGE, 2003 mémoires vives DRAM SRAM ISET Rad`s e PROM EPROM EEPROM cours de microprocesseur 18 M´moires mortes : e Chapitre 3 - Les m´moires e • ROM : Read Only Memory. M´moire ` lecture seule, sans ´criture. Son contenu e a e est programm´ une fois pour toutes par le constructeur. Avantage : faible coˆt. e u Inconv´nient : n´cessite une production en tr`s grande quantit´. e e e e • PROM : Programmable Read Only Memory. ROM programmable une seule fois par l’utilisateur (ROM OTP : One Time Programming) en faisant sauter des fusibles. N´cessite un programmateur sp´cialis´ : application d’une tension de programmation e e e (21 ou 25 V) pendant 20 ms. • EPROM : Erasable PROM, appel´e aussi UVPROM. ROM programmable ´lectrie e quement avec un programmateur et effa¸able par exposition a un rayonnement ultrac ` violet pendant 30 minutes. Famille 27nnn, exemple : 2764 (8 Ko), 27256 (32 Ko). Avantage : reprogrammable par l’utilisateur. • EEPROM : Electrically Erasable PROM. ROM programmable et effa¸able ´lectric e quement. Lecture ` vitesse normale (≤ 100 ns). Ecriture (= effacement) tr`s lente a e (≈ 10 ms). Application : les EEPROM contiennent des donn´es qui peuvent ˆtre e e modifi´es de temps en temps, exemple : param`tres de configuration des ordinateurs. e e Avantage : programmation sans extraction de la carte et sans programmateur. Inconv´nient : coˆt ´lev´. e u e e M´moires vives : e • SRAM : Static Random Access Memory. M´moire statique a acc`s al´atoire, a base e ` e e ` de bascules ` semiconducteurs ` deux ´tats (bascules RS). Famille 62nnn, exemple : a a e 62128 (16 Ko). Avantage : tr`s rapide, simple d’utilisation. Inconv´nient : compliqu´ e e e ` r´aliser. a e • DRAM : Dynamic RAM. Bas´e sur la charge de condensateurs : condensateur e charg´ = 1, condensateur d´charg´ = 0. Avantage : int´gration ´lev´e, faible coˆt. e e e e e e u Inconv´nient : n´cessite un rafraˆ e e ıchissement p´riodique ` cause du courant de fuite e a des condensateurs. Application : r´alisation de la m´moire vive des ordinateurs e e (barettes m´moire SIMM : Single In-line Memory module). e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 4 Le microprocesseur Intel 8086 4.1 Description physique du 8086 Le microprocesseur Intel 8086 est un microprocesseur 16 bits, apparu en 1978. C’est le premier microprocesseur de la famille Intel 80x86 (8086, 80186, 80286, 80386, 80486, Pentium, ...). Il se pr´sente sous la forme d’un boˆ e ıtier DIP (Dual In-line Package) ` a 40 broches : GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND ` HAGGEGE, 2003 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 VCC AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE/S7 MN/MX RD HOLD HLDA WR M/IO DT/R DEN ALE INTA TEST READY RESET ISET Rad`s e 8086 (mode maximum) (RQ/GT0) (RQ/GT1) (LOCK) (S2) (S1) (S0) (QS0) (QS1) cours de microprocesseur 20 Chapitre 4 - Le microprocesseur Intel 8086 4.2 Sch´ma fonctionnel du 8086 e alimentation VCC GND horloge CLK RESET A19 A16 AD15 8086 AD0 WR bus d'adresses/ données contrôle du microprocesseur READY MN/MX TEST INTA interruptions NMI INTR RD M/IO ALE BHE DEN signaux de contrôle HOLD DMA DT/R HLDA S0 S7 signaux d'état 4.3 Description et utilisation des signaux du 8086 CLK : entr´e du signal d’horloge qui cadence le fonctionnement du microprocesseur. Ce e signal provient d’un g´n´rateur d’horloge : le 8284. e e 4,77 MHz quartz 14,318 MHz 8284 CLK READY 8086 RESET générateur d'horloge ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 4.3 - Description et utilisation des signaux du 8086 21 RESET : entr´e de remise ` z´ro du microprocesseur. Lorsque cette entr´e est mise ` e a e e a l’´tat haut pendant au moins 4 p´riodes d’horloge, le microprocesseur est r´initialis´ : il e e e e va ex´cuter l’instruction se trouvant a l’adresse FFFF0H (adresse de bootstrap). Le signal e ` de RESET est fourni par le g´n´rateur d’horloge. e e READY : entr´e de synchronisation avec la m´moire. Ce signal provient ´galement du e e e g´n´rateur d’horloge. e e TEST : entr´e de mise en attente du microprocesseur d’un ´v´nement ext´rieur. e e e e MN/MX : entr´e de choix du mode de fonctionnement du microprocesseur : e • mode minimum (MN/MX = 1) : le 8086 fonctionne de mani`re autonome, il g´n`re e e e lui-mˆme le bus de commande (RD, WR, ...) ; e • mode maximum (MN/MX = 0) : ces signaux de commande sont produits par un contrˆleur de bus, le 8288. Ce mode permet de r´aliser des syst`mes multiproceso e e seurs. NMI et INTR : entr´es de demande d’interruption. INTR : interruption normale, NMI e (Non Maskable Interrupt) : interruption prioritaire. INTA : Interrupt Acknowledge, indique que le microprocesseur accepte l’interruption. HOLD et HLDA : signaux de demande d’accord d’acc`s direct ` la m´moire (DMA). e a e S0 ` S7 : signaux d’´tat indiquant le type d’op´ration en cours sur le bus. a e e A16/S3 ` A19/S6 : 4 bits de poids fort du bus d’adresses, multiplex´s avec 4 bits a e d’´tat. e AD0 ` AD15 : 16 bits de poids faible du bus d’adresses, multiplex´s avec 16 bits a e de donn´es. Le bus A/D est multiplex´ (multiplexage temporel) d’o` la n´cessit´ d’un e e u e e d´multiplexage pour obtenir s´par´ment les bus d’adresses et de donn´es : e e e e • 16 bits de donn´es (microprocesseur 16 bits) ; e e • 20 bits d’adresses, d’o` 220 = 1 Mo d’espace m´moire adressable par le 8086. u Chronogramme du bus A/D : ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 22 1 cycle de bus T1 CLK T2 T3 Chapitre 4 - Le microprocesseur Intel 8086 T4 T1 T2 T3 T4 ADi adresse donnée adresse donnée ALE lecture RD écriture WR Le d´multiplexage des signaux AD0 a AD15 (ou A16/S3 a A19/S6) se fait en m´morisant e ` ` e l’adresse lorsque celle-ci est pr´sente sur le bus A/D, ` l’aide d’un verrou (latch), ene a semble de bascules D. La commande de m´morisation de l’adresse est g´n´r´e par le e e ee microprocesseur : c’est le signal ALE, Address Latch Enable. Circuit de d´multiplexage A/D : e LATCH ALE bus d'adresses 8086 H Q D x 20 A0 - A19 bus de données 20 AD0 - AD15 A16/S3 - A19/S6 D0 - D15 S3 -S6 Fonctionnement : • si ALE = 1, le verrou est transparent (Q = D) ; • si ALE = 0, m´morisation de la derni`re valeur de D sur les sorties Q ; e e • les signaux de lecture (RD) ou d’´criture (WR) ne sont g´n´r´s par le microprocese e ee seur que lorsque les donn´es sont pr´sentes sur le bus A/D. e e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 4.3 - Description et utilisation des signaux du 8086 Exemples de bascules D : circuits 8282, 74373, 74573. 23 AD0 - AD7 ou AD8 - AD15 ou A16/S3 - A19/S6 ALE D0 D1 8282 D7 STROBE OE Q0 Q1 Q7 A0 - A7 ou A8 - A15 ou A16 - A19 RD : Read, signal de lecture d’une donn´e. e WR : Write, signal d’´criture d’une donn´e. e e e M/IO : Memory/Input-Output, indique si le 8086 adresse la m´moire (M/IO = 1) ou les entr´es/sorties (M/IO = 0). e DEN : Data Enable, indique que des donn´es sont en train de circuler sur le bus A/D e (´quivalent de ALE pour les donn´es). e e e DT/R : Data Transmit/Receive, indique le sens de transfert des donn´es : e e e • DT/R = 1 : donn´es ´mises par le microprocesseur (´criture) ; • DT/R = 0 : donn´es re¸ues par le microprocesseur (lecture). e c 1 cycle de bus T1 CLK T2 T3 T4 ADi adresse donnée ALE DEN écriture DT/R lecture Les signaux DEN et DT/R sont utilis´s pour la commande de tampons de bus (buffers) e permettant d’amplifier le courant fourni par le microprocesseur sur le bus de donn´es. e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 24 Chapitre 4 - Le microprocesseur Intel 8086 Exemples de tampons de bus : circuits transmetteurs bidirectionnels 8286 ou 74245. A0 A1 AD0 - AD7 ou AD8 - AD15 commande du sens de transfert DT/R validation du transfert DEN A7 DIR EN 8286 D0 - D7 ou D8 - D15 x8 B7 B0 B1 lignes de données bufferisées BHE : Bus High Enable, signal de lecture de l’octet de poids fort du bus de donn´es. e Le 8086 poss`de un bus d’adresses sur 20 bits, d’o` la capacit´ d’adressage de 1 Mo ou e u e 512 Kmots de 16 bits (bus de donn´es sur 16 bits). e Le m´ga-octet adressable est divis´ en deux banques de 512 Ko chacune : la banque e e inf´rieure (ou paire) et la banque sup´rieure (ou impaire). Ces deux banques sont e e s´lectionn´es par : e e • A0 pour la banque paire qui contient les octets de poids faible ; • BHE pour la banque impaire qui contient les octets de poids fort. A1 - A19 bus d'adresses A1 A0 A2 A1 D0 D0 D1 D1 banque paire D7 D7 A19 A18 A0 CS A1 A0 A2 A1 D0 D8 D1 D9 banque impaire D7 D15 A19 A18 BHE D0 - D15 bus de données ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 CS 4.3 - Description et utilisation des signaux du 8086 25 Seuls les bits A1 ` A19 servent a d´signer une case m´moire dans chaque banque de a ` e e 512 Ko. Le microprocesseur peut ainsi lire et ´crire des donn´es sur 8 bits ou sur 16 bits : e e BHE A0 0 0 0 1 1 0 1 1 octets transf´r´s ee les deux octets (mot complet) octet fort (adresse impaire) octet faible (adresse paire) aucun octet Remarque : le 8086 ne peut lire une donn´e sur 16 bits en une seule fois, uniquement si e l’octet de poids fort de cette donn´e est rang´ ` une adresse impaire et l’octet de poids e ea faible a une adresse paire (alignement sur les adresses paires), sinon la lecture de cette ` donn´e doit se faire en deux op´rations successives, d’o` une augmentation du temps e e u d’ex´cution du transfert dˆ ` un mauvais alignement des donn´es. e ua e R´alisation des deux banques avec plusieurs boˆ e ıtiers m´moire : e bus d'adresses A1 - A19 D0 D0 D1 D1 64 K x 8 D7 D7 A16 A15 A17 A A18 B A19 C 74138 A0 EN Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A1 A0 A2 A1 CS A1 A0 A2 A1 64 K x 8 A16 A15 CS D0 D0 D1 D1 D7 D7 banque paire A1 A0 A2 A1 64 K x 8 D0 D8 D1 D9 D7 D15 A16 A15 A17 A A18 B A19 C 74138 BHE EN Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 CS A1 A0 A2 A1 64 K x 8 D7 D15 A16 A15 CS bus de données D0 - D15 D0 D8 D1 D9 banque impaire ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 26 Cr´ation du bus syst`me du 8086 : e e Chapitre 4 - Le microprocesseur Intel 8086 CLK 8284 RESET READY BHE/S7 A19/S6 A16/S3 AD0 AD15 8086 8282 D STR Q BHE A19 A16 8282 D STR 8282 D STR Q Q A15 A8 WR RD M/IO ALE DEN DT/R A7 BUS SYSTEME commandes données B D7 D0 M/IO RD WR ` HAGGEGE, 2003 A0 A 8286 EN DIR B D15 D8 A 8286 EN DIR 4.4 Organisation interne du 8086 Le 8086 est constitu´ de deux unit´s fonctionnant en parall`le : e e e • l’unit´ d’ex´cution (EU : Execution Unit) ; e e • l’unit´ d’interface de bus (BIU : Bus Interface Unit). e ISET Rad`s e cours de microprocesseur adresses 4.4 - Organisation interne du 8086 8 bits AH registres généraux BH CH DH SI pointeurs et index DI SP BP 8 bits AL BL CL DL = AX = BX = CX = DX 16 bits 16 bits DS SS CS ES IP 27 registres de segments pointeur d'instruction bus de données interne 16 génération d'adresses et contrôle de bus bus externe A/D multiplexé + bus de contrôle registres temporaires 1 2 3 4 5 6 commandes de l'unité d'exécution file d'attente des instructions (6 octets) UAL indicateurs UNITE D'EXECUTION (EU) UNITE D'INTERFACE DE BUS (BIU) Rˆle des deux unit´s : o e • l’unit´ d’interface de bus (BIU) recherche les instructions en m´moire et les range e e dans une file d’attente ; • l’unit´ d’ex´cution (EU) ex´cute les instructions contenues dans la file d’attente. e e e Les deux unit´s fonctionnent simultan´ment, d’o` une acc´l´ration du processus d’ex´cution e e u ee e d’un programme (fonctionnement selon le principe du pipe-line). Le microprocesseur 8086 contient 14 registres r´partis en 4 groupes : e • Registres g´n´raux : 4 registres sur 16 bits. e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 28 AX = (AH,AL) ; BX = (BH,BL) ; CX = (CH,CL) ; DX = (DH,DL). Chapitre 4 - Le microprocesseur Intel 8086 Ils peuvent ˆtre ´galement consid´r´s comme 8 registres sur 8 bits. Ils servent a contee e ee ` nir temporairement des donn´es. Ce sont des registres g´n´raux mais ils peuvent e e e ˆtre utilis´s pour des op´rations particuli`res. Exemple : AX = accumulateur, CX e e e e = compteur. • Registres de pointeurs et d’index : 4 registres sur 16 bits. Pointeurs : SP : Stack Pointer, pointeur de pile (la pile est une zone de sauvegarde de donn´es en cours d’ex´cution d’un programme) ; e e BP : Base Pointer, pointeur de base, utilis´ pour adresser des donn´es sur e e la pile. Index : SI : Source Index ; DI : Destination Index. Ils sont utilis´s pour les transferts de chaˆ e ınes d’octets entre deux zones m´moire. e Les pointeurs et les index contiennent des adresses de cases m´moire. e • Pointeur d’instruction et indicateurs (flags) : 2 registres sur 16 bits. Pointeur d’instruction : IP, contient l’adresse de la prochaine instruction a ` ex´cuter. e Flags : 15 14 13 12 O 11 D 10 I T 9 8 S 7 Z 6 A 5 4 P 3 2 C 1 0 CF : indicateur de retenue (carry) ; PF : indicateur de parit´ ; e AF : indicateur de retenue auxiliaire ; ZF : indicateur de z´ro ; e SF : indicateur de signe ; TF : indicateur d’ex´cution pas ` pas (trap) ; e a IF : indicateur d’autorisation d’interruption ; DF : indicateur de d´cr´mentation ; e e OF : indicateur de d´passement (overflow). e • Registres de segments : 4 registres sur 16 bits. CS : Code Segment, registre de segment de code ; ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 4.5 - Gestion de la m´moire par le 8086 e 29 DS : Data Segment, registre de segment de donn´es ; e SS : Stack Segment, registre de segment de pile ; ES : Extra Segment, registre de segment suppl´mentaire pour les donn´es ; e e Les registres de segments, associ´s aux pointeurs et aux index, permettent au mie croprocesseur 8086 d’adresser l’ensemble de la m´moire. e 4.5 Gestion de la m´moire par le 8086 e L’espace m´moire adressable par le 8086 est de 220 = 1 048 576 octets = 1 Mo (20 bits e d’adresses). Cet espace est divis´ en segments. Un segment est une zone m´moire de e e 64 Ko (65 536 octets) d´finie par son adresse de d´part qui doit ˆtre un multiple de 16. e e e Dans une telle adresse, les 4 bits de poids faible sont a z´ro. On peut donc repr´senter ` e e l’adresse d’un segment avec seulement ses 16 bits de poids fort, les 4 bits de poids faible ´tant implicitement ` 0. e a Pour d´signer une case m´moire parmi les 216 = 65 536 contenues dans un segment, il e e suffit d’une valeur sur 16 bits. Ainsi, une case m´moire est rep´r´e par le 8086 au moyen de deux quantit´s sur 16 bits : e ee e • l’adresse d’un segment ; • un d´placement ou offset (appel´ aussi adresse effective) dans ce segment. e e Cette m´thode de gestion de la m´moire est appel´e segmentation de la m´moire. e e e e 1 Mo FFFFFH un segment (64 Ko) case mémoire offset adresse multiple de 16 0 00000H La donn´e d’un couple (segment,offset) d´finit une adresse logique, not´e sous la forme e e e segment : offset. L’adresse d’une case m´moire donn´e sous la forme d’une quantit´ sur 20 bits (5 digits e e e hexa) est appel´e adresse physique car elle correspond a la valeur envoy´e r´ellement e ` e e sur le bus d’adresses A0 - A19. ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 30 Chapitre 4 - Le microprocesseur Intel 8086 Correspondance entre adresse logique et adresse physique : 16 bits segment 20 bits + offset 4 bits 0000 16 bits adresse physique 20 bits Ainsi, l’adresse physique se calcule par l’expression : adresse physique = 16 × segment + offset car le fait d’injecter 4 z´ros en poids faible du segment revient a effectuer un d´calage de e ` e 4 positions vers la gauche, c’est a dire une multiplication par 24 = 16. ` A un instant donn´, le 8086 a acc`s ` 4 segments dont les adresses se trouvent dans les e e a registres de segment CS, DS, SS et ES. Le segment de code contient les instructions du programme, le segment de donn´es contient les donn´es manipul´es par le programme, le e e e segment de pile contient la pile de sauvegarde et le segment suppl´mentaire peut aussi e contenir des donn´es. e Le registre CS est associ´ au pointeur d’instruction IP, ainsi la prochaine instruction a e ` ex´cuter se trouve a l’adresse logique CS : IP. e ` 1 Mo FFFFFH instruction à exécuter segment de code CS : IP offset = IP CS : 0000H 0 ISET Rad`s e 00000H cours de microprocesseur ` HAGGEGE, 2003 4.5 - Gestion de la m´moire par le 8086 e 31 De mˆme, les registres de segments DS et ES peuvent ˆtre associ´s ` un registre d’index. e e e a Exemple : DS : SI, ES : DI. Le registre de segment de pile peut ˆtre associ´ aux registres e e de pointeurs : SS : SP ou SS : BP. M´moire accessible par le 8086 a un instant donn´ : e ` e 1 Mo extra segment FFFFFH ES : DI offset = DI ES : 0000H segment de pile SS : SP offset = SP SS : 0000H segment de données DS : SI offset = SI DS : 0000H segment de code 0 CS : IP offset = IP CS : 0000H 00000H Remarque : les segments ne sont pas n´cessairement distincts les uns des autres, ils e peuvent se chevaucher ou se recouvrir compl`tement. e 1 Mo segment de pile segment de données segment de code SS : 0000H DS : 0000H CS : 0000H 0 00000H FFFFFH 1 Mo segment de code, de données et de pile FFFFFH CS : 0000H DS : 0000H SS : 0000H 0 00000H Le nombre de segments utilis´ d´finit le mod`le m´moire du programme. e e e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 32 Chapitre 4 - Le microprocesseur Intel 8086 Contenu des registres apr`s un RESET du microprocesseur : e IP = 0000H CS = FFFFH DS = 0000H ES = 0000H SS = 0000H Puisque CS contient la valeur FFFFH et IP la valeur 0000H, la premi`re instruction e ex´cut´e par le 8086 se trouve donc a l’adresse logique FFFFH : 0000H, correspondant a e e ` ` l’adresse physique FFFF0H (bootstrap). Cette instruction est g´n´ralement un saut vers e e le programme principal qui initialise ensuite les autres registres de segment. 4.6 Le microprocesseur 8088 Le microprocesseur 8088 est identique au 8086 sauf que son bus de donn´es externe est e sur 8 bits au lieu de 16 bits, le bus de donn´es interne restant sur 16 bits. e Le 8088 a ´t´ produit par Intel apr`s le 8086 pour assurer la compatibilit´ avec des circuits ee e e p´riph´riques d´j` existant, fabriqu´s pour les microprocesseurs 8 bits 8080 et 8085. e e ea e Diff´rences avec le 8086 : e • les broches AD8 ` AD15 deviennent A8 a A15 (bus de donn´es sur 8 bits) ; a ` e • la broche BHE n’existe pas dans le 8088 car il n’y a pas d’octet de poids fort sur le bus de donn´es ; e e • la broche M/IO devient IO/M pour la compatibilit´ avec d’anciens circuits d’E/S. Au niveau de l’architecture interne, pas de diff´rences avec le 8086 sauf que la file d’attente e des instructions passe de 6 a 4 octets. ` ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 5 La programmation en assembleur du microprocesseur 8086 5.1 G´n´ralit´s e e e Chaque microprocesseur reconnait un ensemble d’instructions appel´ jeu d’instructions e (Instruction Set) fix´ par le constructeur. Pour les microprocesseurs classiques, le nombre e d’instructions reconnues varie entre 75 et 150 (microprocesseurs CISC : Complex Instruction Set Computer). Il existe aussi des microprocesseurs dont le nombre d’instructions est tr`s r´duit (microprocesseurs RISC : Reduced Instruction Set Computer) : entre 10 et e e 30 instructions, permettant d’am´liorer le temps d’ex´cution des programmes. e e Une instruction est d´finie par son code op´ratoire, valeur num´rique binaire difficile ` e e e a manipuler par l’ˆtre humain. On utilise donc une notation symbolique pour repr´senter e e les instructions : les mn´moniques. Un programme constitu´ de mn´moniques est appel´ e e e e programme en assembleur. Les instructions peuvent ˆtre class´es en groupes : e e • instructions de transfert de donn´es ; e • instructions arithm´tiques ; e • instructions logiques ; • instructions de branchement ... 5.2 Les instructions de transfert Elles permettent de d´placer des donn´es d’une source vers une destination : e e • registre vers m´moire ; e • registre vers registre ; • m´moire vers registre. e Remarque : le microprocesseur 8086 n’autorise pas les transferts de m´moire vers m´moire e e (pour ce faire, il faut passer par un registre interm´diaire). e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 34 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 Syntaxe : MOV destination,source Remarque : MOV est l’abbr´viation du verbe « to move » : d´placer. e e Il existe diff´rentes fa¸ons de sp´cifier l’adresse d’une case m´moire dans une instruction : e c e e ce sont les modes d’adressage. Exemples de modes d’adressage simples : • mov ax,bx : charge le contenu du registre BX dans le registre AX. Dans ce cas, le transfert se fait de registre a registre : adressage par registre ; ` • mov al,12H : charge le registre AL avec la valeur 12H. La donn´e est fournie e imm´diatement avec l’instruction : adressage imm´diat. e e • mov bl,[1200H] : transf`re le contenu de la case m´moire d’adresse effective (offset) e e 1200H vers le registre BL. L’instruction comporte l’adresse de la case m´moire o` e u se trouve la donn´e : adressage direct. L’adresse effective repr´sente l’offset de la e e case m´moire dans le segment de donn´es (segment dont l’adresse est contenue dans e e le registre DS) : segment par d´faut. e 1 Mo FFFFFH mov bl, 1200H BL segment de données DS : 1200H offset = 1200H DS : 0000H 0 00000H On peut changer le segment lors d’un adressage direct en ajoutant un pr´fixe de e segment, exemple : mov bl,es :[1200H]. On parle alors de for¸age de segment. c 1 Mo FFFFFH mov bl, es : 1200H BL extra segment ES : 1200H offset = 1200H ES : 0000H 0 00000H ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.2 - Les instructions de transfert 35 Remarque : dans le cas de l’adressage imm´diat de la m´moire, il faut indiquer le format e e de la donn´e : octet ou mot (2 octets) car le microprocesseur 8086 peut manipuler des e donn´es sur 8 bits ou 16 bits. Pour cela, on doit utiliser un sp´cificateur de format : e e • mov byte ptr [1100H],65H : transf`re la valeur 65H (sur 1 octet) dans la case e m´moire d’offset 1100H ; e • mov word ptr [1100H],65H : transf`re la valeur 0065H (sur 2 octets) dans les cases e m´moire d’offset 1100H et 1101H. e mov byte ptr 1100H , 65H mov word ptr 1100H , 65H 1100H 65H 1 octet 1101H 1100H 00H 65H 2 octets Remarque : les microprocesseurs Intel rangent l’octet de poids faible d’une donn´e sur e plusieurs octets ` l’adresse la plus basse (format Little Endian). a Modes d’adressage ´volu´s : e e • adressage bas´ : l’offset est contenu dans un registre de base BX ou BP. e Exemples : mov al,[bx] : transf`re la donn´e dont l’offset est contenu dans le registre de e e base BX vers le registre AL. Le segment associ´ par d´faut au registre BX est e e le segment de donn´es : on dit que l’adressage est bas´ sur DS ; e e mov al,[bp] : le segment par d´faut associ´ au registre de base BP est le e e segment de pile. Dans ce cas, l’adressage est bas´ sur SS. e 1 Mo FFFFFH mov al, bx AL segment de données DS : BX offset = BX DS : 0000H segment de pile SS : BP offset = BP SS : 0000H 1 Mo FFFFFH mov al, bp AL 0 00000H 0 00000H • adressage index´ : semblable ` l’adressage bas´, sauf que l’offset est contenu dans e a e un registre d’index SI ou DI, associ´s par d´faut au segment de donn´es. e e e Exemples : mov al,[si] : charge le registre AL avec le contenu de la case m´moire dont e l’offset est contenu dans SI ; ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 36 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 mov [di],bx : charge les cases m´moire d’offset DI et DI + 1 avec le contenu e du registre BX. Remarque : une valeur constante peut ´ventuellement ˆtre ajout´e aux registres de base e e e ou d’index pour obtenir l’offset. Exemple : mov [si+100H],ax qui peut aussi s’´crire e mov [si][100H],ax ou encore mov 100H[si],ax Les modes d’adressage bas´s ou index´s permettent la manipulation de tableaux rang´s e e e en m´moire. Exemple : e mov mov mov mov si,0 word ptr table[si],1234H si,2 word ptr table[si],5678H Dans cet exemple, table repr´sente l’offset du premier ´l´ment du tableau et le registre e ee SI joue le rˆle d’indice de tableau : o 56H DS : table SI DS : table 0 78H 12H 34H • adressage bas´ et index´ : l’offset est obtenu en faisant la somme d’un registre e e de base, d’un registre d’index et d’une valeur constante. Exemple : mov ah,[bx+si+100H] Ce mode d’adressage permet l’adressage de structures de donn´es complexes : mae trices, enregistrements, ... Exemple : mov bx,10 mov si,15 mov byte ptr matrice[bx][si],12H Dans cet exemple, BX et SI jouent respectivement le rˆle d’indices de ligne et de o colonne dans la matrice. ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.3 - Les instructions arithm´tiques e 37 5.3 Les instructions arithm´tiques e Les instructions arithm´tiques de base sont l’addition, la soustraction, la multiplie cation et la division qui incluent diverses variantes. Plusieurs modes d’adressage sont possibles. Addition : ADD op´rande1,op´rande2 e e L’op´ration effectu´e est : op´rande1 ← op´rande1 + op´rande2. e e e e e Exemples : • add ah,[1100H] : ajoute le contenu de la case m´moire d’offset 1100H a l’accumue ` lateur AH (adressage direct) ; • add ah,[bx] : ajoute le contenu de la case m´moire point´e par BX ` l’accumulateur e e a AH (adressage bas´) ; e • add byte ptr [1200H],05H : ajoute la valeur 05H au contenu de la case m´moire e d’offset 1200H (adressage imm´diat). e Soustraction : SUB op´rande1,op´rande2 e e L’op´ration effectu´e est : op´rande1 ← op´rande1 − op´rande2. e e e e e Multiplication : MUL op´rande, o` op´rande est un registre ou une case m´moire. e u e e Cette instruction effectue la multiplication du contenu de AL par un op´rande sur 1 octet e ou du contenu de AX par un op´rande sur 2 octets. Le r´sultat est plac´ dans AX si les e e e donn´es ` multiplier sont sur 1 octet (r´sultat sur 16 bits), dans (DX,AX) si elles sont sur e a e 2 octets (r´sultat sur 32 bits). e Exemples : • mov al,51 mov bl,32 mul bl → AX = 51 × 32 • mov ax,4253 mov bx,1689 mul bx → (DX, AX) = 4253 × 1689 • mov al,43 mov byte ptr [1200H],28 mul byte ptr [1200H] → AX = 43 × 28 • mov ax,1234 mov word ptr [1200H],5678 mul word ptr [1200H] → (DX, AX) = 1234 × 5678 Division : DIV op´rande, o` op´rande est un registre ou une case m´moire. e u e e Cette instruction effectue la division du contenu de AX par un op´rande sur 1 octet ou le e contenu de (DX,AX) par un op´rande sur 2 octets. R´sultat : si l’op´rande est sur 1 octet, e e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 38 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 alors AL = quotient et AH = reste ; si l’op´rande est sur 2 octets, alors AX = quotient e et DX = reste. Exemples : • mov ax,35 mov bl,10 div bl → AL = 3 (quotient) et AH = 5 (reste) • mov dx,0 mov ax,1234 mov bx,10 div bx → AX = 123 (quotient) et DX = 4 (reste) Autres instructions arithm´tiques : e • ADC : addition avec retenue ; • SBB : soustraction avec retenue ; • INC : incr´mentation d’une unit´ ; e e • DEC : d´cr´mentation d’une unit´ ; e e e • IMUL : multiplication sign´e ; e • IDIV : division sign´e. e 5.4 Les instructions logiques Ce sont des instructions qui permettent de manipuler des donn´es au niveau des bits. Les e op´rations logiques de base sont : e • ET ; • OU ; • OU exclusif ; • compl´ment ` 1 ; e a • compl´ment ` 2 ; e a • d´calages et rotations. e Les diff´rents modes d’adressage sont disponibles. e ET logique : AND op´rande1,op´rande2 e e L’op´ration effectu´e est : op´rande1 ← op´rande1 ET op´rande2. e e e e e Exemple : mov al,10010110B mov bl,11001101B and al, bl ISET Rad`s e → AL = 1 0 0 1 0 1 1 0 BL = 1 1 0 0 1 1 0 1 AL = 1 0 0 0 0 1 0 0 ` HAGGEGE, 2003 cours de microprocesseur 5.4 - Les instructions logiques Application : masquage de bits pour mettre a z´ro certains bits dans un mot. ` e Exemple : masquage des bits 0, 1, 6 et 7 dans un octet : 7 6 5 4 3 2 1 0 39 0 1 0 1 0 1 1 1 0 0 1 1 1 1 0 0 ← masque 0 0 0 1 0 1 0 0 OU logique : OR op´rande1,op´rande2 e e L’op´ration effectu´e est : op´rande1 ← op´rande1 OU op´rande2. e e e e e Application : mise ` 1 d’un ou plusieurs bits dans un mot. a Exemple : dans le mot 10110001B on veut mettre a 1 les bits 1 et 3 sans modifier les ` autres bits. 7 6 5 4 3 2 1 0 1 0 1 0 0 0 1 0 1 1 0 0 0 1 0 1 0 1 0 ← masque 1 1 0 1 1 Les instructions correspondantes peuvent s’´crire : e mov ah,10110001B or ah,00001010B Compl´ment ` 1 : NOT op´rande e a e L’op´ration effectu´e est : op´rande ← op´rande. e e e e Exemple : mov al,10010001B → AL = 10010001B = 01101110B not al Compl´ment ` 2 : NEG op´rande e a e L’op´ration effectu´e est : op´rande ← op´rande + 1. e e e e Exemple : mov al,25 mov bl,12 → AL = 25 + (−12) = 13 neg bl add al,bl OU exclusif : XOR op´rande1,op´rande2 e e L’op´ration effectu´e est : op´rande1 ← op´rande1 ⊕ op´rande2. e e e e e Exemple : mise ` z´ro d’un registre : a e mov al,25 → AL = 0 xor al,al Instructions de d´calages et de rotations : ces instructions d´placent d’un certain e e nombre de positions les bits d’un mot vers la gauche ou vers la droite. Dans les d´calages, les bits qui sont d´plac´s sont remplac´s par des z´ros. Il y a les e e e e e d´calages logiques (op´rations non sign´es) et les d´calages arithm´tiques (op´rations e e e e e e sign´es). e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 40 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 Dans les rotations, les bits d´plac´s dans un sens sont r´inject´s de l’autre cˆt´ du mot. e e e e oe D´calage logique vers la droite (Shift Right) : SHR op´rande,n e e Cette instruction d´cale l’op´rande de n positions vers la droite. e e Exemple : mov al,11001011B shr al,1 avant 1 1 0 0 1 0 1 1 CF 1 après 0 1 1 0 0 1 0 1 → entr´e d’un 0 a la place du bit de poids fort ; le bit sortant passe a travers l’indicateur e ` ` de retenue CF. Remarque : si le nombre de bits ` d´caler est sup´rieur a 1, ce nombre doit ˆtre plac´ a e e ` e e dans le registre CL ou CX. Exemple : d´calage de AL de trois positions vers la droite : e mov cl,3 shr al,cl D´calage logique vers la gauche (Shift Left) : SHL op´rande,n e e Cette instruction d´cale l’op´rande de n positions vers la droite. e e Exemple : mov al,11001011B shl al,1 avant 1 CF 1 1 0 0 1 0 1 1 après 1 0 0 1 0 1 1 0 → entr´e d’un 0 ` la place du bit de poids faible ; le bit sortant passe a travers l’indicateur e a ` de retenue CF. Mˆme remarque que pr´c´demment si le nombre de positions a d´caler est sup´rieur a 1. e e e ` e e ` D´calage arithm´tique vers la droite : SAR op´rande,n e e e Ce d´calage conserve le bit de signe bien que celui-ci soit d´cal´. e e e Exemple : mov al,11001011B sar al,1 avant 1 1 0 0 1 0 1 1 CF 1 après 1 1 1 0 0 1 0 1 → le bit de signe est r´inject´. e e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.4 - Les instructions logiques D´calage arithm´tique vers la gauche : SAR op´rande,n e e e Identique au d´calage logique vers la gauche. e Applications des instructions de d´calage : e • cadrage a droite d’un groupe de bits. ` Exemple : on veut avoir la valeur du quartet de poids fort du registre AL : mov al,11001011B mov cl,4 shr al,cl → AL = 00001100B 41 • test de l’´tat d’un bit dans un mot. e Exemple : on veut d´terminer l’´tat du bit 5 de AL : e e mov cl,6 shr al,cl ou mov cl,3 shl al,cl → avec un d´calage de 6 positions vers la droite ou 4 positions vers la gauche, le e bit 5 de AL est transf´r´ dans l’indicateur de retenue CF. Il suffit donc de tester cet ee indicateur. • multiplication ou division par une puissance de 2 : un d´calage a droite revient a e ` ` faire une division par 2 et un d´calage a gauche, une multiplication par 2. e ` Exemple : mov al,48 mov cl,3 shr al,cl → AL = 48/23 = 6 Rotation ` droite (Rotate Right) : ROR op´rande,n a e Cette instruction d´cale l’op´rande de n positions vers la droite et r´injecte par la gauche e e e les bits sortant. Exemple : mov al,11001011B ror al,1 avant 1 1 0 0 1 0 1 1 CF 1 après 1 1 1 0 0 1 0 1 → r´injection du bit sortant qui est copi´ dans l’indicateur de retenue CF. e e Rotation ` gauche (Rotate Left) : ROL op´rande,n a e Cette instruction d´cale l’op´rande de n positions vers la gauche et r´injecte par la droite e e e les bits sortant. Exemple : mov al,11001011B rol al,1 ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 42 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 avant 1 CF 1 1 0 0 1 0 1 1 après 1 0 0 1 0 1 1 1 → r´injection du bit sortant qui est copi´ dans l’indicateur de retenue CF. e e Rotation ` droite avec passage par l’indicateur de retenue (Rotate Right through a Carry) : RCR op´rande,n e Cette instruction d´cale l’op´rande de n positions vers la droite en passant par l’indicateur e e de retenue CF. Exemple : mov al,11001011B rcr al,1 avant valeur précédente de CF 1 1 0 0 1 0 1 1 CF 1 après x 1 1 0 0 1 0 1 → le bit sortant par la droite est copi´ dans l’indicateur de retenue CF et la valeur e pr´c´dente de CF est r´inject´e par la gauche. e e e e Rotation ` gauche avec passage par l’indicateur de retenue (Rotate Left through a Carry) : RCL op´rande,n e Cette instruction d´cale l’op´rande de n positions vers la gauche en passant par l’indicateur e e de retenue CF. Exemple : mov al,11001011B rcl al,1 avant 1 CF 1 1 0 0 1 0 1 1 valeur précédente de CF après 1 0 0 1 0 1 1 x → le bit sortant par la gauche est copi´ dans l’indicateur de retenue CF et la valeur e pr´c´dente de CF est r´inject´e par la droite. e e e e 5.5 Les instructions de branchement Les instructions de branchement (ou saut) permettent de modifier l’ordre d’ex´cution des e instructions du programme en fonction de certaines conditions. Il existe 3 types de saut : • saut inconditionnel ; • sauts conditionnels ; • appel de sous-programmes. ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.5 - Les instructions de branchement 43 Instruction de saut inconditionnel : JMP label Cette instruction effectue un saut (jump) vers le label sp´cifi´. Un label (ou ´tiquette) e e e est une repr´sentation symbolique d’une instruction en m´moire : e e . . ← instructions pr´c´dant le saut e e . jmp suite . . . ← instructions suivant le saut (jamais ex´cut´es) e e suite : Exemple : boucle : inc ax dec bx jmp boucle → boucle infinie ... ← instruction ex´cut´e apr`s le saut e e e Remarque : l’instruction JMP ajoute au registre IP (pointeur d’instruction) le nombre d’octets (distance) qui s´pare l’instruction de saut de sa destination. Pour un saut en e arri`re, la distance est n´gative (cod´e en compl´ment ` 2). e e e e a Instructions de sauts conditionnels : Jcondition label Un saut conditionnel n’est ex´cut´ que si une certaine condition est satisfaite, sinon e e l’ex´cution se poursuit s´quentiellement ` l’instruction suivante. e e a La condition du saut porte sur l’´tat de l’un (ou plusieurs) des indicateurs d’´tat (flags) e e du microprocesseur : instruction nom condition JZ label Jump if Zero saut si ZF = 1 JNZ label Jump if Not Zero saut si ZF = 0 JE label Jump if Equal saut si ZF = 1 JNE label Jump if Not Equal saut si ZF = 0 JC label Jump if Carry saut si CF = 1 JNC label Jump if Not Carry saut si CF = 0 JS label Jump if Sign saut si SF = 1 JNS label Jump if Not Sign saut si SF = 0 JO label Jump if Overflow saut si OF = 1 JNO label Jump if Not Overflow saut si OF = 0 JP label Jump if Parity saut si PF = 1 JNP label Jump if Not Parity saut si PF = 0 Remarque : les indicateurs sont positionn´s en fonction du r´sultat de la derni`re e e e op´ration. e Exemple : . . ← instructions pr´c´dant le saut conditionnel e e . jnz suite . . . ← instructions ex´cut´es si la condition ZF = 0 est v´rifi´e e e e e suite : ` HAGGEGE, 2003 ... ← instruction ex´cut´e ` la suite du saut e e a cours de microprocesseur ISET Rad`s e 44 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 Remarque : il existe un autre type de saut conditionnel, les sauts arithm´tiques. Ils e suivent en g´n´ral l’instruction de comparaison : CMP op´rande1,op´rande2 e e e e condition = > < = Exemple : cmp ax,bx jg superieur jl inferieur ... . . . ... nombres sign´s e JEQ label JG label JL label JNE label nombres non sign´s e JEQ label JA label JB label JNE label superieur : inferieur : Exemple d’application des instructions de sauts conditionnels : on veut additionner deux nombres sign´s N1 et N2 se trouvant respectivement aux offsets 1100H et 1101H. Le e r´sultat est rang´ ` l’offset 1102H s’il est positif, a l’offset 1103H s’il est n´gatif et ` e e a ` e a l’offset 1104H s’il est nul : Organigramme : début Programme : N1 + N2 résultat >0 non oui résultat =0 non ranger le résultat à l'offset 1102H oui ranger le résultat à l'offset 1104H ranger le résultat à l'offset 1103H negatif : nul : fin : mov add js jz mov jmp mov jmp mov hlt al,[1100H] al,[1101H] negatif nul [1102H],al fin [1103H],al fin [1104H],al fin Appel de sous-programmes : pour ´viter la r´p´tition d’une mˆme s´quence d’inse e e e e tructions plusieurs fois dans un programme, on r´dige la s´quence une seule fois en lui e e attribuant un nom (au choix) et on l’appelle lorsqu’on en a besoin. Le programme apISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.5 - Les instructions de branchement 45 pelant est le programme principal. La s´quence appel´e est un sous-programme ou e e proc´dure. e Ecriture d’un sous-programme : nom sp PROC . . . ret ENDP ← instructions du sous-programme ← instruction de retour au programme principal nom sp Remarque : une proc´dure peut ˆtre de type NEAR si elle se trouve dans le mˆme segment e e e ou de type FAR si elle se trouve dans un autre segment. PROC NEAR Exemple : ss prog1 PROC FAR ss prog2 Appel d’un sous-programme par le programme principal : CALL proc´dure e . . . ← instructions pr´c´dant l’appel au sous-programme e e call nom sp . . . ← appel au sous-programme ← instructions ex´cut´es apr`s le retour au programme principal e e e Lors de l’ex´cution de l’instruction CALL, le pointeur d’instruction IP est charg´ avec e e l’adresse de la premi`re instruction du sous-programme. Lors du retour au programme e appelant, l’instruction suivant le CALL doit ˆtre ex´cut´e, c’est-`-dire que IP doit ˆtre e e e a e recharg´ avec l’adresse de cette instruction. e programme principal valeur de IP avant l'appel au sous-programme valeur de IP au retour du sous-programme 1000H 1002H RE T sousprogramme 2000H CA LL valeur de IP après l'appel au sous-programme 2100H valeur de IP à la fin du sous-programme Avant de charger IP avec l’adresse du sous-programme, l’adresse de retour au programme principal, c’est-`-dire le contenu de IP, est sauvegard´e dans une zone m´moire particuli`re a e e e appel´e pile. Lors de l’ex´cution de l’instruction RET, cette adresse est r´cup´r´e ` partir e e e ee a de la pile et recharg´e dans IP, ainsi le programme appelant peut se poursuivre. e Fonctionnement de la pile : la pile est une zone m´moire fonctionnant en mode LIFO e (Last In First Out : dernier entr´, premier sorti). Deux op´rations sont possibles sur la e e pile : • empiler une donn´e : placer la donn´e au sommet de la pile ; e e • d´piler une donn´e : lire la donn´e se trouvant au sommet de la pile. e e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 46 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 Le sommet de la pile est rep´r´ par un registre appel´ pointeur de pile (SP : Stack ee e Pointer) qui contient l’adresse de la derni`re donn´e empil´e. e e e La pile est d´finie dans le segment de pile dont l’adresse de d´part est contenue dans e e le registre SS. 1 Mo sens de croissance de la pile FFFFFH sommet de la pile SS : SP SS : 0000H segment de pile sens de croissance du programme 0 segment de code CS : 0000H 00000H Remarque : la pile et le programme croissent en sens inverse pour diminuer le risque de collision entre le code et la pile dans le cas o` celle-ci est plac´e dans le mˆme segment u e e que le code (SS = CS). Lors de l’appel a un sous-programme, l’adresse de retour au programme appelant (contenu ` de IP) est empil´e et le pointeur de pile SP est automatiquement d´cr´ment´. Au retour e e e e du sous-programme, le pointeur d’instruction IP est recharg´ avec la valeur contenue e sommet de la pile et SP est incr´ment´. e e 1 Mo adresse de retour au sous-programme (2 octets) FFFFFH SS : FFFFH segment de pile SS : SP SS : SP décrémentation de SP de 2 unités SS : 0000H 0 00000H La pile peut ´galement ´galement servir a sauvegarder le contenu de registres qui ne sont e e ` pas automatiquement sauvegard´s lors de l’appel a un sous programme : e ` • instruction d’empilage : PUSH op´rande e • instruction de d´pilage : POP op´rande e e o` op´rande est un registre ou une donn´e sur 2 octets (on ne peut empiler que des mots u e e de 16 bits). Exemple : ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.5 - Les instructions de branchement push ax push bx push [1100H] . . . pop [1100H] pop bx pop ax ; empilage du registre AX ... ; ... du registre BX ... ; ... et de la case m´moire 1100H-1101H e ; d´pilage dans l’ordre inverse de l’empilage e 47 Remarque : la valeur de SP doit ˆtre initialis´e par le programme principal avant de e e pouvoir utiliser la pile. Utilisation de la pile pour le passage de param`tres : pour transmettre des pae ram`tres ` une proc´dure, on peut les placer sur la pile avant l’appel de la proc´dure, puis e a e e celle-ci les r´cup`re en effectuant un adressage bas´ de la pile en utilisant le registre BP. e e e Exemple : soit une proc´dure effectuant la somme de deux nombres et retournant le e r´sultat dans le registre AX : e • programme principal : mov ax,200 push ax mov ax,300 push ax call somme ; empilage du premier param`tre e ; empilage du deuxi`me param`tre e e ; appel de la proc´dure somme e • proc´dure somme : e somme proc push bp ; mov bp,sp ; mov ax,[bp+4] ; add ax,[bp+6] ; pop bp ; ret 4 ; somme endp sauvegarde de BP faire pointer BP sur le sommet de la pile r´cup´ration du deuxi`me param`tre e e e e addition au premier param`tre e restauration de l’ancienne valeur de BP retour et d´pilage des param`tres e e L’instruction ret 4 permet de retourner au programme principal et d’incr´menter le e pointeur de pile de 4 unit´s pour d´piler les param`tres afin de remettre la pile dans son e e e ´tat initial. e Etat de la pile : avant CALL SS : FFFFH segment de pile 2 octets SS : SP (sommet de la pile) segment de pile après CALL SS : FFFFH segment de pile SS : SP SS : BP+6 SS : BP+4 SS : SP = SS : BP SS : 0000H retour de la pile à son état initial après POP BP et RET 4 SS : FFFFH 2 octets 2 octets 2 octets 2 octets paramètre 1 (200) paramètre 2 (300) adresse de retour ancienne valeur de BP SS : 0000H SS : 0000H ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 48 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 5.6 M´thodes de programmation e Etapes de la r´alisation d’un programme : e • D´finir le probl`me ` r´soudre : que faut-il faire exactement ? e e a e • D´terminer des algorithmes, des organigrammes : comment faire ? Par quoi come mencer, puis poursuivre ? • R´diger le programme (code source) : e – utilisation du jeu d’instructions (mn´moniques) ; e – cr´ation de documents explicatifs (documentation). e • Tester le programme en r´el ; e • Corriger les erreurs (bugs) ´ventuelles : d´boguer le programme puis refaire des e e tests jusqu’` obtention d’un programme fonctionnant de mani`re satisfaisante. a e Langage machine et assembleur : • Langage machine : codes binaires correspondant aux instructions ; • Assembleur : logiciel de traduction du code source ´crit en langage assembleur e (mn´moniques). e R´alisation pratique d’un programme : e • R´daction du code source en assembleur a l’aide d’un ´diteur (logiciel de traitement e ` e de texte ASCII) : – edit sous MS-DOS, – notepad (bloc-note) sous Windows, • Assemblage du code source (traduction des instructions en codes binaires) avec un assembleur : – MASM de Microsoft, – TASM de Borland, – A86 disponible en shareware sur Internet, ... pour obtenir le code objet : code machine ex´cutable par le microprocesseur ; e • Chargement en m´moire centrale et ex´cution : rˆle du syst`me d’exploitation (ore e o e dinateur) ou d’un moniteur (carte de d´veloppement ` base de microprocesseur). e a Pour la mise au point (d´bogage) du programme, on peut utiliser un programme d’aide e ` la mise au point (comme DEBUG sous MS-DOS) permettant : a • l’ex´cution pas ` pas ; e a • la visualisation du contenu des registres et de la m´moire ; e • la pose de points d’arrˆt ... e Structure d’un fichier source en assembleur : pour faciliter la lisibilit´ du code e source en assembleur, on le r´dige sous la forme suivante : e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 5.6 - M´thodes de programmation e labels label1 : . . . sous prog1 . . . sous prog1 . . . instructions mov ax,60H . . . proc near . . . endp . . . commentaires ; ceci est un commentaire ... . . . ; sous-programme . . . 49 . . . Directives pour l’assembleur : • Origine du programme en m´moire : ORG offset e Exemple : org 1000H • D´finitions de constantes : nom constante EQU valeur e Exemple : escape equ 1BH • R´servation de cases m´moires : e e nom variable DB valeur initiale nom variable DW valeur initiale DB : Define Byte, r´servation d’un octet ; e DW : Define Word, r´servation d’un mot (2 octets). e Exemples : nombre1 db 25 nombre2 dw ? ; pas de valeur initiale buffer db 100 dup ( ?) ; r´servation d’une zone m´moire e e ; de 100 octets ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 50 Chapitre 5 - La programmation en assembleur du microprocesseur 8086 ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 6 Les interfaces d’entr´es/sorties e 6.1 D´finitions e Une interface d’entr´es/sorties est un circuit int´gr´ permettant au microprocesseur de e e e communiquer avec l’environnement ext´rieur (p´riph´riques) : clavier, ´cran, imprimante, e e e e modem, disques, processus industriel, ... Les interfaces d’E/S sont connect´es au microprocesseur a travers les bus d’adresses, de e ` donn´es et de commandes. e environnement extérieur calculateur périphérique 1 port 1 périphérique 2 port 2 microprocesseur interface 1 interface 2 données adresses commandes Les points d’acc`s aux interfaces sont appel´s ports. e e Exemples : interface interface parall`le e interface s´rie e ` HAGGEGE, 2003 port port parall`le e port s´rie e exemple de p´riph´rique e e imprimante modem ISET Rad`s e cours de microprocesseur 52 Chapitre 6 - Les interfaces d’entr´es/sorties e Sch´ma synoptique d’un circuit d’E/S : e D0 - Dn lignes de données microprocesseur A0 - Ap lignes d'adresses (p = 1 ou 2, en général) commandes de lecture/ écriture signal de selection de boîtier RD WR CS circuit d'E/S lignes d'E/S 6.2 Adressage des ports d’E/S Un circuit d’E/S poss`de des registres pour g´rer les ´changes avec les p´riph´riques : e e e e e • registres de configuration ; • registres de donn´es. e A chaque registre est assign´ une adresse : le microprocesseur acc`de ` un port d’E/S en e e a sp´cifiant l’adresse de l’un de ses registres. e Le microprocesseur peut voir les adresses des ports d’E/S de deux mani`res : e • adressage cartographique : les adresses des ports d’E/S appartiennent au mˆme e espace m´moire que les circuits m´moire (on dit que les E/S sont mapp´es en e e e m´moire) : e circuits d'E/S espace mémoire total adressable FFFFFH circuits mémoire 00000H Cons´quences : e – l’espace d’adressage des m´moires diminue ; e – l’adressage des ports d’E/S se fait avec une adresse de mˆme longueur (mˆme e e nombre de bits) que pour les cases m´moires ; e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 périphériques 6.3 - Gestion des ports d’E/S par le 8086 53 – toutes les instructions employ´es avec des cases m´moires peuvent ˆtre ape e e pliqu´es aux ports d’E/S : les mˆmes instructions permettent de lire et ´crire e e e dans la m´moire et les ports d’E/S, tous les modes d’adressage ´tant valables e e pour les E/S. • adressage ind´pendant : le microprocesseur consid`re deux espaces distincts : e e – l’espace d’adressage des m´moires ; e – l’espace d’adressage des ports d’E/S. C’est le cas du microprocesseur 8086 : FFFFFH 1 Mo circuits mémoire FFFFH 64 Ko 00000H espace mémoire espace E/S circuits d'E/S 0000H Cons´quences : e – contrairement a l’adressage cartographique, l’espace m´moire total adressable ` e n’est pas diminu´ ; e – l’adressage des port d’E/S peut se faire avec une adresse plus courte (nombre de bits inf´rieur) que pour les circuits m´moires ; e e – les instructions utilis´es pour l’acc`s ` la m´moire ne sont plus utilisables pour e e a e l’acc`s aux ports d’E/S : ceux-ci disposent d’instructions sp´cifiques ; e e – une mˆme adresse peut d´signer soit une case m´moire, soit un port d’E/S : le e e e microprocesseur doit donc fournir un signal permettant de diff´rencier l’adrese sage de la m´moire de l’adressage des ports d’E/S. e Remarque : l’adressage ind´pendant des ports d’E/S n’est possible que pour les microe processeurs poss´dant un signal permettant de diff´rencier l’adressage de la m´moire de e e e l’adressage des ports d’E/S ainsi que les instructions sp´cifiques pour l’acc`s aux ports e e d’E/S. Par contre, l’adressage cartographique est possible pour tous les microprocesseurs. 6.3 Gestion des ports d’E/S par le 8086 Le 8086 dispose d’un espace m´moire de 1 Mo (adresse d’une case m´moire sur 20 bits) e e et d’un espace d’E/S de 64 Ko (adresse d’un port d’E/S sur 16 bits). Le signal permettant de diff´rencier l’adressage de la m´moire de l’adressage des ports e e d’E/S est la ligne M/IO : • pour un acc`s ` la m´moire, M/IO = 1 ; e a e • pour un acc`s aux ports d’E/S, M/IO = 0. e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 54 Chapitre 6 - Les interfaces d’entr´es/sorties e Ce signal est utilis´ pour valider le d´codage d’adresse dans les deux espaces : e e décodeur 3 vers 8 A Y0 Y1 B Y2 C 74138 Y3 Y4 validation G2B G2A G1 bus d'adresses A B C Y5 Y6 Y7 Y0 Y1 Y2 74138 Y3 Y4 validation G2B G2A +5 V G1 Y5 Y6 Y7 bus d'adresses signaux de validation des circuits mémoire M/IO signaux de validation des circuits d'E/S Les instructions de lecture et d’´criture d’un port d’E/S sont respectivement les instruce a tions IN et OUT. Elles placent la ligne M/IO ` 0 alors que l’instruction MOV place celle-ci ` 1. a Lecture d’un port d’E/S : • si l’adresse du port d’E/S est sur un octet : IN AL,adresse : lecture d’un port sur 8 bits ; IN AX,adresse : lecture d’un port sur 16 bits. • si l’adresse du port d’E/S est sur deux octets : IN AL,DX : lecture d’un port sur 8 bits ; IN AX,DX : lecture d’un port sur 16 bits. o` le registre DX contient l’adresse du port d’E/S a lire. u ` Ecriture d’un port d’E/S : • si l’adresse du port d’E/S est sur un octet : OUT adresse,AL : ´criture d’un port sur 8 bits ; e OUT adresse,AX : ´criture d’un port sur 16 bits. e • si l’adresse du port d’E/S est sur deux octets : OUT DX,AL : ´criture d’un port sur 8 bits ; e OUT DX,AX : ´criture d’un port sur 16 bits. e o` le registre DX contient l’adresse du port d’E/S a ´crire. u `e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 6.4 - L’interface parall`le 8255 e Exemples : • lecture d’un port d’E/S sur 8 bits a l’adresse 300H : ` mov dx,300H in al,dx • ´criture de la valeur 1234H dans le port d’E/S sur 16 bits a l’adresse 49H : e ` mov ax,1234H out 49H,ax 55 6.4 L’interface parall`le 8255 e Le rˆle d’une interface parall`le est de transf´rer des donn´es du microprocesseur vers o e e e des p´riph´riques et inversement, tous les bits de donn´es ´tant envoy´s ou re¸us simule e e e e c tan´ment. e microprocesseur interface parallèle sortie de données en parallèle entrée de données en parallèle données adresses commandes Le 8255 est une interface parall`le programmable : elle peut ˆtre configur´e en entr´e e e e e et/ou en sortie par programme. Brochage du 8255 : PA3 PA2 PA1 PA0 RD CS GND A1 A0 PC7 PC6 PC5 PC4 PC0 PC1 PC2 PC3 PB0 PB1 PB2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 PA4 PA5 PA6 PA7 WR RESET D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB6 PB5 PB4 PB3 8255 ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 56 Sch´ma fonctionnel : e Chapitre 6 - Les interfaces d’entr´es/sorties e alimentation VCC RD lignes de contrôle WR A0 A1 RESET CS 4 D0 - D7 bus de données 8 8255 4 GND 8 port A (PA0 - PA7) port C haut (PC4 - PC7) port C bas (PC0 - PC3) port B (PB0 - PB7) Le 8255 contient 4 registres : • trois registres contenant les donn´es pr´sentes sur les ports A, B et C ; e e • un registre de commande pour la configuration des port A, B et C en entr´es et/ou e en sorties. Acc`s aux registres du 8255 : les lignes d’adresses A0 et A1 d´finissent les adresses e e des registres du 8255 : A1 A0 RD WR CS op´ration e 0 0 0 1 0 lecture du port A 0 1 0 1 0 lecture du port B 1 0 0 1 0 lecture du port C 0 0 1 0 0 ´criture du port A e 0 1 1 0 0 ´criture du port B e 1 0 1 0 0 ´criture du port C e 1 1 1 0 0 ´criture du registre de commande e X X X X 1 pas de transaction 1 1 0 1 0 ill´gal e X X 1 1 0 pas de transaction Remarque : le registre de commande est accessible uniquement en ´criture, la lecture de e ce registre n’est pas autoris´e. e Configuration du 8255 : les ports peuvent ˆtre configur´s en entr´es ou en sorties selon e e e le contenu du registre de commande. De plus le 8255 peut fonctionner selon 3 modes : mode 0, mode 1 ou mode 2. Le mode 0 est le plus simple : les ports sont configur´s en entr´es/sorties de base. Les e e donn´es ´crites dans les registres correspondants sont m´moris´es sur les lignes de sore e e e ties ; l’´tat des lignes d’entr´es est recopi´ dans les registres correspondants et n’est pas e e e m´moris´. e e Les modes 1 et 2 sont plus complexes. Ils sont utilis´s pour le dialogue avec des p´riph´riques e e e n´cessitant un asservissement. e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 groupe B groupe A 6.4 - L’interface parall`le 8255 e Structure du registre de commande : D7 D6 D5 D4 D3 D2 D1 D0 drapeau 1 = actif Groupe A sélection de mode : 00 = mode 0 01 = mode 1 1x = mode 2 port A 1 = entrée 0 = sortie port C haut 1 = entrée 0 = sortie Groupe B port C bas 1 = entrée 0 = sortie port B 1 = entrée 0 = sortie sélection de mode : 0 = mode 0 1 = mode 1 57 Connexion du 8255 sur les bus du 8086 : le bus de donn´es du 8255 est sur 8 bits e alors que celui du microprocesseur 8086 est sur 16 bits. On peut donc connecter le bus de donn´es du 8255 sur les lignes de donn´es de poids faible du 8086 (D0 - D7) ou sur celles e e de poids fort (D8 - D15). Une donn´e est envoy´e (ou re¸ue) par le microprocesseur 8086 : e e c • sur la partie faible du bus de donn´es lorsque l’adresse ` ´crire (ou a lire) est paire : e ae ` validation par A0 ; • sur la partie haute lorsque l’adresse est impaire : validation par BHE. e e e Ainsi l’un de ces deux signaux A0 ou BHE doit ˆtre utilis´ pour s´lectionner le 8255 : D0 - D7 ou D8 - D15 M/IO A3 - A15 validation décodeur d'adresses A0 ou BHE A1 A2 RD WR D0 . . 8255 . D7 RD WR CS A0 A1 Cons´quence : les adresses des registres du 8255 se trouvent a des adresses paires (validae ` tion par A0) ou impaires (validation par BHE). ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 58 Chapitre 6 - Les interfaces d’entr´es/sorties e Le d´codeur d’adresses d´termine l’adresse de base du 8255 ; les lignes A1 et A2 e e d´terminent les adresses des registres du 8255. e Exemple : connexion du 8255 sur la partie faible du bus de donn´es du 8086, avec d´codage e e d’adresses incomplet (les lignes d’adresses A3 - A15 ne sont pas toutes utilis´es) : e D0 . . 8255 . D7 RD WR RD WR CS A1 A2 A0 A1 D0 - D7 A8 A9 A10 A B C Y0 Y1 Y2 74138 Y3 Y4 validation M/IO +5 V G2B G2A G1 Y5 Y6 Y7 A0 D´termination de l’adresse du 8255 : e A15 X A14 X A13 X A12 X A11 X A10 0 A9 1 A8 1 A7 X A6 X A5 X A4 X A3 X A2 A1 A1 A0 A0 0 CS =0 adresse de base = 300H s´lection e de registre • A2 = 0 et A1 = 0 : adresse du port A = adresse de base + 0 = 300H ; • A2 = 0 et A1 = 1 : adresse du port B = adresse de base + 2 = 302H ; • A2 = 1 et A1 = 0 : adresse du port C = adresse de base + 4 = 304H ; • A2 = 1 et A1 = 1 : adresse du registre de commande = adresse de base + 6 = 306H. Remarque : le d´codage d’adresses ´tant incomplet, le 8255 apparaˆ dans plusieurs e e ıt plages d’adresses selon les valeurs des bits d’adresses non d´cod´s (A7 - A13 et A12 e e A15). Dans cet exemple, l’adresse de base 300H correspond a la premi`re adresse possible ` e (bits d’adresses non d´cod´s tous ´gaux a 0). e e e ` Remarque : si on veut que le 8255 poss`de des adresses cons´cutives (par exemple 300H, e e 301H, 302H et 303H), on peut utiliser le sch´ma suivant qui exploite tout le bus de donn´es e e (D0 - D15) du 8086 : ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 6.4 - L’interface parall`le 8255 e transmetteur bidirectionnel A 8286 DIR EN 8 D8 - D15 A 8286 DIR EN B B 8 D0 . . . D7 8255 59 8 D0 - D7 DT/R PA BHE PB M/IO A2- A15 validation décodeur d'adresses CS A1 A0 RD WR A1 A0 RD WR PC Exemple de programmation : soit le montage suivant : PA0 8086 D0 . D0 - D7 . 8255 . D7 adresse de base = 300H PA1 PA2 PB0 K0 K1 K2 0 1 0 1 0 1 LED On veut que la led s’allume lorsqu’on a la combinaison : K0 = 1 et K1 = 0 et K2 = 1. Programme : ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 60 portA portB portC controle equ equ equ equ mov mov out boucle : mov in and cmp jne mov jmp mov mov out jmp 300H 302H 304H 306H dx,controle al,90H dx,al dx,portA al,dx al,00000111B al,00000101B faux al,00000001B suite al,00000000B dx,portB dx,al boucle Chapitre 6 - Les interfaces d’entr´es/sorties e ; adresses des registres du 8255 ; initialisation du port A en entr´e e ; et du port B en sortie (mode 0) : ; controle = 10010000B = 90H ; lecture du port A ; ; ; ; ; ; ; masquage PA0, PA1 et PA2 test PA0 = 1, PA1 = 0 et PA2 = 1 non -> aller au label ‘‘faux’’ ... oui -> mettre PB0 a 1 ` et continuer au label ‘‘suite’’ ... mettre PB0 a 0 ` ecriture du port B ´ faux : suite : ; retourner lire le port A 6.5 L’interface s´rie 8250 e TxD : émission microprocesseur interface série RxD : réception Une interface s´rie permet d’´changer des donn´es entre le microprocesseur et un p´riph´rique e e e e e bit par bit. données adresses commandes Avantage : diminution du nombre de connexions (1 fil pour l’´mission, 1 fil pour la e r´ception). e Inconv´nient : vitesse de transmission plus faible que pour une interface parall`le. e e Il existe deux types de transmissions s´ries : e • asynchrone : chaque octet peut ˆtre ´mis ou re¸u sans dur´e d´termin´e entre un e e c e e e octet et le suivant ; • synchrone : les octets successifs sont transmis par blocs s´par´s par des octets de e e synchronisation. La transmission asynchrone la plus utilis´e est celle qui est d´finie par la norme RS232. e e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 6.5 - L’interface s´rie 8250 e 61 Exemple : transmission du caract`re ’E’ (code ASCII 45H = 01000101B) sous forme s´rie e e selon la norme RS232 : bit de start +9 à +15 V LSB -9 à -15 V 1 0 1 0 0 0 1 0 MSB bit de bits de parité stop bits de données durée d'un bit = T • l’´tat 1 correspond a une tension n´gative comprise entre −9 et −15 V, l’´tat 0 a e ` e e ` une tension positive comprise entre +9 et +15 V. Au repos, la ligne est a l’´tat 1 ` e (tension n´gative) ; e • le bit de start marque le d´but de la transmission du caract`re ; e e • les bits de donn´es sont transmis l’un apr`s l’autre en commen¸ant par le bit de e e c poids faible. Ils peuvent ˆtre au nombre de 5, 6, 7 ou 8. Chaque bit est maintenu sur la e ligne pendant une dur´e d´termin´e T. L’inverse de cette dur´e d´finit la fr´quence e e e e e e de bit = nombre de bits par secondes = vitesse de transmission. Les vitesses normalis´es sont : 50, 75, 110, 134.5, 150, 300, 600, 1200, 2400, 4800, 9600 bits/s ; e • le bit de parit´ (facultatif) est un bit suppl´mentaire dont la valeur d´pend du e e e nombre de bits de donn´es ´gaux a 1. Il est utilis´ pour la d´tection d’erreurs de e e ` e e transmission ; • les bits de stop (1, 1.5 ou 2) marquent la fin de la transmission du caract`re. e Principe d’une interface s´rie : e 8 D0 - D7 registre de données émission registre à décalage émission TxD registre de données réception bus de données interne registres de configuration et d'état registre à décalage réception RxD logique de synchronisation + contrôle de parité . . . signaux de controle horloge ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 62 Chapitre 6 - Les interfaces d’entr´es/sorties e Un circuit int´gr´ d’interface s´rie asynchrone s’appelle un UART : Universal Asynchroe e e nous Receiver Transmitter) ; une interface s´rie synchrone/asynchrone est un USART. e Exemples d’interfaces s´ries : e • 8251 (Intel) ; • 8250 (National Semiconductor) ; • 6850 (Motorola). Connexion de deux ´quipements par une liaison s´rie RS232 : les ´quipements e e e qui peuvent ˆtre connect´s ` travers une liaison s´rie RS232 sont de deux types : e e a e • les ´quipements terminaux de donn´es (DTE : Data Terminal Equipment) qui e e g´n`rent les donn´es ` transmettre, exemple : un ordinateur ; e e e a • les ´quipements de communication de donn´es (DCE : Data Communication e e Equipment) qui transmettent les donn´es sur les lignes de communication, exemple : e un modem. Pour connecter ces ´quipements, on utilise des connecteurs normalis´s DB9 ou DB25 : e e 1 6 2 7 3 8 4 9 5 1 14 2 15 3 16 4 17 5 18 6 19 7 20 8 21 9 22 10 23 11 24 12 25 13 DB9 mâle DB25 mâle Diff´rents signaux sont transport´s par ces connecteurs : e e signal no broche DB9 TxD 3 RxD 2 RTS 7 CTS 8 DTR 4 DSR 6 DCD 1 RI 9 GND 5 no broche DB25 2 3 4 5 20 6 8 22 7 sens DTE DCE Transmit Data sortie entr´e e Receive Data entr´e sortie e Request To Send sortie entr´e e Clear To Send entr´e sortie e Data Terminal Ready sortie entr´e e Data Set Ready entr´e sortie e Data Carrier Detect entr´e sortie e Ring Indicator entr´e sortie e Ground — — description Seuls les 2 signaux TxD et RxD servent a transmettre les donn´es. Les autres signaux ` e sont des signaux de contrˆle de l’´change de donn´es. o e e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 6.5 - L’interface s´rie 8250 e Connexion entre DTE et DCE : TxD RxD RTS CTS (ordinateur) DTR DSR DTE DCD RI GND TxD RxD RTS CTS DTR DSR DCD RI GND DCE (modem) 63 Dialogue entre DTE et DCE : DTR RTS DTE donnée TxD DSR DCD DCE CTS (les signaux de contrˆle sont actifs a l’´tat bas = tension positive) o ` e • quand le DTE veut transmettre des donn´es, il active le signal DTR. Si le DCE e est prˆt ` recevoir les donn´es, il active le signal DSR puis le signal DCD : la e a e communication peut d´buter ; e • lorsque le DTE a une donn´e ` ´mettre, il active le signal RTS. Si le DCE peut e a e recevoir la donn´e, il active CTS : le DTE envoie la donn´e sur la ligne TxD ; e e • si le DCE veut demander une pause dans la transmission, il d´sactive CTS : le DTE e arrˆte la transmission jusqu’` ce que CTS soit r´activ´. C’est un contrˆle mat´riel e a e e o e du flux de donn´es ; e • Lorsque la transmission est termin´e, les signaux RTS, CTS, DTR, DCD et DSR e sont successivement d´sactiv´s. e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 64 Applications des liaisons s´ries : e Chapitre 6 - Les interfaces d’entr´es/sorties e • transmission de donn´es ` travers une ligne t´l´phonique : e a ee DTE microprocesseur microprocesseur ` HAGGEGE, 2003 DTE interface série interface série DCE modem ligne téléphonique DCE modem Le modem transforme les signaux num´riques produits par l’interface s´rie en sie e gnaux analogiques accept´s par la ligne t´l´phonique et inversement (modulations e ee num´riques FSK, PSK, ...) e • liaison s´rie directe entre deux DTE : e – liaison simple a 3 fils : rebouclage (strapping) des signaux de contrˆle : ` o TxD RxD RTS CTS DTR DSR DCD RI GND TxD RxD RTS CTS DTR DSR DCD RI GND DTE 1 DTE 2 Ce cˆblage ne permet pas le contrˆle mat´riel du flux entre les deux DTE. a o e – liaison compl`te : cˆble Null Modem : e a TxD RxD RTS CTS DTR DSR DCD DTE 1 RI GND TxD RxD RTS CTS DTR DSR DCD RI GND DTE 2 Ce cˆblage simule la pr´sence d’un modem (DCE) en croisant les signaux de a e contrˆle et permet le contrˆle mat´riel du flux. o o e ISET Rad`s e cours de microprocesseur 6.5 - L’interface s´rie 8250 e Mise en œuvre d’une interface s´rie, l’UART 8250 : e Brochage du 8250 : D0 D1 D2 D3 D4 D5 D6 D7 RCLK SIN SOUT CS0 CS1 CS2 BAUDOUT XTAL1 XTAL2 DOSTR DOSTR GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 8250 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 VCC RI DCD DSR CTS MR OUT1 DTR RTS OUT2 INTRPT NC A0 A1 A2 ADS CSOUT DDIS DISTR DISTR 65 Sch´ma fonctionnel : e D0 - D7 ou D8 - D15 RESET RD WR interface microprocesseur D0 - D7 MR DISTR DOSTR DISTR DOSTR CS0 CS1 CS2 A3 A2 A1 A2 A1 A0 ADS INTRPT DDIS CSOUT VCC 8250 état modem CTS DSR DCD RI GND 1489 1489 1489 1489 CTS DSR DCD RI GND UART XTAL1 diviseur d'horloge et XTAL2 générateur de baud RCLK contrôle et état de BAUDOUT ligne récepteur SIN émetteur SOUT 1.8432 MHz ou 2.4576 MHz ou 3.072 MHz M/IO A4 - A15 validation décodeur d'adresses +5 V adaptateur RS232/TTL 1489 1488 adaptateur TTL/RS232 1488 1488 RxD TxD modem RTS DTR ligne téléphonique A0 ou BHE interface modem RTS DTR OUT1 OUT2 contrôle modem demande d'interruption commandes d'amplificateurs de bus +5 V ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 66 Chapitre 6 - Les interfaces d’entr´es/sorties e Acc`s aux registres du 8250 : le 8250 poss`de 11 registres. Comme il n’y a que 3 bits e e d’adresses (A0, A1 et A2), plusieurs registres doivent se partager la mˆme adresse : e DLAB 0 0 1 1 0 X X X X X X A2 A1 A0 registre 0 0 0 RBR : Receiver Buffer Register, registre de r´ception e (accessible seulement en lecture) 0 0 0 THR : Transmitter Holding Register, registre d’´mission (accessible seulement en ´criture) e e 0 0 0 DLL : Divisor Latch LSB, octet de poids faible du diviseur d’horloge 0 0 1 DLM : Divisor Latch MSB, octet de poids fort du diviseur d’horloge 0 0 1 IER : Interrupt Enable Register, registre d’autorisation des interruptions 0 1 0 IIR : Interrupt Identification Register, registre d’identification des interruptions 0 1 1 LCR : Line Control Register, registre de contrˆle de o ligne 1 0 0 MCR : Modem Control Register, registre de contrˆle o modem 1 0 1 LSR : Line Status Register, registre d’´tat de la ligne e 1 1 0 MSR : Modem Status Register, registre d’´tat du moe dem 1 1 1 SCR : Scratch Register, registre a usage g´n´ral ` e e En fonction de l’´tat de DLAB (Divisor Latch Access Bit = bit de poids fort du registre e LCR), on a acc`s soit au registre d’´mission/r´ception, soit au diviseur d’horloge, soit au e e e masque d’interruptions. Structure des registres : • Line Control Register (LCR) : bits 0 et 1 : longueur du mot transmis, bit 1 bit 0 0 0 → 5 bits 1 → 6 bits 0 0 → 7 bits 1 1 → 8 bits 1 bit 2 : nombre de bits de stop, 0 → 1 bit de stop, 1 → 1.5 bits de stop si 5 bits sont transmis, 2 bits de stop sinon ; e e bit 3 : autorisation de parit´, 0 → pas de parit´, 1 → parit´ g´n´r´e et v´rifi´e ; e e ee e e bit 4 : s´lection de parit´, 0 → parit´ impaire, e e e 1 → parit´ paire ; e bit 5 : for¸age de parit´, 0 → parit´ non forc´e c e e e 1 → parit´ fixe ; e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 6.5 - L’interface s´rie 8250 e 67 bit 6 : contrˆle de l’´tat de la ligne TxD, 0 → ligne en fonctionnement normal, o e 1 → for¸age de TxD a l’´tat 0 (break) ; c ` e bit 7 : DLAB (Divisor Latch Access bit), 0 → acc`s aux registres d’´mission, e e de r´ception et IER, e 1 → acc`s au diviseur d’horloge. e • Line Status Register (LSR) : e c bit 0 : 1 → donn´e re¸ue ; e e bit 1 : 1 → erreur d’´crasement de caract`re ; e bit 2 : 1 → erreur de parit´ ; bit 3 : 1 → erreur de cadrage (bit de stop non valide) ; e e bit 4 : 1 → d´tection d’un ´tat logique 0 sur RxD pendant une dur´e sup´rieure ` la dur´e d’un mot ; e e a e bit 5 : 1 → registre de transmission vide ; ` e bit 6 : 1 → registre a d´calage vide ; e ` bit 7 : non utilis´, toujours a 0. • Modem Control Register (MCR) : ⎫ bit 0 : DTR ⎪ ⎪ ⎪ bit 1 : RTS ⎬ activation (mise a 0) des lignes correspondantes en ` bit 2 : OUT1 ⎪ mettant a 1 ces bits ; ` ⎪ ⎪ ⎭ bit 3 : OUT2 bit 4 : 1 → fonctionnement en boucle : TxD connect´e ` RxD (mode test) ; e a ⎫ bit 5 ⎪ ⎬ bit 6 : inutilis´s, toujours a 0. e ` ⎪ ⎭ bit 7 • Modem Status Register (MSR) : bit 0 : 1 → changement de CTS depuis la derni`re lecture : delta CTS ; e bit 1 : 1 → delta DSR ; bit 2 : 1 → delta RI (uniquement front montant sur RI) ; bit 3 : 1 → delta DCD ; ⎫ bit 4 : CTS ⎪ ⎪ ⎪ bit 5 : DSR ⎬ ces bits indiquent l’´tat des lignes correspondantes. e ⎪ bit 6 : RI ⎪ ⎪ ⎭ bit 7 : DCD • Diviseur d’horloge (DLM,DLL) : la vitesse de transmission est fix´e par la e valeur du diviseur d’horloge : vitesse (bit/s) = fr´quence d horloge(quartz) e 16 × (DLM, DLL) Exemple de calcul : vitesse de transmission d´sir´e = 1200 bit/s, fr´quence d’horloge e e e = 1.8432 MHz, d´termination de la valeur du diviseur d’horloge : e fr´quence d horloge e 1.8432 × 106 diviseur = = = 96 ⇒ DLM = 0 et DLL = 96. 16 × vitesse 16 × 1200 ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 68 Chapitre 6 - Les interfaces d’entr´es/sorties e • Receiver Buffer Register (RBR) : contient la donn´e re¸ue. e c • Transmitter Holding Register (THR) : contient la donn´e ` transmettre. e a • Interrupt Identification Register (IIR) : bit 0 : 0 → interruption en cours, 1 → pas d’interruption en cours ; bits 1 et 2 : source d’interruption, bit 2 bit 1 1 1 → erreur 0 → donn´e re¸ue e c 1 1 → registre d’´mission vide e 0 0 → changement d’´tat modem e 0 (ordre de priorit´ d´croissant) ; e e bit bit bit bit bit 3 4 5 6 7 ⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎬ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎭ : inutilis´s, toujours a 0. e ` • Interrupt Enable Register (IER) : autorisation des interruptions e c bit 0 : 1 → donn´e re¸ue ; e bit 1 : 1 → registre d’´mission vide ; bit 2 : 1 → erreur ; e bit 3 : 1 → changement d’´tat modem ; ⎫ bit 4 ⎪ ⎪ ⎪ bit 5 ⎬ : inutilis´s, toujours a 0. e ` bit 6 ⎪ ⎪ ⎪ ⎭ bit 7 • Scratch Register (SCR) : registre a usage g´n´ral pouvant contenir des donn´es ` e e e temporaires. Exemple de programmation : soit un UART 8250 dont le bus de donn´es est connect´ sur e e la partie faible du bus de donn´es du microprocesseur 8086. L’adresse de base du 8250 est e fix´e ` la valeur 200H par un d´codeur d’adresses. La fr´quence d’horloge du 8250 est de e a e e 1.8432 MHz. On veut : • ´crire une proc´dure init qui initialise le 8250 avec les param`tres suivants : 2400 e e e bits/s, 8 bits par caract`re, parit´ paire, 1 bit de stop (2400, 8, P, 1) ; e e • ´crire une proc´dure envoi qui ´met un message contenu dans la zone de donn´es e e e e msg. L’´mission s’arrˆte lorsque le caract`re EOT (End Of Text, code ASCII = 03H) e e e est rencontr´ ; e • ´crire une proc´dure reception qui re¸oit une ligne de 80 caract`res et la range e e c e dans une zone de donn´es appel´e ligne. En cas d’erreur de r´ception, envoyer le e e e caract`re NAK (No Acknowledge, code ASCII = 15H) sinon envoyer le caract`re ACK e e (Acknowledge, code ASCII = 06H). Programme : ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 6.5 - L’interface s´rie 8250 e RBR THR DLL DLM IER IIR LCR MCR LSR MSR SCR EOT ACK NAK LIGNE MSG INIT equ equ equ equ equ equ equ equ equ equ equ equ equ equ db db PROC mov mov out mov mov out mov mov out mov mov out ret ENDP 200H 200H 200H 202H 202H 204H 206H 208H 20AH 20CH 20EH 03H 06H 15H 80 dup( ?) ’Test 8250’, EOT NEAR dx,LCR al,80H dx,al dx,DLL al,48 dx,al dx,DLM al,0 dx,al dx,LCR al,00011011B dx,al ; adresses des registres du 8250 69 ; ; ; ; ; caract`re End Of Text e caract`re Acknowledge e caract`re No Acknowledge e zone de rangement des caract`res re¸us e c message a envoyer ` ; proc´dure d’initialisation du 8250 e ; DLAB = 1 pour acc´der au diviseur e ; d’horloge ; vitesse de transmission = 2400 bit/s ; => DLL = 48 ... ; ... et DLM = 0 ; DLAB = 0 , 8 bits de donn´es, e ; parit´ paire, 1 bit de stop e INIT ENVOI CARACTERE PROC NEAR mov dx,LSR attente envoi : in al,dx and al,20H jz attente envoi mov dx,THR mov al,ah out dx,al ret ENVOI CARACTERE ENDP ` HAGGEGE, 2003 ; proc´dure d’´mission du contenu de AH e e ; lecture du registre d’´tat de la ligne e ; attente registre de transmission vide ; ; ; ; masquage bit 5 de LSR si bit 5 de LSR = 0 => attente ... ... sinon envoyer le caract`re e contenu dans le registre AH cours de microprocesseur ISET Rad`s e 70 PROC mov boucle : mov cmp jz call inc jmp fin envoi : ret ENVOI ENDP ENVOI NEAR si,offset MSG ah,[si] AH,EOT fin envoi ENVOI CARACTERE si boucle Chapitre 6 - Les interfaces d’entr´es/sorties e ; ; ; ; ; ; ; proc´dure d’´mission du message e e pointer vers le d´but du message e AH <- caract`re a envoyer e ` fin du message ? oui => fin proc´dure e non => envoyer caract`re ... e ... et passer au caract`re suivant e RECEPTION PROC NEAR mov di,offset LIGNE mov cx,80 attente reception : mov dx,LSR in al,dx test al,01H jz attente reception test al,00001110B jz suite mov ah,NAK call ENVOI CARACTERE jmp attente reception suite : mov dx,RBR in al,dx mov [di],al mov ah,ACK call ENVOI CARACTERE dec cx jz fin reception inc di jmp attente reception fin reception : ret RECEPTION ENDP ; proc´dure de r´ception d’une ligne e e ; pointer vers d´but zone de r´ception e e ; compteur de caract`res re¸us e c ; lecture du registre d’´tat de la ligne e ; ; ; ; ; test de l’´tat du bit 0 de LSR e pas de caract`re re¸u => attente e c sinon test erreurs : bits 1,2,3 de LSR pas d’erreurs => continuer erreurs => envoyer NAK ... ; ... et retourner attendre un caract`re e ; lire caract`re re¸u ... e c ; ... et le ranger dans LIGNE ; puis envoyer ACK ; ; ; ; d´cr´menter compteur de caract`res e e e si compteur = 0 => fin r´ception e sinon incr´menter DI e et aller attendre caract`re suivant e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Chapitre 7 Les interruptions 7.1 D´finition d’une interruption e périphérique Soit un microprocesseur qui doit ´changer des informations avec un p´riph´rique : e e e microprocesseur interface Il y a deux m´thodes possibles pour recevoir les donn´es provenant des p´riph´riques : e e e e • scrutation p´riodique (ou polling) : le programme principal contient des inse tructions qui lisent cycliquement l’´tat des ports d’E/S. e Avantage : facilit´ de programmation. e Inconv´nients : e – perte de temps s’il y a de nombreux p´riph´riques ` interroger ; e e a – de nouvelles donn´es ne sont pas toujours pr´sentes ; e e – des donn´es peuvent ˆtre perdues si elles changent rapidement. e e • interruption : lorsqu’une donn´e apparaˆ sur un p´riph´rique, le circuit d’E/S le e ıt e e signale au microprocesseur pour que celui-ci effectue la lecture de la donn´e : c’est e une demande d’interruption (IRQ : Interrupt Request) : périphérique demande d'interruption interface microprocesseur Avantage : le microprocesseur effectue une lecture des ports d’E/S seulement lorsqu’une donn´e est disponible, ce qui permet de gagner du temps et d’´viter de perdre e e des donn´es. e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 72 Exemples de p´riph´riques utilisant les interruptions : e e Chapitre 7 - Les interruptions • clavier : demande d’interruption lorsqu’une touche est enfonc´e ; e • port s´rie : demande d’interruption lors de l’arriv´e d’un caract`re sur la ligne de e e e transmission. Remarque : les interruptions peuvent ˆtre g´n´r´es par le microprocesseur lui-mˆme en e e ee e cas de probl`mes tels qu’une erreur d’alimentation, une division par z´ro ou un circuit e e m´moire d´fectueux (erreurs fatales). Dans ce cas, la demande d’interruption conduit a e e ` l’arrˆt du microprocesseur. e 7.2 Prise en charge d’une interruption par le microprocesseur A la suite d’une demande d’interruption par un p´riph´rique : e e • le microprocesseur termine l’ex´cution de l’instruction en cours ; e • il range le contenu des principaux registres sur la pile de sauvegarde : pointeur d’instruction, flags, ... • il ´met un accus´ de r´ception de demande d’interruption (Interrupt Acknowe e e ledge) indiquant au circuit d’E/S que la demande d’interruption est accept´e : e périphérique demande d'interruption microprocesseur interruption acceptée interface Remarque : le microprocesseur peut refuser la demande d’interruption : celle-ci est alors masqu´e. Le masquage d’une interruption se fait g´n´ralement en poe e e sitionnant un flag dans le registre des indicateurs d’´tat. Il existe cependant des e interruptions non masquables qui sont toujours prises en compte par le microprocesseur. • il abandonne l’ex´cution du programme en cours et va ex´cuter un sous-programme e e de service de l’interruption (ISR : Interrupt Service Routine) ; • apr`s l’ex´cution de l’ISR, les registres sont restaur´s ` partir de la pile et le microe e e a proceseur reprend l’ex´cution du programme qu’il avait abandonn´ : e e ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 7.3 - Adresses des sous-programmes d’interruptions programme principal sous-programme de service de l'interruption 73 arrivée de la demande d'interruption e ice d serv uption err l'int reto ur a prin u prog ra cipa l (IR mme ET ) Remarque : la derni`re instruction d’un sous-programme de service d’interruption doit e ˆtre l’instruction IRET : retour d’interruption. e Si plusieurs interruptions peuvent se produire en mˆme temps, on doit leur affecter une e priorit´ pour que le microprocesseur sache dans quel ordre il doit servir chacune d’entre e elle. 7.3 Adresses des sous-programmes d’interruptions Lorsqu’une interruption survient, le microprocesseur a besoin de connaˆ l’adresse du ıtre sous-programme de service de cette interruption. Pour cela, la source d’interruption place sur le bus de donn´es un code num´rique indiquant la nature de l’interruption. Le microe e processeur utilise ce code pour rechercher dans une table en m´moire centrale l’adresse e du sous-programme d’interruption a ex´cuter. Chaque ´l´ment de cette table s’appelle un ` e ee vecteur d’interruption : sous-programme d'interruption no j sous-programme d'interruption no i adresse int. no j code (ou no) de l'interruption adresse int. no i table des vecteurs d'interruptions mémoire centrale Lorsque les adresses des sous-programmes d’interruptions sont g´r´es de cette mani`re, ee e on dit que les interruptions sont vectoris´es. e Avantage de la vectorisation des interruptions : l’emplacement d’une ISR peut ˆtre n’ime porte o` dans la m´moire, il suffit de sp´cifier le vecteur d’interruption correspondant. u e e ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 74 Chapitre 7 - Les interruptions 7.4 Les interruptions du 8086 Le microprocesseur 8086 peut g´rer jusqu’` 256 interruptions. Chaque interruption re¸oit e a c un num´ro compris entre 0 et 255 appel´ type de l’interruption. e e Trois sortes d’interruptions sont reconnues par le 8086 : • interruptions mat´rielles produites par l’activation des lignes INTR et NMI du e microprocesseur ; • interruptions logicielles produites par l’instruction INT n, o` n est le type de l’inu terruption ; • interruptions processeur g´n´r´es par le microprocesseur en cas de d´passement, e ee e de division par z´ro ou lors de l’ex´cution pas ` pas d’un programme. e e a Les interruptions du 8086 sont vectoris´es. La table des vecteurs d’interruptions doit e obligatoirement commencer a l’adresse physique 00000H dans la m´moire centrale. ` e Chaque vecteur d’interruption est constitu´ de 4 octets repr´sentant une adresse logique e e du type CS : IP. adresses des vecteurs d'interruption 3FFH 3FCH type FFH : libre interruptions libres : disponibles pour l'utilisateur 103H 100H FCH FFH type 40H : libre type 3FH : réservé par Microsoft interruptions réservées par Microsoft dans un PC : utilisées par MS-DOS, Windows, ... 83H 80H 7FH 7CH type 20H : réservé par Microsoft type 1FH : réservé par Intel interruptions réservées par Intel type 05H : 17H réservé par Intel 14H type 04H : 13H overflow 10H type 03H : 0FH 0CH instruction int sur 1 octet 0BH type 02H : 08H NMI type 01H : 07H pas à pas 04H type 00H : 03H division par zéro 00H CS IP 2 octets 2 octets ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 7.5 - Le contrˆleur programmable d’interruptions 8259 o 75 Remarque : correspondance entre le type de l’interruption et l’adresse du vecteur correspondant : adresse vecteur d’interruption = 4 × type de l’interruption Exemple : interruption 20H, adresse du vecteur = 4 × 20H = 80H. La table des vecteurs d’interruptions est charg´e par le programme principal (carte a mie ` croprocesseur) ou par le syst`me d’exploitation (ordinateur) au d´marrage du syst`me. e e e Elle peut ˆtre modifi´e en cours de fonctionnement (d´tournement des vecteurs d’intere e e ruptions). 7.5 Le contrˆleur programmable d’interruptions 8259 o Le microprocesseur 8086 ne dispose que de deux lignes de demandes d’interruptions mat´rielles (NMI et INTR). Pour pouvoir connecter plusieurs p´rip´riques utilisant des e e e interruptions, on peut utiliser le contrˆleur programmable d’interruptions 8259 dont le o rˆle est de : o • re¸evoir des demandes d’interruptions des p´riph´riques ; c e e • r´soudre les priorit´s des interruptions ; e e • g´n´rer le signal INTR pour le 8086 ; e e • ´mettre le num´ro de l’interruption sur le bus de donn´es. e e e Un 8259 peut g´rer jusqu’` 8 demandes d’interruptions mat´rielles. e a e Brochage du 8259 : CS WR RD D7 D6 D5 D4 D3 D2 D1 D0 CAS0 CAS1 GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 8259 24 23 22 21 20 19 18 17 16 15 VCC A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP/EN CAS2 ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 76 Sch´ma fonctionnel : e D0 - D7 ou D8 - D15 M/IO A2 - A15 validation décodeur d'adresses A0 ou BHE INTR INTA CS A1 A0 INT RD WR Chapitre 7 - Les interruptions +5 V VCC D0 - D7 RD WR 8259 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 entrées de demandes d'interruptions CAS0 CAS1 INTA CAS2 SP/EN GND mise en cascade de plusieurs 8259 Remarque : si le nombre de demandes d’interruptions est sup´rieur a 8, on peut placer e ` plusieurs 8259 en cascade : 8259 esclave INT 8259 maître INTR INTA INT INTA IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 SP/EN entrées de demandes d'interruptions 8259 esclave INT CAS0, CAS1, CAS2 SP/EN IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Annexe Jeu d’instructions du 8086 Transfert de donn´es : e G´n´ral e e MOV D´placement d’un octet ou d’un mot e PUSH Ecriture d’un mot au sommet de la pile POP Lecture d’un mot au sommet de la pile XCHG Echange d’octets ou de mots XLAT ou Traduction d’un octet a l’aide d’une table ` XLATB Entr´es/Sorties e IN Lecture d’un port d’E/S OUT Ecriture d’un port d’E/S Transfert d’adresses LEA Chargement d’une adresse effective LDS Chargement d’un pointeur utilisant DS LES Chargement d’un pointeur utilisant ES Transfert des flags LAHF Transfert des 5 flags bas dans AH SAHF Transfert de AH dans les 5 flags bas PUSHF Sauvegarde des flags sur la pile POPF Restauration des flags a partir de la pile ` Instructions arithm´tiques : e Addition Addition d’octets ou de mots Addition d’octets ou de mots avec retenue Incr´mentation de 1 d’un octet ou d’un mot e Ajustement ASCII de l’addition Ajustement d´cimal de l’addition e ADD ADC INC AAA DAA ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 78 Annexe - Jeu d’instructions du 8086 Soustraction Soustraction d’octets ou de mots Soustraction d’octets ou de mots avec retenue D´cr´mentation de 1 d’un octet ou d’un mot e e Compl´mentation a 2 d’un octet ou d’un mot (changee ` ment de signe) Comparaison d’octets ou de mots Ajustement ASCII de la soustraction Ajustement d´cimal de la soustraction e Multiplication Multiplication non sign´e d’octets ou de mots e Multiplication sign´e d’octets ou de mots e Ajustement ASCII de la multiplication Division Division non sign´e d’octets ou de mots e Division sign´e d’octets ou de mots e Ajustement ASCII de la division Conversion d’octet en mot Conversion de mot en double mot SUB SBB DEC NEG CMP AAS DAS MUL IMUL AAM DIV IDIV AAD CBW CWD Instructions logiques : Logique Compl´ment ` 1 d’un octet ou d’un mot e a ET logique de deux octets ou de deux mots OU logique de deux octets ou de deux mots OU exclusif logique de deux octets ou de deux mots Comparaison, a l’aide d’un ET, d’octets ou de mots ` D´calages e SHL/SAL D´calage a gauche arithm´tique ou logique (octet ou e ` e mot) SHR D´calage logique a droite d’un octet ou d’un mot e ` SAR D´calage arithm´tique a droite d’un octet ou d’un mot e e ` Rotations ROL Rotation a gauche d’un octet ou d’un mot) ` ROR Rotation a droite d’un octet ou d’un mot ` RCL Rotation a gauche incluant CF (octet ou mot) ` RCR Rotation a droite incluant CF (octet ou mot) ` NOT AND OR XOR TEST ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 79 Instructions sur les chaˆ ınes de caract`res : e REP REPE ou REPZ REPNE ou REPNZ MOVS ou MOVSB/MOVSW CMPS ou CMPSB/CMPSW SCAS ou SCASB/SCASW LODS ou LODSB/LODSW STOS ou STOSB/STOSW Pr´fixes e R´p´tition tant que CX n’est pas nul e e R´p´tition tant qu’il y a ´galit´ et que CX n’est pas nul e e e e R´p´tition tant qu’il n’y a pas ´galit´ et que CX n’est e e e e pas nul Instructions D´placement de blocs d’octets ou de mots e Comparaison de blocs d’octets ou de mots Exploration d’un bloc d’octets ou de mots Tranfert d’un octet ou d’un mot dans AL ou AX Chargement d’un bloc d’octets ou de mots par AL ou AX Instructions de branchements : CALL RET JMP LOOP LOOPE ou LOOPZ LOOPNE ou LOOPNZ JCXZ INT INTO IRET Branchements inconditionnels Appel de proc´dure e Retour d’une proc´dure e Saut inconditionnel Contrˆles d’it´rations o e Bouclage tant que CX = 0 Bouclage tant que CX = 0 et ZF = 1 (´galit´) e e Bouclage tant que CX = 0 et ZF = 0 (in´galit´) e e Saut si CX est nul Interruptions Interruption logicielle Interruption si OF = 1 (overflow) Retour d’une interruption ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 80 Annexe - Jeu d’instructions du 8086 Instructions de branchements conditionnels : Sauts conditionnels si « sup´rieur » (si CF + ZF = 0) e si « sup´rieur ou ´gal » (si CF = 0) e e si « inf´rieur » (si CF = 1) e si « inf´rieur ou ´gal » (si CF + ZF = 1) e e en cas de retenue (si CF = 1) si « ´gal » ou « nul » (si ZF = 1) e si « plus grand » (si (SF ⊕ OF) + ZF = 0) si « plus grand ou ´gal » (si SF ⊕ OF = 0) e si « plus petit » (si SF ⊕ OF = 1) si « plus petit ou ´gal » (si (SF ⊕ OF) + ZF = 1) e si « pas de retenue » (si CF = 0) si « non ´gal » ou « non nul » (si (ZF = 0) e si « pas de d´passement » (si OF = 0) e si « parit´ impaire » (si PF = 0) e si « signe positif » (si SF = 0) si « d´passement » (si OF = 1) e si « parit´ paire » (si PF = 1) e si « signe n´gatif » (si SF = 1) e JA ou JNBE (1) JAE ou JNB (1) JB ou JNAE (1) JBE ou JNA (1) JC JE ou JZ JG ou JNLE (2) JGE ou JNL (2) JL ou JNGE (2) JLE ou JNG (2) JNC JNE ou JNZ JNO JNP ou JPO JNS JO JP ou JPE JS (1) (2) Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut Saut concerne des nombres non sign´s. e concerne des nombres sign´s. e Instructions de contrˆle du 8086 : o Op´rations sur les flags e Met le flag de retenue ` 1 a Efface le flag de retenue Inverse l’´tat du flag de retenue e Met le flag de direction a 1 (d´cr´mentation) ` e e Met le flag de direction a 0 (incr´mentation) ` e Autorise les interruptions sur INTR Interdit les interruptions sur INTR Synchronisation avec l’ext´rieur e Arrˆt du microprocesseur (sortie de cet ´tat par intere e ruption ou reset) Attente tant que TEST n’est pas ` 0 a Pr´fixe = instruction destin´e ` un coprocesseur e e a Pr´fixe = r´servation du bus pour l’instruction e e Pas d’op´ration e Pas d’op´ration e STC CLC CMC STD CLD STI CLI HLT WAIT ESC LOCK NOP ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003 Bibliographie ´ [1] P. Andre. La liaison RS232. Dunod, Paris, 1998. [2] T.C. Bartee. Digital Computer Fundamentals. McGraw-Hill, Tokyo, 1981. [3] J. Campbell. L’interface RS-232. Sybex, Paris, 1984. [4] B. Fabrot. Assembleur pratique. Marabout Informatique, Alleur, Belgique, 1996. [5] A.B. Fontaine. Le microprocesseur 16 bits 8086/8088 – Mat´riel, logiciel, syst`me e e d’exploitation. Masson, Paris, 1988. [6] B. Geoffrion. 8086 - 8088 – Programmation en langage assembleur. Editions Radio, Paris, 1986. [7] J.P. Hayes. Computer Architecture and Organization. McGraw-Hill, Tokyo, 1982. [8] S. Leibson. Manuel des interfaces. McGraw-Hill, Paris, 1984. [9] H. Lilen. Introduction a la micro-informatique – Du microprocesseur au micro` ordinateur. Editions Radio, Paris, 1982. [10] H. Lilen. 8088 et ses p´riph´riques – Les circuits cl´s des IBM PC et compatibles. e e e Editions Radio, Paris, 1985. [11] H. Lilen. 8088 – Assembleur IBM PC et compatibles. Editions Radio, Paris, 1986. [12] H. Lilen. Cours fondamental des microprocesseurs. Editions Radio, Paris, 1987. [13] H. Lilen. Microprocesseurs – Du CISC au RISC. Dunod, Paris, 1995. [14] G.H. MacEwen. Introduction to Computer Systems. McGraw-Hill, Tokyo, 1981. [15] A. Mariatte. PC, modems et serveurs. P.S.I, Lagny, France, 1986. [16] P. Mercier. Assembleur facile. Marabout Informatique, Alleur, Belgique, 1989. [17] P. Mercier. La maˆ ıtrise du MS-DOS et du BIOS – Les interruptions – Organisation interne. Marabout Informatique, Alleur, Belgique, 1989. [18] P. Mercier. Les interruptions du MS-DOS. Marabout Informatique, Alleur, Belgique, 1990. [19] A. Osborne. Initiation aux micro-ordinateurs – Niveau 2. Editions Radio, Paris, 1981. [20] J.B. Peatman. Microcomputer Based Design. McGraw-Hill, Tokyo, 1981. [21] E. Pissaloux. Pratique de l’assembleur I80x86 – Cours et exercices. Herm`s, Paris, e 1994. [22] H. Schakel. Programmer en assembleur sur PC. Micro Application, Paris, 1995. ` HAGGEGE, 2003 cours de microprocesseur ISET Rad`s e 82 [23] C. Tavernier. Modems. ETSF, Paris, 1993. Bibliographie [24] M. Tischer et B. Jennrich. La bible PC – Programmation syst`me. Micro Applie cation, Paris, 1997. [25] R. Tourki. L’ordinateur PC – Architecture et programmation – Cours et exercices. Centre de Publication Universitaire, Tunis, 2002. [26] J. Tracy Kidder. The Soul of a New Machine. Atlantic-Little Brown, U.S.A, 1981. [27] J.M. Trio. Microprocesseurs 8086-8088 – Architecture et programmation. Eyrolles, Paris, 1984. [28] R. Zaks et A. Wolfe. Du composant au syst`me – Introduction aux microprocese seurs. Sybex, Paris, 1988. ISET Rad`s e cours de microprocesseur ` HAGGEGE, 2003
Sign up to vote on this title
UsefulNot useful