Upload
hors-man
View
35
Download
7
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