86
Institut Sup´ erieur des ´ Etudes Technologiques de Rad` es epartement de G´ enie ´ Electrique MICROPROCESSEUR Support de cours 4 ` eme niveau G´ enie ´ Electrique Dr J.Y. Hagg ` ege Ing´ enieur ENIT Agr´ eg´ e de G´ enie ´ Electrique Technologue ` a l’ISET de Rad` es 2003

cours-prof.pdf

Embed Size (px)

Citation preview

  • Institut Superieur des Etudes Technologiques de Rade`s

    Departement de Genie Electrique

    MICROPROCESSEUR

    Support de cours

    4e`me niveau Genie Electrique

    Dr J.Y. Hagge`geIngenieur ENIT

    Agrege de Genie Electrique

    Technologue a` lISET de Rade`s

    2003

  • ii

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • Table des matie`res

    1 Historique et evolution des ordinateurs 11.1 Prehistoire des ordinateurs . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Machines electromecaniques . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Machines electroniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Machines actuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2 Architecture et fonctionnement dun microprocesseur 32.1 Structure dun calculateur . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Organisation de la memoire centrale . . . . . . . . . . . . . . . . . . . . . . 42.3 Circulation de linformation dans un calculateur . . . . . . . . . . . . . . . 52.4 Description materielle dun microprocesseur . . . . . . . . . . . . . . . . . 62.5 Fonctionnement dun microprocesseur . . . . . . . . . . . . . . . . . . . . . 6

    3 Les memoires 113.1 Memoires ROM et RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 Schema fonctionnel dune memoire . . . . . . . . . . . . . . . . . . . . . . 113.3 Interfacage microprocesseur/memoire . . . . . . . . . . . . . . . . . . . . . 123.4 Chronogrammes de lecture/ecriture en memoire . . . . . . . . . . . . . . . 133.5 Connection de plusieurs botiers memoire . . . . . . . . . . . . . . . . . . . 143.6 Decodage dadresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.7 Classication des memoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    4 Le microprocesseur Intel 8086 194.1 Description physique du 8086 . . . . . . . . . . . . . . . . . . . . . . . . . 194.2 Schema fonctionnel du 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . 204.3 Description et utilisation des signaux du 8086 . . . . . . . . . . . . . . . . 204.4 Organisation interne du 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . 264.5 Gestion de la memoire par le 8086 . . . . . . . . . . . . . . . . . . . . . . . 294.6 Le microprocesseur 8088 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    5 La programmation en assembleur du microprocesseur 8086 335.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.2 Les instructions de transfert . . . . . . . . . . . . . . . . . . . . . . . . . . 335.3 Les instructions arithmetiques . . . . . . . . . . . . . . . . . . . . . . . . . 375.4 Les instructions logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • iv Table des matie`res

    5.5 Les instructions de branchement . . . . . . . . . . . . . . . . . . . . . . . . 425.6 Methodes de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    6 Les interfaces dentrees/sorties 516.1 Denitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516.2 Adressage des ports dE/S . . . . . . . . . . . . . . . . . . . . . . . . . . . 526.3 Gestion des ports dE/S par le 8086 . . . . . . . . . . . . . . . . . . . . . . 536.4 Linterface paralle`le 8255 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.5 Linterface serie 8250 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    7 Les interruptions 717.1 Denition dune interruption . . . . . . . . . . . . . . . . . . . . . . . . . . 717.2 Prise en charge dune interruption par le microprocesseur . . . . . . . . . . 727.3 Adresses des sous-programmes dinterruptions . . . . . . . . . . . . . . . . 737.4 Les interruptions du 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . 747.5 Le controleur programmable dinterruptions 8259 . . . . . . . . . . . . . . 75

    Annexe - Jeu dinstructions du 8086 77

    Bibliographie 81

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • Chapitre 1

    Historique et evolution desordinateurs

    1.1 Prehistoire des ordinateursLes premie`res machines a` calculer etaient purement mecaniques : bouliers, abaques, ...(antiquite).Premie`re vraie machine a` calculer : Pascal, 1642, machine a` additionner.Machine a` multiplier : Leibniz, 1694, basee sur les travaux de John Neper (1617, loga-rithmes).Premie`re machine programmable : metier a` tisser, Jacquard, xviiie`me sie`cle, machine a`cartes perforees.Machine programmable universelle : Babbage, xviiie`me sie`cle, non realisable avec les tech-nologies de lepoque (machines a` vapeur), principe des machines actuelles.

    1.2 Machines electromecaniques

    Machine a` calculer a` cartes perforees : Hermann Hollerith, 1885, facilite le recensementamericain.Machines industrielles pour la comptabilite et les statistiques. Ces machines sont a` basede relais electromecaniques (Aiken et Stibitz, 1936-1939).

    1.3 Machines electroniques

    Premie`re machine a` calculer electronique : ENIAC, 1944, Eckert et Mauchly, 18000 tubeselectroniques, machine a` programme cable.Machine a` programme enregiste : John Von Neumann, 1946, les instructions sont enre-gistrees dans la memoire du calculateur : ordinateur.Premier ordinateur commercialise : SSEC dIBM, 1948.Ordinateur a` transistors : 1963, PDP5 de Digital Equipment Corporation (DEC), intro-duction des memoires a` ferrites : mini-ordinateurs.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 2 Chapitre 1 - Historique et evolution des ordinateurs

    Micro-ordinateurs : 1969-70, utilisation des circuits integres LSI.Premier microprocesseur : Intel, 1971, microprocesseur 4004, puis 8008, premier micro-ordinateur : le Micral, 1973, France, puis lAltair, 1975, Etats-Unis.Autres microprocesseurs : 8080 et 8085 dIntel, 6800 de Motorola, Z80 de Zilog : micro-processeurs 8 bits, debut des annees 1980.Microprocesseurs 16 bits : 8086/8088 dIntel, 68000 de Motorola.Microprocesseurs 32 bits en 1986 : 80386 dIntel et 68020 de Motorola.Fabrication en grandes series des micro-ordinateurs : 1977, Apple, Commodore, Tandy.IBM PC + MS-DOS (Microsoft) en 1981.

    1.4 Machines actuelles

    Ordinateurs de plus en plus puissants, bases sur des microprocesseurs performants : Pen-tium, Power PC, ...Nouvelles architectures de microprocesseurs : RISC.Applications multimedia, reseaux, ...Syste`mes embarques : microcontroleurs, processeurs de traitement de signal (DSP), ...

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • Chapitre 2

    Architecture et fonctionnement dunmicroprocesseur

    2.1 Structure dun calculateur

    horloge

    unitde contrle

    registres

    unitarithmtique

    et logique(UAL)

    unitde

    transfert

    unitd'entres/

    sorties

    mmoirecentrale

    monde extrieur(priphriques,

    capteurs,actionneurs, ...)

    unit centrale de traitement (UCT)

    : ordre ou commande

    : donnes

    Lelement de base dun calculateur est constitue par lunite centrale de traitement(UCT, CPU : Central Processing Unit). LUCT est constituee :

    dune unite arithmetique et logique (UAL, ALU : Arithmetic and Logic Unit) :cest lorgane de calcul du calculateur ;

    de registres : zones de stockage des donnees de travail de lUAL (operandes,resultats intermediaires) ;

    dune unite de controle (UC, CU : Control Unit) : elle envoie les ordres (ou com-mandes) a` tous les autres elements du calculateur an dexecuter un programme.

    La memoire centrale contient :

    le programme a` executer : suite dinstructions elementaires ; les donnees a` traiter.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 4 Chapitre 2 - Architecture et fonctionnement dun microprocesseur

    Lunite dentrees/sorties (E/S) est un intermediaire entre le calculateur et le mondeexterieur.

    Lunite de transfert est le support materiel de la circulation des donnees.

    Les echanges dordres et de donnees dans le calculateur sont synchronises par une horlogequi delivre des impulsions (signal dhorloge) a` des intervalles de temps xes.

    Denition : un microprocesseur consiste en une unite centrale de traitement (UAL +registres + unite de controle) entie`rement contenue dans un seul circuit integre. Un cal-culateur construit autour dun microprocesseur est un microcalculateur ou un micro-ordinateur.

    Remarque : un circuit integre qui inclut une UCT, de la memoire et des peripheriquesest un microcontroleur.

    2.2 Organisation de la memoire centrale

    La memoire peut etre vue comme un ensemble de cellules ou cases contenant chacuneune information : une instruction ou une donnee. Chaque case memoire est reperee parun numero dordre unique : son adresse.

    Representation :

    12H

    C6H

    05H

    3EH 0000H

    0001H

    0002H

    0003H

    contenudes casesmmoire

    adresse des casesmmoire

    (gnralementnote en

    hexadcimal)

    largeur des cases mmoire :en gnral 1 octet (8 bits)

    = unit d'adressage

    Une case memoire peut etre lue ou ecrite par le microprocesseur (cas des memoiresvives) ou bien seulement lue (cas des memoires mortes).

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 2.3 - Circulation de linformation dans un calculateur 5

    2.3 Circulation de linformation dans un calculateur

    La realisation materielle des ordinateurs est generalement basee sur larchitecture de VonNeumann :

    microprocesseur mmoire E/S

    BUS

    pr

    iph

    riq

    ues

    Le microprocesseur echange des informations avec la memoire et lunite dE/S, sous formede mots binaires, au moyen dun ensemble de connexions appele bus. Un bus permetde transferer des donnees sous forme paralle`lle, cest-a`-dire en faisant circuler n bitssimultanement.

    Les microprocesseurs peuvent etre classes selon la longueur maximale des mots binairesquils peuvent echanger avec la memoire et les E/S : microprocesseurs 8 bits, 16 bits,32 bits, ...

    Le bus peut etre decompose en trois bus distincts :

    le bus dadresses permet au microprocesseur de specier ladresse de la casememoire a` lire ou a` ecrire ;

    le bus de donnees permet les transferts entre le microprocesseur et la memoire oules E/S ;

    le bus de commande transmet les ordres de lecture et decriture de la memoire etdes E/S.

    microprocesseur mmoire E/S

    pr

    iph

    riq

    ues

    largeur du bus(nombre de bits

    en parallle)8

    16

    bus de donnes

    bus d'adresses

    bus de commande

    Remarque : les bus de donnees et de commande sont bidirectionnels, le bus dadresseest unidirectionnel : seul le microprocesseur peut delivrer des adresses (il existe unederogation pour les circuits dacce`s direct a` la memoire, DMA).

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 6 Chapitre 2 - Architecture et fonctionnement dun microprocesseur

    2.4 Description materielle dun microprocesseur

    Un microprocesseur se presente sous la forme dun circuit integre muni dun nombregeneralement important de broches. Exemples :

    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 representer un microprocesseur par son schema fonctionnel :

    microprocesseur

    horloge

    reset

    signaux decommande du

    microprocesseur

    n bits

    p bits

    bus d'adresses

    bus de commande

    bus de donnes

    alimentation

    2.5 Fonctionnement dun microprocesseur

    Un microprocesseur execute un programme. Le programme est une suite dinstructionsstockees dans la memoire. Une instruction peut etre codee sur un ou plusieurs octets.Format dune instruction :

    opration effectuer oprande 1 oprande 2

    donnes traites par l'opration

    ,

    Exemple :ADDITIONNER

    operation

    case memoire 1, case memoire 2 operandes

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 2.5 - Fonctionnement dun microprocesseur 7

    Rangement en memoire :

    3EH 0000H

    0001H

    0002H

    oprande 1

    oprande 2

    code opratoirede l'addition

    instruction n

    oprande p

    Pour executer les instructions dans lordre etabli par le programme, le microprocesseurdoit savoir a` chaque instant ladresse de la prochaine instruction a` executer. Le micropro-cesseur utilise un registre contenant cette information. Ce registre est appele pointeurdinstruction (IP : Instruction Pointer) ou compteur dinstructions ou compteurordinal.

    Exemple :

    0000H

    0001H

    0002H

    oprande 1

    oprande 2

    instruction n

    oprande p

    3A2BH3A2BH

    pointeurd'instruction

    adresse de laprochaine

    instruction excuter

    instruction 1

    Remarque : la valeur initiale du pointeur dinstruction est xee par le constructeurdu microprocesseur. Elle vaut une valeur bien denie a` chaque mise sous tension dumicroprocesseur ou bien lors dune remise a` zero (reset).

    Pour savoir quel type doperation doit etre execute (addition, soustraction, ...), le mi-croprocesseur lit le premier octet de linstruction pointee par le pointeur dinstruction(code operatoire) et le range dans un registre appele registre dinstruction. Le codeoperatoire est decode par des circuits de decodage contenus dans le microprocesseur. Dessignaux de commande pour lUAL sont produits en fonction de loperation demandee quiest alors executee.

    Remarque : pour executer une instruction, lUAL utilise des registres de travail,exemple : laccumulateur, registre temporaire recevant des donnees intermediaires.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 8 Chapitre 2 - Architecture et fonctionnement dun microprocesseur

    Pendant que linstruction est decodee, le pointeur dinstruction est incremente de facon a`pointer vers linstruction suivante :

    instruction n

    oprande p

    3A2BH3A2BH

    pointeurd'instruction

    instruction n+1 3A2DH

    3A2CH

    3A2DH

    puis le processus de lecture et de decodage des instructions recommence.A la suite de chaque instruction, un registre du microprocesseur est actualise en fonctiondu dernier resultat : cest le registre detat du microprocesseur. Chacun des bits duregistre detat est un indicateur detat ou ag (drapeau).Exemple : registre detat du microprocesseur Z80 :

    01234567

    S Z AC P/O N C

    signe zro retenueauxiliaire

    parit/dpassement

    soustractionretenue(carry)

    Les indicateurs detat sont actives lorsquune certaine condition est remplie, exemple : leag Z est mis a` 1 lorsque la dernie`re operation a donne un resultat nul, le ag C est misa` un lorsque le resultat dune addition posse`de une retenue, ...Les indicateurs detat sont utilises par les instructions de saut conditionnels : en fonctionde letat dun (ou plusieurs) ags, le programme se poursuit de manie`re dierente.Toutes ces etapes (lecture de linstruction, decodage, execution) sont synchronisees parun sequenceur qui assure le bon deroulement des operations :

    horloge

    squenceur

    micro-code

    pointeurd'instruction

    registred'instruction

    dcodeur

    excution

    bus d'adresse

    bus de commande : "lire la mmoire"

    bus de donnes

    mmoire

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 2.5 - Fonctionnement dun microprocesseur 9

    Pour executer le programme contenu dans la memoire centrale, le sequenceur du micropro-cesseur execute lui-meme un programme appele micro-code, contenu dans une memoiremorte a` linterieur du microprocesseur.Le sequenceur est dirige par une horloge qui delivre un signal de frequence donnee per-mettant denchaner les dierentes etapes de lexecution dune instruction :

    T1 T2 T3

    cycle d'instruction

    priode d'horloge

    (microcycle)

    recherche del'instruction

    dcodage excution instructionsuivante

    Chaque instruction est caracterisee par le nombre de periodes dhorloge (ou microcycles)quelle utilise (donnee fournie par le fabricant du microprocesseur).Exemple : horloge a` 5 MHz, periode T = 1/f = 0, 2 s. Si linstruction sexecute en 3microcycles, la duree dexecution de linstruction est : 3 0, 2 = 0, 6 s.Lhorloge est constituee par un oscillateur a` quartz dont les circuits peuvent etre internesou externes au microprocesseur.Structure comple`te dun microprocesseur simple : pour fonctionner, un microprocesseurnecessite donc au minimum les elements suivants :

    UnitArithmtique

    et Logique(UAL)

    registres

    squenceur

    horloge

    dcodeurd'instructions

    pointeur d'instruction

    registre d'instruction

    accumulateur

    indicateurs d'tat

    quartz

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 10 Chapitre 2 - Architecture et fonctionnement dun microprocesseur

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • Chapitre 3

    Les memoires

    3.1 Memoires ROM et RAM

    On distingue deux types de memoires :

    les memoires vives (RAM : Random Access Memory) ou memoires volatiles. Ellesperdent leur contenu en cas de coupure dalimentation. Elles sont utilisees pourstocker temporairement des donnees et des programmes. Elles peuvent etre lues etecrites par le microprocesseur ;

    les memoires mortes (ROM : Read Only Memory) ou memoires non volatiles.Elles conservent leur contenu en cas de coupure dalimentation. Elles ne peuventetre que lues par le microprocesseur (pas de possibilite decriture). On les utilisepour stocker des donnees et des programmes de manie`re denitive.

    Les memoires sont caracterisees par leur capacite : nombre total de cases memoire conte-nues dans un meme botier.

    3.2 Schema fonctionnel dune memoire

    A0

    A2A1

    An-1

    D0D1D2

    Dp-1

    n lignesd'adresses

    p lignes de donnes(le plus souvent, p = 8)

    WR

    CS

    RD ou OE

    signal d'criture (RAM) :

    signal de lecture :

    validation de botier :

    RAMou

    ROM

    acti

    fs

    l't

    at b

    as

    (chip select)

    Le nombre de lignes dadresses depend de la capacite de la memoire : n lignes dadressespermettent dadresser 2n cases memoire : 8 bits dadresses permettent dadresser 256 oc-

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 12 Chapitre 3 - Les memoires

    tets, 16 bits dadresses permettent dadresser 65536 octets (= 64 Ko), ...

    Exemple : memoire RAM 6264, capacite = 8K 8 bits : 13 broches dadresses A0 a` A12,213 = 8192 = 8 Ko.

    3.3 Interfacage microprocesseur/memoire

    A0

    A2A1

    An-1

    D0D1

    D7

    WR

    CS

    RD

    D0D1

    D7

    WR

    RD

    A0

    A2A1

    An-1

    microprocesseur mmoire

    donnes

    commandes

    adresses

    Representation condensee (plus pratique) :

    A0

    A2A1

    An-1

    D0D1

    D7

    WR

    CS

    RD

    D0D1

    D7

    WR

    RD

    A0

    A2A1

    An-1

    microprocesseur mmoire

    donnes

    commandes

    adresses

    bus

    n

    8

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 3.4 - Chronogrammes de lecture/ecriture en memoire 13

    3.4 Chronogrammes de lecture/ecriture en memoire

    Une caracteristique importante des memoires est leur temps dacce`s : cest le temps quisecoule entre linstant ou` ladresse de la case memoire est presentee sur le bus dadresseset celui ou` la memoire place la donnee demandee sur le bus de donnees. Ce temps varieentre 50 ns (memoires rapides) et 300 ns (memoires lentes).

    Chronogramme de lecture en memoire :

    une priode d'horloge

    temps d'tablissement de l'adresseadresse stable

    adresse sur le bus (0 ou 1)

    lecture autorise

    temps d'accsdonnestable

    donnesur le bus

    lecture interdite

    valeurs non significatives

    horloge

    busd'adresses

    commandede lecture

    bus dedonnes

    Remarque : si le temps dacce`s dune memoire est superieur a` une periode dhorloge(memoire lente), le microprocesseur peut accorder a` la memoire un temps supplementaire(une ou plusieurs periodes dhorloge), a` la demande de celle-ci. Ce temps supplementaireest appele temps dattente (wait time : TW ) :

    signalde lecture

    demandede tempsd'attente

    microprocesseur mmoire

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 14 Chapitre 3 - Les memoires

    Chronogramme decriture en memoire :

    adresse sur le bus

    horloge

    busd'adresses

    commandede lecture

    bus dedonnes

    donne sur le bus

    pallierde scurit

    criture autorise

    3.5 Connexion de plusieurs botiers memoire sur le

    bus dun microprocesseur

    Les botiers memoire posse`dent une broche notee CS : Chip Select. Lorsque cette brocheest active (etat bas), le circuit peut etre lu ou ecrit. Lorsquelle est inactive( etat haut),le circuit est exclu du service : ses broches de donnees D0 a` D7 passent a` letat de hauteimpedance : tout se passe comme si la memoire etait deconnectee du bus de donnees dumicroprocesseur, dou` la possibilite de connecter plusieurs botiers memoire sur un memebus : un seul signal CS doit etre actif a` un instant donne pour eviter les conits entre lesdierents botiers.

    Exemple : connexion de trois botiers memoire dune capacite de 8 Ko chacun (13 lignesdadresses) sur un bus dadresse de 16 bits :

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 3.5 - Connection de plusieurs botiers memoire 15

    A0

    A2A1

    A12

    D0D1

    D7

    WRCS

    RD

    D0D1

    D7

    WR

    RD

    A0

    A2A1

    A12

    microprocesseur mmoire 1

    A14A15

    A13

    D0D1

    D7

    WRCS

    RD

    A0

    A2A1

    A12

    mmoire 2

    D0D1

    D7

    WRCS

    RD

    A0

    A2A1

    A12

    mmoire 3

    8 Ko 8 Ko8 Ko

    bus d'adresses A0 - A12

    bus dedonnes

    D0-D7

    13

    8

    signauxde selection

    de botier

    Dans un meme botier, une case memoire est designee par les bits dadresses A0 a` A12 :

    A12 A11 ... A1 A00 0 ... 0 0

    0000Ha`

    A12 A11 ... A1 A01 1 ... 1 1

    1FFFH

    Pour atteindre la memoire no1, il faut mettre a` 1 le bit A13 et a` 0 les bits A14 et A15.La plage dadresses occupee par cette memoire est donc :

    A15 A14 A13 A12 ... A00 0 1 0 ... 0

    2000Ha`

    A15 A14 A13 A12 ... A00 0 1 1 ... 1

    3FFFH

    De meme, pour la memoire no2, on doit avoir A13 = 0, A14 = 1 et A15 = 0 dou` la plagedadresses occupee cette memoire :

    A15 A14 A13 A12 ... A00 1 0 0 ... 0

    4000Ha`

    A15 A14 A13 A12 ... A00 1 0 1 ... 1

    5FFFH

    Pour la memoire no3, on doit avoir A13 = 0, A14 = 0 et A15 = 1 dou` la plage dadressesoccupee cette memoire :

    A15 A14 A13 A12 ... A01 0 0 0 ... 0

    8000Ha`

    A15 A14 A13 A12 ... A01 0 0 1 ... 1

    9FFFH

    On en deduit la cartographie ou mapping de la memoire visible par le microprocesseur :

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 16 Chapitre 3 - Les memoires

    mmoire no 1

    mmoire no 2

    mmoire no 3

    2000H

    3FFFH4000H

    5FFFH

    8000H

    9FFFH

    0000H

    FFFFH

    mmoire totaleadressable par

    le microprocesseurmmoire

    relleimplante

    3.6 Decodage dadresses

    Les trois bits A13, A14 et A15 utilises precedemment fournissent en fait 8 combinaisons,de 000 a` 111, dou` la possibilite de connecter jusqua` 8 botiers memoire de 8 Ko sur lebus. La memoire totale implantee devient donc de 8 8 Ko = 64 Ko : valeur maximalepossible avec 16 bits dadresses.

    Pour cela, il faut utiliser un circuit de decodage dadresses, dans ce cas : un decodeur3 vers 8.

    CS

    CSCS

    CSCS

    CSCS

    CS

    mmoire no 0

    23

    45

    67

    1microprocesseur

    A0 A12

    D0 D7

    Y0Y1Y2Y3Y4Y5Y6Y7

    ABC

    A13A14A15

    dcodeur 3 vers 8(ex: 74138)

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 3.7 - Classication des memoires 17

    Table de verite du decodeur dadresses :

    C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y70 0 0 0 1 1 1 1 1 1 10 0 1 1 0 1 1 1 1 1 10 1 0 1 1 0 1 1 1 1 10 1 1 1 1 1 0 1 1 1 11 0 0 1 1 1 1 0 1 1 11 0 1 1 1 1 1 1 0 1 11 1 0 1 1 1 1 1 1 0 11 1 1 1 1 1 1 1 1 1 0

    Le mapping de la memoire devient ainsi :

    mmoire no 1

    mmoire no 2

    mmoire no 3

    2000H

    3FFFH4000H

    5FFFH

    8000H

    9FFFH

    0000H

    FFFFH

    mmoire no 7

    mmoire no 6

    mmoire no 5

    mmoire no 4

    mmoire no 01FFFH

    6000H

    7FFFH

    A000H

    BFFFHC000H

    DFFFHE000H

    3.7 Classication des memoires

    Jusqua` la n des annees 1970, on utilisait des memoires a` tores magnetiques, lentes etde faibles capacites. Actuellement, on nutilise plus que des memoires a` semiconducteurs.

    mmoires semiconducteurs

    mmoires mortes mmoires vives

    ROM PROM EPROM EEPROM DRAM SRAM

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 18 Chapitre 3 - Les memoires

    Memoires mortes :

    ROM : Read Only Memory. Memoire a` lecture seule, sans ecriture. Son contenuest programme une fois pour toutes par le constructeur. Avantage : faible cout.Inconvenient : necessite une production en tre`s grande quantite.

    PROM : Programmable Read Only Memory. ROM programmable une seule fois parlutilisateur (ROM OTP : One Time Programming) en faisant sauter des fusibles.Necessite un programmateur specialise : application dune tension de programmation(21 ou 25 V) pendant 20 ms.

    EPROM : Erasable PROM, appelee aussi UVPROM. ROM programmable electri-quement avec un programmateur et eacable par exposition a` un rayonnement ultra-violet pendant 30 minutes. Famille 27nnn, exemple : 2764 (8 Ko), 27256 (32 Ko).Avantage : reprogrammable par lutilisateur.

    EEPROM : Electrically Erasable PROM. ROM programmable et eacable electri-quement. Lecture a` vitesse normale ( 100 ns). Ecriture (= eacement) tre`s lente( 10 ms). Application : les EEPROM contiennent des donnees qui peuvent etremodiees de temps en temps, exemple : parame`tres de conguration des ordinateurs.Avantage : programmation sans extraction de la carte et sans programmateur. In-convenient : cout eleve.

    Memoires vives :

    SRAM : Static Random Access Memory. Memoire statique a` acce`s aleatoire, a` basede bascules a` semiconducteurs a` deux etats (bascules RS). Famille 62nnn, exemple :62128 (16 Ko). Avantage : tre`s rapide, simple dutilisation. Inconvenient : compliquea` realiser.

    DRAM : Dynamic RAM. Basee sur la charge de condensateurs : condensateurcharge = 1, condensateur decharge = 0. Avantage : integration elevee, faible cout.Inconvenient : necessite un rafrachissement periodique a` cause du courant de fuitedes condensateurs. Application : realisation de la memoire vive des ordinateurs(barettes memoire SIMM : Single In-line Memory module).

    ISET Rade`s cours de microprocesseur HAGGE`GE, 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. Cestle premier microprocesseur de la famille Intel 80x86 (8086, 80186, 80286, 80386, 80486,Pentium, ...). Il se presente sous la forme dun botier DIP (Dual In-line Package) a`40 broches :

    1

    20 21

    40GND

    AD14 AD15

    AD0

    AD1

    AD2

    AD3

    AD4

    AD5

    AD6

    AD7

    AD8

    AD9

    AD10

    AD11

    AD12

    AD13

    NMI

    INTR

    CLK

    GND

    VCC

    A16/S3

    A19/S6

    A18/S5

    A17/S4

    BHE/S7

    MN/MX

    RD

    HOLD

    HLDA

    WR

    M/IO

    DT/R

    DEN

    ALE

    INTA

    TEST

    READY

    RESET

    8086

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19 22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    (RQ/GT0)

    (RQ/GT1)

    (LOCK)

    (S2)

    (S1)

    (S0)

    (QS0)

    (QS1)

    (modemaximum)

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 20 Chapitre 4 - Le microprocesseur Intel 8086

    4.2 Schema fonctionnel du 8086

    GND

    AD15

    AD0

    NMI

    INTR

    CLK

    VCC

    A16

    A19

    BHE

    MN/MX

    RD

    HOLD

    HLDA

    WR

    M/IO

    DT/R

    DEN

    ALE

    INTA

    TEST

    READY

    RESET

    8086

    S0

    S7

    horloge

    contrle dumicroprocesseur

    interruptions

    DMA

    busd'adresses/

    donnes

    signauxde contrle

    signauxd'tat

    alimentation

    4.3 Description et utilisation des signaux du 8086

    CLK : entree du signal dhorloge qui cadence le fonctionnement du microprocesseur. Cesignal provient dun generateur dhorloge : le 8284.

    8284

    CLK

    READY

    RESET

    quartz14,318 MHz

    4,77 MHz

    8086

    gnrateurd'horloge

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 4.3 - Description et utilisation des signaux du 8086 21

    RESET : entree de remise a` zero du microprocesseur. Lorsque cette entree est mise a`letat haut pendant au moins 4 periodes dhorloge, le microprocesseur est reinitialise : ilva executer linstruction se trouvant a` ladresse FFFF0H (adresse de bootstrap). Le signalde RESET est fourni par le generateur dhorloge.

    READY : entree de synchronisation avec la memoire. Ce signal provient egalement dugenerateur dhorloge.

    TEST : entree de mise en attente du microprocesseur dun evenement exterieur.

    MN/MX : entree de choix du mode de fonctionnement du microprocesseur :

    mode minimum (MN/MX = 1) : le 8086 fonctionne de manie`re autonome, il gene`relui-meme le bus de commande (RD, WR, ...) ;

    mode maximum (MN/MX = 0) : ces signaux de commande sont produits par uncontroleur de bus, le 8288. Ce mode permet de realiser des syste`mes multiproces-seurs.

    NMI et INTR : entrees de demande dinterruption. INTR : interruption normale, NMI(Non Maskable Interrupt) : interruption prioritaire.

    INTA : Interrupt Acknowledge, indique que le microprocesseur accepte linterruption.

    HOLD et HLDA : signaux de demande daccord dacce`s direct a` la memoire (DMA).

    S0 a` S7 : signaux detat indiquant le type doperation en cours sur le bus.

    A16/S3 a` A19/S6 : 4 bits de poids fort du bus dadresses, multiplexes avec 4 bitsdetat.

    AD0 a` AD15 : 16 bits de poids faible du bus dadresses, multiplexes avec 16 bitsde donnees. Le bus A/D est multiplexe (multiplexage temporel) dou` la necessite dundemultiplexage pour obtenir separement les bus dadresses et de donnees :

    16 bits de donnees (microprocesseur 16 bits) ;

    20 bits dadresses, dou` 220 = 1 Mo despace memoire adressable par le 8086.

    Chronogramme du bus A/D :

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 22 Chapitre 4 - Le microprocesseur Intel 8086

    T1 T4T3T2 T1 T4T3T2

    1 cycle de bus

    adresse donne adresse donne

    lecture

    criture

    CLK

    ADi

    ALE

    RD

    WR

    Le demultiplexage des signaux AD0 a` AD15 (ou A16/S3 a` A19/S6) se fait en memorisantladresse lorsque celle-ci est presente sur le bus A/D, a` laide dun verrou (latch), en-semble de bascules D. La commande de memorisation de ladresse est generee par lemicroprocesseur : cest le signal ALE, Address Latch Enable.Circuit de demultiplexage A/D :

    D

    H Q

    x 20

    LATCH

    AD0 - AD15A16/S3 - A19/S6

    20D0 - D15

    S3 -S6

    A0 - A19

    ALE

    8086bus d'adresses

    bus de donnes

    Fonctionnement :

    si ALE = 1, le verrou est transparent (Q = D) ; si ALE = 0, memorisation de la dernie`re valeur de D sur les sorties Q ; les signaux de lecture (RD) ou decriture (WR) ne sont generes par le microproces-

    seur que lorsque les donnees sont presentes sur le bus A/D.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 4.3 - Description et utilisation des signaux du 8086 23

    Exemples de bascules D : circuits 8282, 74373, 74573.

    AD0 - AD7ou

    AD8 - AD15ou

    A16/S3 - A19/S6

    D0D1

    D7

    Q0Q1

    Q7

    STROBE

    OE

    ALE

    A0 - A7ou

    A8 - A15ou

    A16 - A19

    8282

    RD : Read, signal de lecture dune donnee.WR : Write, signal decriture dune donnee.M/IO : Memory/Input-Output, indique si le 8086 adresse la memoire (M/IO = 1) ou lesentrees/sorties (M/IO = 0).DEN : Data Enable, indique que des donnees sont en train de circuler sur le bus A/D(equivalent de ALE pour les donnees).DT/R : Data Transmit/Receive, indique le sens de transfert des donnees :

    DT/R = 1 : donnees emises par le microprocesseur (ecriture) ; DT/R = 0 : donnees recues par le microprocesseur (lecture).

    T1 T4T3T2

    1 cycle de bus

    adresse donne

    CLK

    ADi

    ALE

    DEN

    DT/R

    lecture

    criture

    Les signaux DEN et DT/R sont utilises pour la commande de tampons de bus (buers)permettant damplier le courant fourni par le microprocesseur sur le bus de donnees.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 24 Chapitre 4 - Le microprocesseur Intel 8086

    Exemples de tampons de bus : circuits transmetteurs bidirectionnels 8286 ou 74245.

    x 8

    A0

    A1

    A7

    B0

    B1

    B7

    DIR

    EN

    8286AD0 - AD7

    ouAD8 - AD15

    D0 - D7ou

    D8 - D15

    lignes dedonnes

    bufferises

    commande du sens de

    transfert

    validationdu transfert

    DT/R

    DEN

    BHE : Bus High Enable, signal de lecture de loctet de poids fort du bus de donnees.Le 8086 posse`de un bus dadresses sur 20 bits, dou` la capacite dadressage de 1 Mo ou512 Kmots de 16 bits (bus de donnees sur 16 bits).

    Le mega-octet adressable est divise en deux banques de 512 Ko chacune : la banqueinferieure (ou paire) et la banque superieure (ou impaire). Ces deux banques sontselectionnees par :

    A0 pour la banque paire qui contient les octets de poids faible ; BHE pour la banque impaire qui contient les octets de poids fort.

    A0A1

    A18

    D0

    D7

    CS

    D1

    banquepaire

    A0A1

    A18

    D0

    D7

    CS

    D1

    banqueimpaire

    A0

    BHE

    A1 - A19

    D0 - D15

    bus d'adresses

    bus de donnes

    A1A2

    A19

    A1A2

    A19

    D0

    D7

    D1

    D8

    D15

    D9

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 4.3 - Description et utilisation des signaux du 8086 25

    Seuls les bits A1 a` A19 servent a` designer une case memoire dans chaque banque de512 Ko. Le microprocesseur peut ainsi lire et ecrire des donnees sur 8 bits ou sur 16 bits :

    BHE A0 octets transferes0 0 les deux octets (mot complet)0 1 octet fort (adresse impaire)1 0 octet faible (adresse paire)1 1 aucun octet

    Remarque : le 8086 ne peut lire une donnee sur 16 bits en une seule fois, uniquement siloctet de poids fort de cette donnee est range a` une adresse impaire et loctet de poidsfaible a` une adresse paire (alignement sur les adresses paires), sinon la lecture de cettedonnee doit se faire en deux operations successives, dou` une augmentation du tempsdexecution du transfert du a` un mauvais alignement des donnees.Realisation des deux banques avec plusieurs botiers memoire :

    A0A1

    A15

    D0

    D7

    CS

    D1

    64 K x 8

    A0A1

    A15

    D0

    D7

    CS

    D1

    64 K x 8

    A0A1

    A15

    D0

    D7

    CS

    D1

    64 K x 8

    A0A1

    A15

    D0

    D7

    CS

    D1

    64 K x 8

    A1A2

    A16

    A1A2

    A16

    A1A2

    A16

    A1A2

    A16

    D0

    D7

    D1

    D8

    D15

    D9

    D0

    D7

    D1

    D8

    D15

    D9

    Y0Y1Y2Y3Y4Y5Y6Y7

    ABC

    74138

    EN

    Y0Y1Y2Y3Y4Y5Y6Y7

    ABC

    74138

    EN

    A17A18A19

    A17A18A19

    A0

    BHE

    bus d'adresses A1 - A19

    bus de donnes D0 - D15

    banquepaire

    banqueimpaire

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 26 Chapitre 4 - Le microprocesseur Intel 8086

    Creation du bus syste`me du 8086 :

    CLK BHE/S7

    RD

    WR

    M/IO DT/R

    DEN

    ALE

    READY

    RESET

    8086

    A16/S3

    A19/S6

    AD0

    AD15

    8282

    STR

    STR

    STR

    8286

    ENDIR

    A B

    8286

    ENDIR

    A B

    8284 D Q

    8282

    D Q

    8282

    D Q

    BHEA19

    A16

    A15

    A8

    A7

    A0

    D7

    D0

    D15

    D8

    RD

    WR

    M/IO

    adre

    sses

    do

    nn

    es

    com

    man

    des

    BU

    S SY

    STEM

    E

    4.4 Organisation interne du 8086

    Le 8086 est constitue de deux unites fonctionnant en paralle`le :

    lunite dexecution (EU : Execution Unit) ; lunite dinterface de bus (BIU : Bus Interface Unit).

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 4.4 - Organisation interne du 8086 27

    AH AL

    BH BL

    CH CL

    DH DL

    SI

    DI

    SP

    BP

    = BX

    = DX

    = CX

    = AX

    DS

    SS

    ES

    CS

    IP

    registrestemporaires

    UAL

    indicateurs

    123456

    gnrationd'adresseset contrle

    de bus

    commandesde l'unit

    d'excution

    16bus de donnes

    interne

    file d'attentedes instructions

    (6 octets)

    bus externe A/Dmultiplex

    +bus de

    contrle

    8 bits 8 bits

    16 bits16 bits

    registresgnraux

    pointeurset index

    registresde segments

    pointeur d'instruction

    UNITE D'EXECUTION (EU) UNITE D'INTERFACE DE BUS (BIU)

    Role des deux unites :

    lunite dinterface de bus (BIU) recherche les instructions en memoire et les rangedans une le dattente ;

    lunite dexecution (EU) execute les instructions contenues dans la le dattente.Les deux unites fonctionnent simultanement, dou` une acceleration du processus dexecutiondun programme (fonctionnement selon le principe du pipe-line).Le microprocesseur 8086 contient 14 registres repartis en 4 groupes :

    Registres generaux : 4 registres sur 16 bits.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 28 Chapitre 4 - Le microprocesseur Intel 8086

    AX = (AH,AL) ;

    BX = (BH,BL) ;

    CX = (CH,CL) ;

    DX = (DH,DL).

    Ils peuvent etre egalement consideres comme 8 registres sur 8 bits. Ils servent a` conte-nir temporairement des donnees. Ce sont des registres generaux mais ils peuventetre utilises pour des operations particulie`res. Exemple : AX = accumulateur, CX= compteur.

    Registres de pointeurs et dindex : 4 registres sur 16 bits.Pointeurs :

    SP : Stack Pointer, pointeur de pile (la pile est une zone de sauvegarde dedonnees en cours dexecution dun programme) ;

    BP : Base Pointer, pointeur de base, utilise pour adresser des donnees surla pile.

    Index :

    SI : Source Index ;

    DI : Destination Index.Ils sont utilises pour les transferts de chanes doctets entre deux zonesmemoire.

    Les pointeurs et les index contiennent des adresses de cases memoire.

    Pointeur dinstruction et indicateurs (ags) : 2 registres sur 16 bits.Pointeur dinstruction : IP, contient ladresse de la prochaine instruction a`executer.

    Flags :O D I T S Z A P C

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

    CF : indicateur de retenue (carry) ;

    PF : indicateur de parite ;

    AF : indicateur de retenue auxiliaire ;

    ZF : indicateur de zero ;

    SF : indicateur de signe ;

    TF : indicateur dexecution pas a` pas (trap) ;

    IF : indicateur dautorisation dinterruption ;

    DF : indicateur de decrementation ;

    OF : indicateur de depassement (overow).

    Registres de segments : 4 registres sur 16 bits.CS : Code Segment, registre de segment de code ;

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 4.5 - Gestion de la memoire par le 8086 29

    DS : Data Segment, registre de segment de donnees ;

    SS : Stack Segment, registre de segment de pile ;

    ES : Extra Segment, registre de segment supplementaire pour les donnees ;

    Les registres de segments, associes aux pointeurs et aux index, permettent au mi-croprocesseur 8086 dadresser lensemble de la memoire.

    4.5 Gestion de la memoire par le 8086

    Lespace memoire adressable par le 8086 est de 220 = 1 048 576 octets = 1 Mo (20 bitsdadresses). Cet espace est divise en segments. Un segment est une zone memoire de64 Ko (65 536 octets) denie par son adresse de depart qui doit etre un multiple de 16.Dans une telle adresse, les 4 bits de poids faible sont a` zero. On peut donc representerladresse dun segment avec seulement ses 16 bits de poids fort, les 4 bits de poids faibleetant implicitement a` 0.Pour designer une case memoire parmi les 216 = 65 536 contenues dans un segment, ilsut dune valeur sur 16 bits.Ainsi, une case memoire est reperee par le 8086 au moyen de deux quantites sur 16 bits :

    ladresse dun segment ; un deplacement ou oset (appele aussi adresse eective) dans ce segment.

    Cette methode de gestion de la memoire est appelee segmentation de la memoire.

    un segment(64 Ko)

    0

    1 Mo

    00000H

    FFFFFH

    offsetadressemultiple

    de 16

    casemmoire

    La donnee dun couple (segment,oset) denit une adresse logique, notee sous la formesegment : oset.Ladresse dune case memoire donnee sous la forme dune quantite sur 20 bits (5 digitshexa) est appelee adresse physique car elle correspond a` la valeur envoyee reellementsur le bus dadresses A0 - A19.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 30 Chapitre 4 - Le microprocesseur Intel 8086

    Correspondance entre adresse logique et adresse physique :

    segment 0 0 0 0

    16 bits 4 bits

    20 bits

    offset+

    adresse physique

    20 bits

    16 bits

    Ainsi, ladresse physique se calcule par lexpression :

    adresse physique = 16 segment+ osetcar le fait dinjecter 4 zeros en poids faible du segment revient a` eectuer un decalage de4 positions vers la gauche, cest a` dire une multiplication par 24 = 16.A un instant donne, le 8086 a acce`s a` 4 segments dont les adresses se trouvent dans lesregistres de segment CS, DS, SS et ES. Le segment de code contient les instructions duprogramme, le segment de donnees contient les donnees manipulees par le programme, lesegment de pile contient la pile de sauvegarde et le segment supplementaire peut aussicontenir des donnees.Le registre CS est associe au pointeur dinstruction IP, ainsi la prochaine instruction a`executer se trouve a` ladresse logique CS : IP.

    0

    1 Mo

    00000H

    FFFFFH

    segmentde code

    CS : 0000H

    CS : IP

    instruction excuter

    offset = IP

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 4.5 - Gestion de la memoire par le 8086 31

    De meme, les registres de segments DS et ES peuvent etre associes a` un registre dindex.Exemple : DS : SI, ES : DI. Le registre de segment de pile peut etre associe aux registresde pointeurs : SS : SP ou SS : BP.

    Memoire accessible par le 8086 a` un instant donne :

    0

    1 Mo

    00000H

    FFFFFH

    segmentde pile

    SS : 0000H

    SS : SPoffset = SP

    extrasegment

    ES : 0000H

    ES : DIoffset = DI

    segmentde donnes

    DS : 0000H

    DS : SIoffset = SI

    segmentde code

    CS : 0000H

    CS : IPoffset = IP

    Remarque : les segments ne sont pas necessairement distincts les uns des autres, ilspeuvent se chevaucher ou se recouvrir comple`tement.

    segmentde pile

    segmentde donnes

    segmentde code

    SS : 0000H

    DS : 0000H

    CS : 0000H

    0

    1 Mo

    00000H

    FFFFFH

    segmentde code,

    de donneset de pile

    SS : 0000HDS : 0000HCS : 0000H

    0

    1 Mo

    00000H

    FFFFFH

    Le nombre de segments utilise denit le mode`le memoire du programme.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 32 Chapitre 4 - Le microprocesseur Intel 8086

    Contenu des registres apre`s un RESET du microprocesseur :

    IP = 0000H

    CS = FFFFH

    DS = 0000H

    ES = 0000H

    SS = 0000H

    Puisque CS contient la valeur FFFFH et IP la valeur 0000H, la premie`re instructionexecutee par le 8086 se trouve donc a` ladresse logique FFFFH : 0000H, correspondant a`ladresse physique FFFF0H (bootstrap). Cette instruction est generalement un saut versle 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 donnees externe estsur 8 bits au lieu de 16 bits, le bus de donnees interne restant sur 16 bits.Le 8088 a ete produit par Intel apre`s le 8086 pour assurer la compatibilite avec des circuitsperipheriques deja` existant, fabriques pour les microprocesseurs 8 bits 8080 et 8085.Dierences avec le 8086 :

    les broches AD8 a` AD15 deviennent A8 a` A15 (bus de donnees sur 8 bits) ; la broche BHE nexiste pas dans le 8088 car il ny a pas doctet de poids fort sur le

    bus de donnees ;

    la broche M/IO devient IO/M pour la compatibilite avec danciens circuits dE/S.Au niveau de larchitecture interne, pas de dierences avec le 8086 sauf que la le dattentedes instructions passe de 6 a` 4 octets.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • Chapitre 5

    La programmation en assembleur dumicroprocesseur 8086

    5.1 Generalites

    Chaque microprocesseur reconnait un ensemble dinstructions appele jeu dinstructions(Instruction Set) xe par le constructeur. Pour les microprocesseurs classiques, le nombredinstructions reconnues varie entre 75 et 150 (microprocesseurs CISC : Complex Instruc-tion Set Computer). Il existe aussi des microprocesseurs dont le nombre dinstructions esttre`s reduit (microprocesseurs RISC : Reduced Instruction Set Computer) : entre 10 et30 instructions, permettant dameliorer le temps dexecution des programmes.

    Une instruction est denie par son code operatoire, valeur numerique binaire dicile a`manipuler par letre humain. On utilise donc une notation symbolique pour representerles instructions : les mnemoniques. Un programme constitue de mnemoniques est appeleprogramme en assembleur.

    Les instructions peuvent etre classees en groupes :

    instructions de transfert de donnees ; instructions arithmetiques ; instructions logiques ; instructions de branchement ...

    5.2 Les instructions de transfert

    Elles permettent de deplacer des donnees dune source vers une destination :

    registre vers memoire ; registre vers registre ; memoire vers registre.

    Remarque : le microprocesseur 8086 nautorise pas les transferts de memoire vers memoire(pour ce faire, il faut passer par un registre intermediaire).

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 34 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    Syntaxe : MOV destination,sourceRemarque : MOV est labbreviation du verbe to move : deplacer.Il existe dierentes facons de specier ladresse dune case memoire dans une instruction :ce sont les modes dadressage.Exemples de modes dadressage simples :

    mov ax,bx : charge le contenu du registre BX dans le registre AX. Dans ce cas, letransfert se fait de registre a` registre : adressage par registre ;

    mov al,12H : charge le registre AL avec la valeur 12H. La donnee est fournieimmediatement avec linstruction : adressage immediat.

    mov bl,[1200H] : transfe`re le contenu de la case memoire dadresse eective (oset)1200H vers le registre BL. Linstruction comporte ladresse de la case memoire ou`se trouve la donnee : adressage direct. Ladresse eective represente loset de lacase memoire dans le segment de donnees (segment dont ladresse est contenue dansle registre DS) : segment par defaut.

    0

    1 Mo

    00000H

    FFFFFH

    segmentde donnes

    DS : 0000H

    DS : 1200Hoffset = 1200H

    BL

    mov bl, 1200H

    On peut changer le segment lors dun adressage direct en ajoutant un prexe desegment, exemple : mov bl,es :[1200H]. On parle alors de forcage de segment.

    0

    1 Mo

    00000H

    FFFFFH

    extrasegment

    ES : 0000H

    ES : 1200Hoffset = 1200H

    BL

    mov bl, es : 1200H

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.2 - Les instructions de transfert 35

    Remarque : dans le cas de ladressage immediat de la memoire, il faut indiquer le formatde la donnee : octet ou mot (2 octets) car le microprocesseur 8086 peut manipuler desdonnees sur 8 bits ou 16 bits. Pour cela, on doit utiliser un specicateur de format :

    mov byte ptr [1100H],65H : transfe`re la valeur 65H (sur 1 octet) dans la casememoire doset 1100H ;

    mov word ptr [1100H],65H : transfe`re la valeur 0065H (sur 2 octets) dans les casesmemoire doset 1100H et 1101H.

    mov byte ptr 1100H , 65H mov word ptr 1100H , 65H

    1100H

    1101H

    1100H 65H

    00H

    65H 1 octet2 octets

    Remarque : les microprocesseurs Intel rangent loctet de poids faible dune donnee surplusieurs octets a` ladresse la plus basse (format Little Endian).Modes dadressage evolues :

    adressage base : loset est contenu dans un registre de base BX ou BP.Exemples :

    mov al,[bx] : transfe`re la donnee dont loset est contenu dans le registre debase BX vers le registre AL. Le segment associe par defaut au registre BX estle segment de donnees : on dit que ladressage est base sur DS ;

    mov al,[bp] : le segment par defaut associe au registre de base BP est lesegment de pile. Dans ce cas, ladressage est base sur SS.

    0

    1 Mo

    00000H

    FFFFFH

    segmentde donnes

    DS : 0000H

    DS : BXoffset = BX

    AL

    mov al, bx

    0

    1 Mo

    00000H

    FFFFFH

    segmentde pile

    SS : 0000H

    SS : BPoffset = BP

    AL

    mov al, bp

    adressage indexe : semblable a` ladressage base, sauf que loset est contenu dansun registre dindex SI ou DI, associes par defaut au segment de donnees.

    Exemples :

    mov al,[si] : charge le registre AL avec le contenu de la case memoire dontloset est contenu dans SI ;

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 36 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    mov [di],bx : charge les cases memoire doset DI et DI + 1 avec le contenudu registre BX.

    Remarque : une valeur constante peut eventuellement etre ajoutee aux registres de baseou dindex pour obtenir loset. Exemple :

    mov [si+100H],ax

    qui peut aussi secriremov [si][100H],ax

    ou encoremov 100H[si],ax

    Les modes dadressage bases ou indexes permettent la manipulation de tableaux rangesen memoire. Exemple :

    mov si,0

    mov word ptr table[si],1234H

    mov si,2

    mov word ptr table[si],5678H

    Dans cet exemple, table represente loset du premier element du tableau et le registreSI joue le role dindice de tableau :

    12H

    34H

    56H

    78H

    DS : table 0

    DS : table SI

    adressage base et indexe : loset est obtenu en faisant la somme dun registrede base, dun registre dindex et dune valeur constante. Exemple :

    mov ah,[bx+si+100H]

    Ce mode dadressage permet ladressage de structures de donnees complexes : ma-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 role dindices de ligne et decolonne dans la matrice.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.3 - Les instructions arithmetiques 37

    5.3 Les instructions arithmetiques

    Les instructions arithmetiques de base sont laddition, la soustraction, la multipli-cation et la division qui incluent diverses variantes. Plusieurs modes dadressage sontpossibles.Addition : ADD operande1,operande2Loperation eectuee est : operande1 operande1+ operande2.Exemples :

    add ah,[1100H] : ajoute le contenu de la case memoire doset 1100H a` laccumu-lateur AH (adressage direct) ;

    add ah,[bx] : ajoute le contenu de la case memoire pointee par BX a` laccumulateurAH (adressage base) ;

    add byte ptr [1200H],05H : ajoute la valeur 05H au contenu de la case memoiredoset 1200H (adressage immediat).

    Soustraction : SUB operande1,operande2Loperation eectuee est : operande1 operande1 operande2.Multiplication : MUL operande, ou` operande est un registre ou une case memoire.Cette instruction eectue la multiplication du contenu de AL par un operande sur 1 octetou du contenu de AX par un operande sur 2 octets. Le resultat est place dans AX si lesdonnees a` multiplier sont sur 1 octet (resultat sur 16 bits), dans (DX,AX) si elles sont sur2 octets (resultat sur 32 bits).Exemples :

    mov al,51mov bl,32

    mul bl

    AX = 51 32 mov ax,4253mov bx,1689

    mul bx

    (DX,AX) = 4253 1689 mov al,43mov byte ptr [1200H],28

    mul byte ptr [1200H]

    AX = 43 28 mov ax,1234mov word ptr [1200H],5678

    mul word ptr [1200H]

    (DX,AX) = 1234 5678Division : DIV operande, ou` operande est un registre ou une case memoire.Cette instruction eectue la division du contenu de AX par un operande sur 1 octet ou lecontenu de (DX,AX) par un operande sur 2 octets. Resultat : si loperande est sur 1 octet,

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 38 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    alors AL = quotient et AH = reste ; si loperande est sur 2 octets, alors AX = quotientet DX = reste.Exemples :

    mov ax,35mov bl,10

    div bl

    AL = 3 (quotient) et AH = 5 (reste) mov dx,0mov ax,1234

    mov bx,10

    div bx

    AX = 123 (quotient) et DX = 4 (reste)Autres instructions arithmetiques :

    ADC : addition avec retenue ; SBB : soustraction avec retenue ; INC : incrementation dune unite ; DEC : decrementation dune unite ; IMUL : multiplication signee ; IDIV : division signee.

    5.4 Les instructions logiques

    Ce sont des instructions qui permettent de manipuler des donnees au niveau des bits. Lesoperations logiques de base sont :

    ET ; OU ; OU exclusif ; complement a` 1 ; complement a` 2 ; decalages et rotations.

    Les dierents modes dadressage sont disponibles.

    ET logique : AND operande1,operande2Loperation eectuee est : operande1 operande1 ET operande2.Exemple :

    mov al,10010110B

    mov bl,11001101B

    and al, bl

    AL = 1 0 0 1 0 1 1 0BL = 1 1 0 0 1 1 0 1AL = 1 0 0 0 0 1 0 0

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.4 - Les instructions logiques 39

    Application : masquage de bits pour mettre a` zero certains bits dans un mot.Exemple : masquage des bits 0, 1, 6 et 7 dans un octet :

    7 6 5 4 3 2 1 0

    0 1 0 1 0 1 1 10 0 1 1 1 1 0 0 masque0 0 0 1 0 1 0 0

    OU logique : OR operande1,operande2Loperation eectuee est : operande1 operande1 OU operande2.Application : mise a` 1 dun ou plusieurs bits dans un mot.Exemple : dans le mot 10110001B on veut mettre a` 1 les bits 1 et 3 sans modier lesautres bits.

    7 6 5 4 3 2 1 0

    1 0 1 1 0 0 0 10 0 0 0 1 0 1 0 masque1 0 1 1 1 0 1 1

    Les instructions correspondantes peuvent secrire :mov ah,10110001B

    or ah,00001010B

    Complement a` 1 : NOT operandeLoperation eectuee est : operande operande.Exemple :

    mov al,10010001B

    not al AL = 10010001B = 01101110B

    Complement a` 2 : NEG operandeLoperation eectuee est : operande operande+ 1.Exemple :

    mov al,25

    mov bl,12

    neg bl

    add al,bl

    AL = 25 + (12) = 13

    OU exclusif : XOR operande1,operande2Loperation eectuee est : operande1 operande1 operande2.Exemple : mise a` zero dun registre :

    mov al,25

    xor al,al AL = 0

    Instructions de decalages et de rotations : ces instructions deplacent dun certainnombre de positions les bits dun mot vers la gauche ou vers la droite.Dans les decalages, les bits qui sont deplaces sont remplaces par des zeros. Il y a lesdecalages logiques (operations non signees) et les decalages arithmetiques (operationssignees).

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 40 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    Dans les rotations, les bits deplaces dans un sens sont reinjectes de lautre cote du mot.

    Decalage logique vers la droite (Shift Right) : SHR operande,nCette instruction decale loperande de n positions vers la droite.

    Exemple :

    mov al,11001011B

    shr al,1

    1 1 0 0 1 0 1 1

    0 1 1 0 0 1 0 1 1CF

    avant

    aprs

    entree dun 0 a` la place du bit de poids fort ; le bit sortant passe a` travers lindicateurde retenue CF.

    Remarque : si le nombre de bits a` decaler est superieur a` 1, ce nombre doit etre placedans le registre CL ou CX.

    Exemple : decalage de AL de trois positions vers la droite :

    mov cl,3

    shr al,cl

    Decalage logique vers la gauche (Shift Left) : SHL operande,nCette instruction decale loperande de n positions vers la droite.

    Exemple :

    mov al,11001011B

    shl al,1

    1 1 0 0 1 0 1 1

    1 0 0 1 0 1 1 0

    avant

    aprs

    1CF

    entree dun 0 a` la place du bit de poids faible ; le bit sortant passe a` travers lindicateurde retenue CF.

    Meme remarque que precedemment si le nombre de positions a` decaler est superieur a` 1.

    Decalage arithmetique vers la droite : SAR operande,nCe decalage conserve le bit de signe bien que celui-ci soit decale.

    Exemple :

    mov al,11001011B

    sar al,1

    1 1 0 0 1 0 1 1

    1 1 1 0 0 1 0 1 1CF

    avant

    aprs

    le bit de signe est reinjecte.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.4 - Les instructions logiques 41

    Decalage arithmetique vers la gauche : SAR operande,nIdentique au decalage logique vers la gauche.

    Applications des instructions de decalage :

    cadrage a` droite dun 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

    test de letat dun bit dans un mot.Exemple : on veut determiner letat du bit 5 de AL :

    mov cl,6

    shr al,clou

    mov cl,3

    shl al,cl

    avec un decalage de 6 positions vers la droite ou 4 positions vers la gauche, lebit 5 de AL est transfere dans lindicateur de retenue CF. Il sut donc de tester cetindicateur.

    multiplication ou division par une puissance de 2 : un decalage a` droite revient a`faire une division par 2 et un decalage a` gauche, une multiplication par 2.Exemple :

    mov al,48

    mov cl,3

    shr al,cl

    AL = 48/23 = 6

    Rotation a` droite (Rotate Right) : ROR operande,nCette instruction decale loperande de n positions vers la droite et reinjecte par la gaucheles bits sortant.

    Exemple :

    mov al,11001011B

    ror al,1

    1 1 0 0 1 0 1 1

    1 1 1 0 0 1 0 1 1CF

    avant

    aprs

    reinjection du bit sortant qui est copie dans lindicateur de retenue CF.Rotation a` gauche (Rotate Left) : ROL operande,nCette instruction decale loperande de n positions vers la gauche et reinjecte par la droiteles bits sortant.

    Exemple :

    mov al,11001011B

    rol al,1

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 42 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    1 1 0 0 1 0 1 1

    1 0 0 1 0 1 1 1

    avant

    aprs

    1CF

    reinjection du bit sortant qui est copie dans lindicateur de retenue CF.Rotation a` droite avec passage par lindicateur de retenue (Rotate Right throughCarry) : RCR operande,nCette instruction decale loperande de n positions vers la droite en passant par lindicateurde retenue CF.Exemple :

    mov al,11001011B

    rcr al,1

    1 1 0 0 1 0 1 1

    x 1 1 0 0 1 0 1 1CF

    avant

    aprs

    valeurprcdente

    de CF

    le bit sortant par la droite est copie dans lindicateur de retenue CF et la valeurprecedente de CF est reinjectee par la gauche.Rotation a` gauche avec passage par lindicateur de retenue (Rotate Left throughCarry) : RCL operande,nCette instruction decale loperande de n positions vers la gauche en passant par lindicateurde retenue CF.Exemple :

    mov al,11001011B

    rcl al,1

    1 1 0 0 1 0 1 1

    1 0 0 1 0 1 1 x

    avant

    aprs

    1CF

    valeurprcdente

    de CF

    le bit sortant par la gauche est copie dans lindicateur de retenue CF et la valeurprecedente de CF est reinjectee par la droite.

    5.5 Les instructions de branchement

    Les instructions de branchement (ou saut) permettent de modier lordre dexecution desinstructions du programme en fonction de certaines conditions. Il existe 3 types de saut :

    saut inconditionnel ; sauts conditionnels ; appel de sous-programmes.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.5 - Les instructions de branchement 43

    Instruction de saut inconditionnel : JMP labelCette instruction eectue un saut (jump) vers le label specie. Un label (ou etiquette)est une representation symbolique dune instruction en memoire :

    ...

    } instructions precedant le saut

    jmp suite...

    } instructions suivant le saut (jamais executees)

    suite : . . . instruction executee apre`s le sautExemple :

    boucle : inc ax

    dec bx

    jmp boucle

    boucle innie

    Remarque : linstruction JMP ajoute au registre IP (pointeur dinstruction) le nombredoctets (distance) qui separe linstruction de saut de sa destination. Pour un saut enarrie`re, la distance est negative (codee en complement a` 2).Instructions de sauts conditionnels : Jcondition labelUn saut conditionnel nest execute que si une certaine condition est satisfaite, sinonlexecution se poursuit sequentiellement a` linstruction suivante.La condition du saut porte sur letat de lun (ou plusieurs) des indicateurs detat (ags)du microprocesseur :

    instruction nom condition

    JZ label Jump if Zero saut si ZF = 1JNZ label Jump if Not Zero saut si ZF = 0JE label Jump if Equal saut si ZF = 1JNE label Jump if Not Equal saut si ZF = 0JC label Jump if Carry saut si CF = 1JNC label Jump if Not Carry saut si CF = 0JS label Jump if Sign saut si SF = 1JNS label Jump if Not Sign saut si SF = 0JO label Jump if Overow saut si OF = 1JNO label Jump if Not Overow saut si OF = 0JP label Jump if Parity saut si PF = 1JNP label Jump if Not Parity saut si PF = 0

    Remarque : les indicateurs sont positionnes en fonction du resultat de la dernie`reoperation.Exemple :

    ...

    } instructions precedant le saut conditionnel

    jnz suite...

    } instructions executees si la condition ZF = 0 est veriee

    suite : . . . instruction executee a` la suite du saut

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 44 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    Remarque : il existe un autre type de saut conditionnel, les sauts arithmetiques. Ilssuivent en general linstruction de comparaison : CMP operande1,operande2

    condition nombres signes nombres non signes

    = JEQ label JEQ label> JG label JA label< JL label JB label= JNE label JNE label

    Exemple :cmp ax,bx

    jg superieur

    jl inferieur

    superieur : . . ....

    inferieur : . . .

    Exemple dapplication des instructions de sauts conditionnels : on veut additionner deuxnombres signes N1 et N2 se trouvant respectivement aux osets 1100H et 1101H. Leresultat est range a` loset 1102H sil est positif, a` loset 1103H sil est negatif et a`loset 1104H sil est nul :

    Organigramme : Programme :

    dbut

    N1 + N2

    rsultat> 0

    rsultat= 0

    ranger le rsultat l'offset 1103H

    ranger le rsultat l'offset 1104H

    ranger le rsultat l'offset 1102H

    fin

    oui

    non

    oui

    non

    mov al,[1100H]

    add al,[1101H]

    js negatif

    jz nul

    mov [1102H],al

    jmp fin

    negatif : mov [1103H],al

    jmp fin

    nul : mov [1104H],al

    fin : hlt

    Appel de sous-programmes : pour eviter la repetition dune meme sequence dins-tructions plusieurs fois dans un programme, on redige la sequence une seule fois en luiattribuant un nom (au choix) et on lappelle lorsquon en a besoin. Le programme ap-

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.5 - Les instructions de branchement 45

    pelant est le programme principal. La sequence appelee est un sous-programme ouprocedure.Ecriture dun sous-programme :

    nom sp PROC...

    } instructions du sous-programme

    ret instruction de retour au programme principalnom sp ENDP

    Remarque : une procedure peut etre de type NEAR si elle se trouve dans le meme segmentou de type FAR si elle se trouve dans un autre segment.Exemple : ss prog1 PROC NEAR

    ss prog2 PROC FARAppel dun sous-programme par le programme principal : CALL procedure

    ...

    } instructions precedant lappel au sous-programme

    call nom sp appel au sous-programme...

    } instructions executees apre`s le retour au programme principal

    Lors de lexecution de linstruction CALL, le pointeur dinstruction IP est charge avecladresse de la premie`re instruction du sous-programme. Lors du retour au programmeappelant, linstruction suivant le CALL doit etre executee, cest-a`-dire que IP doit etrerecharge avec ladresse de cette instruction.

    programmeprincipal

    sous-programme

    CALL

    RET

    1000H

    2100H

    2000H

    1002H

    valeur de IPavant l'appel

    au sous-programme

    valeur de IPaprs l'appel

    au sous-programme

    valeur de IP la fin du

    sous-programme

    valeur de IPau retour du

    sous-programme

    Avant de charger IP avec ladresse du sous-programme, ladresse de retour au programmeprincipal, cest-a`-dire le contenu de IP, est sauvegardee dans une zone memoire particulie`reappelee pile. Lors de lexecution de linstruction RET, cette adresse est recuperee a` partirde la pile et rechargee dans IP, ainsi le programme appelant peut se poursuivre.Fonctionnement de la pile : la pile est une zone memoire fonctionnant en mode LIFO(Last In First Out : dernier entre, premier sorti). Deux operations sont possibles sur lapile :

    empiler une donnee : placer la donnee au sommet de la pile ; depiler une donnee : lire la donnee se trouvant au sommet de la pile.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 46 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    Le sommet de la pile est repere par un registre appele pointeur de pile (SP : StackPointer) qui contient ladresse de la dernie`re donnee empilee.

    La pile est denie dans le segment de pile dont ladresse de depart est contenue dansle registre SS.

    0

    1 Mo

    00000H

    FFFFFH

    segment de pile

    SS : 0000H

    SS : SP

    segment de code

    CS : 0000H

    sommetde la pilesens de

    croissancede la pile

    sens decroissance

    du programme

    Remarque : la pile et le programme croissent en sens inverse pour diminuer le risque decollision entre le code et la pile dans le cas ou` celle-ci est placee dans le meme segmentque le code (SS = CS).

    Lors de lappel a` un sous-programme, ladresse de retour au programme appelant (contenude IP) est empilee et le pointeur de pile SP est automatiquement decremente. Au retourdu sous-programme, le pointeur dinstruction IP est recharge avec la valeur contenuesommet de la pile et SP est incremente.

    0

    1 Mo

    00000H

    FFFFFH

    segment de pile

    SS : 0000H

    SS : SPSS : SP

    SS : FFFFH

    dcrmentationde SP de 2 units

    adresse deretour au

    sous-programme(2 octets)

    La pile peut egalement egalement servir a` sauvegarder le contenu de registres qui ne sontpas automatiquement sauvegardes lors de lappel a` un sous programme :

    instruction dempilage : PUSH operande instruction de depilage : POP operande

    ou` operande est un registre ou une donnee sur 2 octets (on ne peut empiler que des motsde 16 bits).

    Exemple :

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.5 - Les instructions de branchement 47

    push ax ; empilage du registre AX ...

    push bx ; ... du registre BX ...

    push [1100H] ; ... et de la case memoire 1100H-1101H...

    pop [1100H] ; depilage dans lordre inverse de lempilage

    pop bx

    pop ax

    Remarque : la valeur de SP doit etre initialisee par le programme principal avant depouvoir utiliser la pile.

    Utilisation de la pile pour le passage de parame`tres : pour transmettre des pa-rame`tres a` une procedure, on peut les placer sur la pile avant lappel de la procedure, puiscelle-ci les recupe`re en eectuant un adressage base de la pile en utilisant le registre BP.

    Exemple : soit une procedure eectuant la somme de deux nombres et retournant leresultat dans le registre AX :

    programme principal :mov ax,200

    push ax ; empilage du premier parame`tre

    mov ax,300

    push ax ; empilage du deuxie`me parame`tre

    call somme ; appel de la procedure somme

    procedure somme :somme proc

    push bp ; sauvegarde de BP

    mov bp,sp ; faire pointer BP sur le sommet de la pile

    mov ax,[bp+4] ; recuperation du deuxie`me parame`tre

    add ax,[bp+6] ; addition au premier parame`tre

    pop bp ; restauration de lancienne valeur de BP

    ret 4 ; retour et depilage des parame`tres

    somme endp

    Linstruction ret 4 permet de retourner au programme principal et dincrementer lepointeur de pile de 4 unites pour depiler les parame`tres an de remettre la pile dans sonetat initial.

    Etat de la pile :

    segment de pile

    SS : 0000H

    SS : SP

    SS : FFFFH

    2 octets(sommetde la pile)

    avant CALL

    segment de pile

    SS : 0000H

    SS : SP

    SS : FFFFH

    2 octets

    aprs CALL

    2 octets2 octets

    SS : BP+4SS : BP+6paramtre 1 (200)

    paramtre 2 (300)adresse de retour

    segment de pile

    SS : 0000H

    SS : SP

    SS : FFFFHaprs POP BP et RET 4

    retour de la pile son tat initial

    = SS : BPancienne valeur de BP2 octets

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 48 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    5.6 Methodes de programmation

    Etapes de la realisation dun programme :

    Denir le proble`me a` resoudre : que faut-il faire exactement ? Determiner des algorithmes, des organigrammes : comment faire ? Par quoi com-

    mencer, puis poursuivre ?

    Rediger le programme (code source) : utilisation du jeu dinstructions (mnemoniques) ;

    creation de documents explicatifs (documentation).

    Tester le programme en reel ; Corriger les erreurs (bugs) eventuelles : deboguer le programme puis refaire des

    tests jusqua` obtention dun programme fonctionnant de manie`re satisfaisante.

    Langage machine et assembleur :

    Langage machine : codes binaires correspondant aux instructions ; Assembleur : logiciel de traduction du code source ecrit en langage assembleur

    (mnemoniques).

    Realisation pratique dun programme :

    Redaction du code source en assembleur a` laide dun editeur (logiciel de traitementde texte ASCII) :

    edit sous MS-DOS,

    notepad (bloc-note) sous Windows,

    Assemblage du code source (traduction des instructions en codes binaires) avec unassembleur :

    MASM de Microsoft,

    TASM de Borland,

    A86 disponible en shareware sur Internet, ...

    pour obtenir le code objet : code machine executable par le microprocesseur ;

    Chargement en memoire centrale et execution : role du syste`me dexploitation (or-dinateur) ou dun moniteur (carte de developpement a` base de microprocesseur).

    Pour la mise au point (debogage) du programme, on peut utiliser un programme daidea` la mise au point (comme DEBUG sous MS-DOS) permettant :

    lexecution pas a` pas ; la visualisation du contenu des registres et de la memoire ; la pose de points darret ...

    Structure dun chier source en assembleur : pour faciliter la lisibilite du codesource en assembleur, on le redige sous la forme suivante :

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 5.6 - Methodes de programmation 49

    labels instructions commentaireslabel1 : mov ax,60H ; ceci est un commentaire ...

    ......

    ...

    sous prog1 proc near ; sous-programme...

    ......

    sous prog1 endp...

    ......

    Directives pour lassembleur :

    Origine du programme en memoire : ORG offsetExemple : org 1000H

    Denitions de constantes : nom constante EQU valeurExemple : escape equ 1BH

    Reservation de cases memoires :nom variable DB valeur initiale

    nom variable DW valeur initiale

    DB : Dene Byte, reservation dun octet ;DW : Dene Word, reservation dun mot (2 octets).Exemples :

    nombre1 db 25

    nombre2 dw ? ; pas de valeur initiale

    buffer db 100 dup ( ?) ; reservation dune zone memoire

    ; de 100 octets

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 50 Chapitre 5 - La programmation en assembleur du microprocesseur 8086

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • Chapitre 6

    Les interfaces dentrees/sorties

    6.1 Denitions

    Une interface dentrees/sorties est un circuit integre permettant au microprocesseur decommuniquer avec lenvironnement exterieur (peripheriques) : clavier, ecran, imprimante,modem, disques, processus industriel, ...

    Les interfaces dE/S sont connectees au microprocesseur a` travers les bus dadresses, dedonnees et de commandes.

    microprocesseur

    priphrique 1

    donnes

    adresses

    commandes

    priphrique 2

    interface 1 interface 2

    environnementextrieur

    calc

    ula

    teu

    r

    port 1 port 2

    Les points dacce`s aux interfaces sont appeles ports.

    Exemples :

    interface port exemple de peripherique

    interface paralle`le port paralle`le imprimanteinterface serie port serie modem

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 52 Chapitre 6 - Les interfaces dentrees/sorties

    Schema synoptique dun circuit dE/S :

    circuitd'E/S

    lignesd'E/S

    D0 - Dnlignes dedonnes

    A0 - Aplignes

    d'adresses(p = 1 ou 2, en gnral)

    RD

    CS

    WR

    commandesde lecture/

    criture

    signal deselectionde botier

    mic

    rop

    roce

    sseu

    r

    pr

    iph

    riq

    ues

    6.2 Adressage des ports dE/S

    Un circuit dE/S posse`de des registres pour gerer les echanges avec les peripheriques :

    registres de conguration ; registres de donnees.

    A chaque registre est assigne une adresse : le microprocesseur acce`de a` un port dE/S enspeciant ladresse de lun de ses registres.Le microprocesseur peut voir les adresses des ports dE/S de deux manie`res :

    adressage cartographique : les adresses des ports dE/S appartiennent au memeespace memoire que les circuits memoire (on dit que les E/S sont mappees enmemoire) :

    circuitsmmoire

    circuitsd'E/S

    espacemmoire

    totaladressable

    00000H

    FFFFFH

    Consequences :

    lespace dadressage des memoires diminue ;

    ladressage des ports dE/S se fait avec une adresse de meme longueur (memenombre de bits) que pour les cases memoires ;

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 6.3 - Gestion des ports dE/S par le 8086 53

    toutes les instructions employees avec des cases memoires peuvent etre ap-pliquees aux ports dE/S : les memes instructions permettent de lire et ecriredans la memoire et les ports dE/S, tous les modes dadressage etant valablespour les E/S.

    adressage independant : le microprocesseur conside`re deux espaces distincts : lespace dadressage des memoires ;

    lespace dadressage des ports dE/S.

    Cest le cas du microprocesseur 8086 :

    circuitsmmoire

    circuitsd'E/S

    00000H

    FFFFFH

    0000H

    FFFFH

    espace mmoire espace E/S

    1 Mo

    64 Ko

    Consequences :

    contrairement a` ladressage cartographique, lespace memoire total adressablenest pas diminue ;

    ladressage des port dE/S peut se faire avec une adresse plus courte (nombrede bits inferieur) que pour les circuits memoires ;

    les instructions utilisees pour lacce`s a` la memoire ne sont plus utilisables pourlacce`s aux ports dE/S : ceux-ci disposent dinstructions speciques ;

    une meme adresse peut designer soit une case memoire, soit un port dE/S : lemicroprocesseur doit donc fournir un signal permettant de dierencier ladres-sage de la memoire de ladressage des ports dE/S.

    Remarque : ladressage independant des ports dE/S nest possible que pour les micro-processeurs possedant un signal permettant de dierencier ladressage de la memoire deladressage des ports dE/S ainsi que les instructions speciques pour lacce`s aux portsdE/S. Par contre, ladressage cartographique est possible pour tous les microprocesseurs.

    6.3 Gestion des ports dE/S par le 8086

    Le 8086 dispose dun espace memoire de 1 Mo (adresse dune case memoire sur 20 bits)et dun espace dE/S de 64 Ko (adresse dun port dE/S sur 16 bits).Le signal permettant de dierencier ladressage de la memoire de ladressage des portsdE/S est la ligne M/IO :

    pour un acce`s a` la memoire, M/IO = 1 ; pour un acce`s aux ports dE/S, M/IO = 0.

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 54 Chapitre 6 - Les interfaces dentrees/sorties

    Ce signal est utilise pour valider le decodage dadresse dans les deux espaces :

    A

    G1

    G2A

    G2B

    B

    C

    74138

    Y1

    Y5

    Y4

    Y2

    Y7

    Y6

    Y3

    Y0

    A

    G1

    G2A

    G2B

    B

    C

    74138

    Y1

    Y5

    Y4

    Y2

    Y7

    Y6

    Y3

    Y0va

    lidat

    ion

    valid

    atio

    n

    M/IO

    +5 V

    bu

    s d

    'ad

    ress

    esb

    us

    d'a

    dre

    sses

    signaux devalidation

    des circuitsmmoire

    signaux devalidation

    des circuitsd'E/S

    dcodeur 3 vers 8

    Les instructions de lecture et decriture dun port dE/S sont respectivement les instruc-tions IN et OUT. Elles placent la ligne M/IO a` 0 alors que linstruction MOV placecelle-ci a` 1.Lecture dun port dE/S :

    si ladresse du port dE/S est sur un octet :IN AL,adresse : lecture dun port sur 8 bits ;

    IN AX,adresse : lecture dun port sur 16 bits.

    si ladresse du port dE/S est sur deux octets :IN AL,DX : lecture dun port sur 8 bits ;

    IN AX,DX : lecture dun port sur 16 bits.

    ou` le registre DX contient ladresse du port dE/S a` lire.

    Ecriture dun port dE/S :

    si ladresse du port dE/S est sur un octet :OUT adresse,AL : ecriture dun port sur 8 bits ;

    OUT adresse,AX : ecriture dun port sur 16 bits.

    si ladresse du port dE/S est sur deux octets :OUT DX,AL : ecriture dun port sur 8 bits ;

    OUT DX,AX : ecriture dun port sur 16 bits.

    ou` le registre DX contient ladresse du port dE/S a` ecrire.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 6.4 - Linterface paralle`le 8255 55

    Exemples :

    lecture dun port dE/S sur 8 bits a` ladresse 300H :mov dx,300H

    in al,dx

    ecriture de la valeur 1234H dans le port dE/S sur 16 bits a` ladresse 49H :mov ax,1234H

    out 49H,ax

    6.4 Linterface paralle`le 8255

    Le role dune interface paralle`le est de transferer des donnees du microprocesseur versdes peripheriques et inversement, tous les bits de donnees etant envoyes ou recus simul-tanement.

    microprocesseur

    donnes

    adresses

    commandes

    interfaceparallle

    sortie dedonnes

    en parallle

    entre dedonnes

    en parallle

    Le 8255 est une interface paralle`le programmable : elle peut etre conguree en entreeet/ou en sortie par programme.

    Brochage du 8255 :

    1

    20 21

    40

    D0

    D1

    D2

    D3

    D4

    D5

    D6

    D7

    GND

    VCC

    RD WR

    RESET8255

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19 22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    A0

    A1

    PA0

    PA4

    PA7

    PA6

    PA5

    PA3

    PA2

    PA1

    PB6

    PB2

    PB5

    PB3

    PB0

    PB1 PB4

    PB7

    PC3

    PC5

    PC4

    PC6

    PC7

    PC2

    PC0

    PC1

    CS

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 56 Chapitre 6 - Les interfaces dentrees/sorties

    Schema fonctionnel :

    GNDVCC

    alimentation

    RD

    WR

    RESET

    A0

    A1

    CS

    D0 - D7bus de

    donnes

    8

    4

    4

    8

    8255

    port A(PA0 - PA7)

    port B(PB0 - PB7)

    port Chaut

    (PC4 - PC7)

    port Cbas

    (PC0 - PC3)

    gro

    up

    e A

    gro

    up

    e B

    lignes decontrle

    Le 8255 contient 4 registres :

    trois registres contenant les donnees presentes sur les ports A, B et C ; un registre de commande pour la conguration des port A, B et C en entrees et/ou

    en sorties.

    Acce`s aux registres du 8255 : les lignes dadresses A0 et A1 denissent les adressesdes registres du 8255 :

    A1 A0 RD WR CS operation

    0 0 0 1 0 lecture du port A0 1 0 1 0 lecture du port B1 0 0 1 0 lecture du port C0 0 1 0 0 ecriture du port A0 1 1 0 0 ecriture du port B1 0 1 0 0 ecriture du port C1 1 1 0 0 ecriture du registre de commandeX X X X 1 pas de transaction1 1 0 1 0 illegalX X 1 1 0 pas de transaction

    Remarque : le registre de commande est accessible uniquement en ecriture, la lecture dece registre nest pas autorisee.Conguration du 8255 : les ports peuvent etre congures en entrees ou en sorties selonle 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 congures en entrees/sorties de base. Lesdonnees ecrites dans les registres correspondants sont memorisees sur les lignes de sor-ties ; letat des lignes dentrees est recopie dans les registres correspondants et nest pasmemorise.Les modes 1 et 2 sont plus complexes. Ils sont utilises pour le dialogue avec des peripheriquesnecessitant un asservissement.

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 6.4 - Linterface paralle`le 8255 57

    Structure du registre de commande :

    D0D5D6 D4 D3D7 D2 D1

    Groupe A

    port C haut1 = entre0 = sortie

    port A1 = entre0 = sortie

    slection demode :00 = mode 001 = mode 11x = mode 2

    drapeau1 = actif

    Groupe Bport C bas1 = entre0 = sortie

    port B1 = entre0 = sortie

    slection demode :0 = mode 01 = mode 1

    Connexion du 8255 sur les bus du 8086 : le bus de donnees du 8255 est sur 8 bitsalors que celui du microprocesseur 8086 est sur 16 bits. On peut donc connecter le bus dedonnees du 8255 sur les lignes de donnees de poids faible du 8086 (D0 - D7) ou sur cellesde poids fort (D8 - D15).

    Une donnee est envoyee (ou recue) par le microprocesseur 8086 :

    sur la partie faible du bus de donnees lorsque ladresse a` ecrire (ou a` lire) est paire :validation par A0 ;

    sur la partie haute lorsque ladresse est impaire : validation par BHE.Ainsi lun de ces deux signaux A0 ou BHE doit etre utilise pour selectionner le 8255 :

    RD

    WR

    A0

    A1

    CS

    D0 - D7ou

    D8 - D158255

    RD

    WR

    A1

    A2

    A0 ou BHE

    M/IO

    A3 - A15

    validation

    dcodeurd'adresses

    D0...

    D7

    Consequence : les adresses des registres du 8255 se trouvent a` des adresses paires (valida-tion par A0) ou impaires (validation par BHE).

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 58 Chapitre 6 - Les interfaces dentrees/sorties

    Le decodeur dadresses determine ladresse de base du 8255 ; les lignes A1 et A2determinent les adresses des registres du 8255.

    Exemple : connexion du 8255 sur la partie faible du bus de donnees du 8086, avec decodagedadresses incomplet (les lignes dadresses A3 - A15 ne sont pas toutes utilisees) :

    RD

    WR

    A0

    A1

    CS

    D0 - D7 8255

    RD

    WR

    A1

    A2

    A0

    M/IO

    A

    G1

    G2A

    G2B

    B

    C

    74138

    Y1

    Y5

    Y4

    Y2

    Y7

    Y6

    Y3

    Y0va

    lidat

    ion

    +5 V

    A8

    A9

    A10

    D0...

    D7

    Determination de ladresse du 8255 :

    A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0X X X X X 0 1 1 X X X X X A1 A0 0

    adresse de base selection CS= 300H de registre = 0

    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 decodage dadresses etant incomplet, le 8255 apparat dans plusieursplages dadresses selon les valeurs des bits dadresses non decodes (A7 - A13 et A12 -A15). Dans cet exemple, ladresse de base 300H correspond a` la premie`re adresse possible(bits dadresses non decodes tous egaux a` 0).

    Remarque : si on veut que le 8255 posse`de des adresses consecutives (par exemple 300H,301H, 302H et 303H), on peut utiliser le schema suivant qui exploite tout le bus de donnees(D0 - D15) du 8086 :

    ISET Rade`s cours de microprocesseur HAGGE`GE, 2003

  • 6.4 - Linterface paralle`le 8255 59

    RD

    WR

    A0

    A1

    CS

    8255

    RD

    WR

    A1

    A0

    BHE

    M/IO

    A2- A15

    validation

    dcodeurd'adresses

    A B

    DIR

    EN

    8286

    A B

    DIR

    EN

    8286

    D0...

    D7

    DT/R8

    8

    8

    PA

    PB

    PC

    transmetteurbidirectionnel

    D0 - D7

    D8 - D15

    Exemple de programmation : soit le montage suivant :

    D0 - D7 8255

    D0...

    D7

    8086

    adressede base= 300H

    01

    01

    01

    PA0

    PA1

    PA2

    PB0

    K1

    K2

    K0

    LED

    On veut que la led sallume lorsquon a la combinaison : K0 = 1 et K1 = 0 et K2 = 1.

    Programme :

    HAGGE`GE, 2003 cours de microprocesseur ISET Rade`s

  • 60 Chapitre 6 - Les interfaces dentrees/sorties

    portA equ 300H ; adresses des registres du 8255

    portB equ 302H

    portC equ 304H

    controle equ 306H

    mov dx,controle ; initialisation du port A en entree

    mov al,90H ; et du port B en sortie (mode 0) :

    out dx,al ; controle = 10010000B = 90H

    boucle : mov dx,portA ; lecture du port A

    in al,dx

    and al,00000111B ; masquage PA0, PA1 et PA2

    cmp al,00000101B ; test PA0 = 1, PA1 = 0 et PA2 = 1

    jne faux ; non -> aller au label faux ...

    mov al,00000001B ; oui -> mettre PB0 a` 1

    jmp suite ; et continuer au label suite

    faux : mov al,00000000B ; ... mettre PB0 a` 0

    suite : mov dx,portB ; ecriture du port B

    out dx,al

    jmp boucle ; retourner lire le port A

    6.5 Linterface serie 8250

    Une interface serie permet dechanger des donnees entre le microprocesseur et un peripheriquebit par bit.

    microprocesseur