Cours Microprocesseur
Cours Microprocesseur
Chapitre 1
Historique et ´evolution des
ordinateurs
horloge registres
L’´el´ement de base d’un calculateur est constitu´e par l’unit´e centrale de traitement
(UCT, CPU : Central Processing Unit). L’UCT est constitu´ee :
• mandes) `a tous les autres ´el´ements du calculateur afin d’ex´ecuter und’une unit
´e de controˆle (UC, CU : Control Unit) : elle envoie les ordres (ou
comprogramme-.
12H 0003H
3EH 0000H
BUS
alimentation
horloge n bits
bus d'adresses
p bits
microprocesseur bus de données
signaux de
commande du
microprocesseur bus de commande
reset
Exemple :
ADDITI
ONNER case m´emoire 1 case m´emoire 2 op´eration
op´erandes
2.5 - Fonctionnement d’un microprocesseur Rangement
en m´emoire :
opérande p
instruction n
opérande 2 0002 H
opérande 1 0001 H
code opératoire
de l'addition 3EH 0000 H
pointeur
opérande p
d'instruction
3A2BH instruction n 3A2BH
adresse de la
prochaine
instruction à
exécuter opérande 2 0002H
opérande 1 0001H
instruction 1 0000H
S Z AC P/O N C
soustraction
signe zéro retenue parité/ retenue auxiliaire dépassement (carry)
séquenceur
registre
d'instruction
bus de données
décodeur
micro-code
exécution
2.5 - Fonctionnement d’un microprocesseur
T1 T2 T3
recherche de instruction
décodage exécution
l'instruction suivante
séquenceur décodeur
d'instructions
horloge
quartz
Chapitre 3
Les m´emoires
D7 D7
An-1
RD RD
commandes
WR WR
CS
A0
A1
adresses A2
An-1
D7 D7
An-1
RD RD
commandes
WR WR
CS
A0
A1
adresses A2
n
An-1
3.4 - Chronogrammes de lecture/´ecriture en m´emoire 13
horloge
bus
adresse sur le bus (0 ou 1)
d'adresses
commande
de lecture
donnée
temps d'accès stable
bus de donnée
valeurs non significatives
données sur le bus
Remarque : si le temps d’acc`es d’une m´emoire est sup´erieur a` une p´eriode d’horloge
(m´emoire lente), le microprocesseur peut accorder a` la m´emoire un temps suppl
´ementaire (une ou plusieurs p´eriodes d’horloge), a` la demande de celle-ci. Ce temps
suppl´ementaire est appel´e temps d’attente (wait time : TW) :
signal
de lecture
microprocesseur mémoire
demande
de temps
d'attente
Chronogramme d’´ecriture en m´emoire :
bus
adresse sur le bus
d'adresses
commande
de lecture écriture autorisée
Les boˆıtiers m´emoire poss`edent une broche not´ee CS : Chip Select. Lorsque cette
broche est active (´etat bas), le circuit peut ˆetre lu ou ´ecrit. Lorsqu’elle est
inactive( ´etat haut), le circuit est exclu du service : ses broches de donn´ees D0 `a D7
passent a` l’´etat de haute imp´edance : tout se passe comme si la m´emoire ´etait d
´econnect´ee du bus de donn´ees du microprocesseur, d’ou` la possibilit´e de connecter
plusieurs boˆıtiers m´emoire sur un mˆeme
bus : un seul signal CS doit ˆetre actif a` un instant donn´e pour ´eviter les conflits entre
les diff´erents boˆıtiers.
Dans un mˆeme boˆıtier, une case m´emoire est d´esign´ee par les bits d’adresses A0 `a
A12 :
A12 A11 ... A1 A0 A12 A11 ... A1 A0
0 0 ... 0 0 `a 1 1 ... 1 1
0000H 1FFFH
Pour atteindre la m´emoire no1, il faut mettre a` 1 le bit A13 et `a 0 les bits A14 et A15. La
plage d’adresses occup´ee par cette m´emoire est donc :
A15 A14 A13 A12 ... A0 A15 A14 A13 A12 ... A0
`a 0 0 1 0 ... 0 0 0 1 1 ... 1
2000H 3FFFH
De mˆeme, pour la m´emoire no2, on doit avoir A13 = 0, A14 = 1 et A15 = 0 d’ou` la plage
d’adresses occup´ee cette m´emoire :
A15 A14 A13 A12 ... A0 A15 A14 A13 A12 ... A0
`a 0 1 0 0 ... 0 0 1 0 1 ... 1
4000H 5FFFH
Pour la m´emoire no3, on doit avoir A13 = 0, A14 = 0 et A15 = 1 d’ou` la plage d’adresses
occup´ee cette m´emoire :
mémoire
réelle
5FFFH
implantée
mémoire no 2
4000H
3FFFH
mémoire no 1
2000H
A0 à A12 mémoire no 0
1
microprocesseur 2
D0 à D7
3
A15 A14 A13 CS 4
CS 5
CS 6
CS 7
A Y0 CS
B Y1 CS
C Y2
Y3 CS
Y4 CS
Y5
Y6
Y7
décodeur 3 vers 8
(ex: 74138)
C000H
mémoire no 5 BFFFH
A000H
mémoire no 4 9FFFH
8000H
mémoire no 3
7FFFH
mémoire no 2 6000H
5FFFH
mémoire no 1
2000H 1FFFH
0000H
Chapitre 4
RD
INTA
DEN
HOLD
DMA DT/R
HLDA
S0 signaux
d'état
S7
RESET : entr´ee de remise `a z´ero du microprocesseur. Lorsque cette entr´ee est mise `a
l’´etat haut pendant au moins 4 p´eriodes d’horloge, le microprocesseur est r´einitialis´e :
il va ex´ecuter l’instruction se trouvant a` l’adresse FFFF0H (adresse de bootstrap). Le
signal de RESET est fourni par le g´en´erateur d’horloge.
A16/S3 `a A19/S6 : 4 bits de poids fort du bus d’adresses, multiplex´es avec 4 bits
d’´etat.
AD0 `a AD15 : 16 bits de poids faible du bus d’adresses, multiplex´es avec 16 bits de
donn´ees. Le bus A/D est multiplex´e (multiplexage temporel) d’ou` la n´ecessit´e d’un d
´emultiplexage pour obtenir s´epar´ement les bus d’adresses et de donn´ees :
T1 T2 T3 T4 T1 T2 T3 T4
CLK
ALE
lecture
RD
écriture
WR
Le d´emultiplexage des signaux AD0 a` AD15 (ou A16/S3 `a A19/S6) se fait en m
´emorisant l’adresse lorsque celle-ci est pr´esente sur le bus A/D, `a l’aide d’un verrou
(latch), ensemble de bascules D. La commande de m´emorisation de l’adresse est g´en´er
´ee par le microprocesseur : c’est le signal ALE, Address Latch Enable. Circuit de d
´emultiplexage A/D :
LATCH
ALE
bus d'adresses
8086 H Q
D A0 - A19
x 20
bus de données
20
AD0 - AD15 D0 - D15
A16/S3 - A19/S6 S3 -S6
Fonctionnement :
AD0 - AD7 D0 Q0
A0 - A7
ou D1 Q1
ou
AD8 - AD15 A8 - A15
8282
ou ou
A16/S3 - A19/S6 A16 - A19
D7 Q7
ALE STROBE
OE
DEN : Data Enable, indique que des donn´ees sont en train de circuler sur le bus A/D
(´equivalent de ALE pour les donn´ees).
DT : Data Transmit/Receive, indique le sens de transfert des donn´ees : •
DT/R = 1 : donn´ees ´emises par le microprocesseur (´ecriture);
1 cycle de bus
T1 T2 T3 T4
CLK
ALE
DEN
écriture
DT/R
lecture
Les signaux DEN et DT/R sont utilis´es pour la commande de tampons de bus (buffers)
permettant d’amplifier le courant fourni par le microprocesseur sur le bus de donn´ees.
Exemples de tampons de bus : circuits transmetteurs bidirectionnels 8286 ou 74245.
A0 B0
A1 B1
AD0 - AD7 8286
D0 - D7
ou ou
AD8 - AD15 D8 - D15
commande
du sens de A7 x8 B7
transfert lignes de
DIR données
DT/R bufferisées
DEN EN
validation
du transfert
BHE : Bus High Enable, signal de lecture de l’octet de poids fort du bus de donn´ees. Le
8086 poss`ede un bus d’adresses sur 20 bits, d’ou` la capacit´e d’adressage de 1 Mo ou
512 Kmots de 16 bits (bus de donn´ees sur 16 bits).
Le m´ega-octet adressable est divis´e en deux banques de 512 Ko chacune : la banque
inf´erieure (ou paire) et la banque sup´erieure (ou impaire). Ces deux banques sont s
´electionn´ees 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.
A1 A0 D0 D0
A2 A1 D1 D1
banque
paire D7 D7
A18
A19
CS
A0 D8
A0 D0 D9
A1
D1
A2
banque D15
impaire D7
A18
A19
BHE A1
CS
D0 - D15
bus de données
Seuls les bits A1 `a A19 servent a` d´esigner une case m´emoire dans chaque banque de
512 Ko. Le microprocesseur peut ainsi lire et ´ecrire des donn´ees sur 8 bits ou sur 16
bits :
BHE A0 octets transf´er´es
0 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 donn´ee sur 16 bits en une seule fois, uniquement
si l’octet de poids fort de cette donn´ee est rang´e `a une adresse impaire et l’octet de
poids faible a` une adresse paire (alignement sur les adresses paires), sinon la lecture de
cette donn´ee doit se faire en deux op´erations successives, d’ou` une augmentation du
temps d’ex´ecution du transfert duˆ `a un mauvais alignement des donn´ees. R´ealisation
des deux banques avec plusieurs boˆıtiers m´emoire :
D15
A B
8286 D8 données
EN
DIR
D7
A B
8286 D0
EN
DIR commandes
M/IO
RD
WR
8 bits 8 bits
AH AL = AX
16 bits
registres BH BL = BX
16 bits
généraux CH CL = CX DS
DH DL = DX SS registres
SI CS de segments
pointeurs DI ES
et index SP IP pointeur d'instruction
BP
registres 1
temporaires 2
file d'attente
3 des instructions
4 (6 octets)
5
6
commandes
de l'unité
UAL
d'exécution
indicateurs
• l’unit´e d’ex´ecution (EU) ex´ecute les instructions contenues dans la file d’attente.
Les deux unit´es fonctionnent simultan´ement, d’ou` une acc´el´eration du processus d’ex
´ecution d’un programme (fonctionnement selon le principe du pipe-line).
Pointeurs :
SP : Stack Pointer, pointeur de pile (la pile est une zone de sauvegarde de
donn´ees en cours d’ex´ecution d’un programme);
BP : Base Pointer, pointeur de base, utilis´e pour adresser des donn´ees
sur la pile.
Index :
SI : Source Index;
DI : Destination Index.
Ils sont utilis´es pour les transferts de chaˆınes d’octets entre deux zones m
´emoire.
Les pointeurs et les index contiennent des adresses de cases m´emoire.
• Pointeur d’instruction et indicateurs (flags) : 2 registres sur 16 bits.
segment de code;
case
un segment mémoire
(64 Ko) offset
adresse
multiple
de 16
0 00000H
La donn´ee d’un couple (segment,offset) d´efinit une adresse logique, not´ee sous la
forme segment : offset.
L’adresse d’une case m´emoire donn´ee sous la forme d’une quantit´e sur 20 bits (5
digits hexa) est appel´ee adresse physique car elle correspond a` la valeur envoy´ee r
´eellement sur le bus d’adresses A0 - A19.
Correspondance entre adresse logique et adresse physique :
16 bits 4 bits
segment 0000
20 bits
+ offset
16 bits
adresse physique
20 bits
Ainsi, l’adresse physique se calcule par l’expression :
adresse physique = 16 × segment + offset
car le fait d’injecter 4 z´eros en poids faible du segment revient a` effectuer un d´ecalage
de 4 positions vers la gauche, c’est a` dire une multiplication par 24 = 16.
instruction
à exécuter
segment
de code CS : IP
offset = IP
CS : 0000H
0 00000H
4.5 - Gestion de la m´emoire par le 8086
extra
segment ES : DI
offset = DI
ES : 0000H
segment
de pile SS : SP
offset = SP
SS : 0000H
segment
de données DS : SI
offset = SI
DS : 0000H
segment
de code CS : IP
offset = IP
CS : 0000H
0 00000H
Remarque : les segments ne sont pas n´ecessairement distincts les uns des autres, ils
peuvent se chevaucher ou se recouvrir compl`etement.
• la broche BHE n’existe pas dans le 8088 car il n’y a pas d’octet de poids fort sur le
bus de donn´ees;
• la broche M/IO devient IO/M pour la compatibilit´e avec d’anciens circuits d’E/S.
Au niveau de l’architecture interne, pas de diff´erences avec le 8086 sauf que la file
d’attente des instructions passe de 6 a` 4 octets.
La programmation en assembleur du
microprocesseur 8086
5.1 G´en´eralit´es
Chaque microprocesseur reconnait un ensemble d’instructions appel´e jeu
d’instructions (Instruction Set) fix´e par le constructeur. Pour les microprocesseurs
classiques, le nombre d’instructions reconnues varie entre 75 et 150 (microprocesseurs
CISC : Complex Instruction Set Computer). Il existe aussi des microprocesseurs dont le
nombre d’instructions est tr`es r´eduit (microprocesseurs RISC : Reduced Instruction Set
Computer) : entre 10 et 30 instructions, permettant d’am´eliorer le temps d’ex´ecution
des programmes.
Une instruction est d´efinie par son code op´eratoire, valeur num´erique binaire difficile
`a manipuler par l’ˆetre humain. On utilise donc une notation symbolique pour repr
´esenter les instructions : les mn´emoniques. Un programme constitu´e de mn
´emoniques est appel´e programme en assembleur.
Les instructions peuvent ˆetre class´ees en groupes :
• instructions de transfert de donn´ees;
• instructions arithm´etiques;
• instructions logiques;
• mov al,12H : charge le registre AL avec la valeur 12H. La donn´ee est fournie imm
0 00000H
0 00000H
5.2 - Les instructions de transfert 35
mov byte ptr 1100H , 65H mov word ptr 1100H , 65H
1101H 00H
2 octets
1100H 65H 1 octet 1100H 65H
Remarque : les microprocesseurs Intel rangent l’octet de poids faible d’une donn´ee sur
plusieurs octets `a l’adresse la plus basse (format Little Endian). Modes d’adressage
´evolu´es :
• adressage bas´e : l’offset est contenu dans un registre de base BX ou BP.
Exemples :
mov al,[bx] : transf`ere la donn´ee dont l’offset est contenu dans le registre de
base BX vers le registre AL. Le segment associ´e par d´efaut au registre BX est
le segment de donn´ees : on dit que l’adressage est bas´e sur DS; mov al,[bp] :
le segment par d´efaut associ´e au registre de base BP est le segment de pile.
Dans ce cas, l’adressage est bas´e sur SS.
1 Mo FFFFFH 1 Mo FFFFFH
mov al, bx mov al, bp
AL AL
segment segment
de données DS : BX SS : BP
offset = BX de pile offset = BP
DS : 0000H SS : 0000H
0 00000H 0 00000 H
• adressage index´e : semblable `a l’adressage bas´e, sauf que l’offset est contenu
dans un registre d’index SI ou DI, associ´es par d´efaut au segment de donn´ees.
Exemples :
mov al,[si] : charge le registre AL avec le contenu de la case m´emoire dont
l’offset est contenu dans SI;
mov [di],bx : charge les cases m´emoire d’offset DI et DI + 1 avec le contenu du
registre BX.
Remarque : une valeur constante peut ´eventuellement ˆetre ajout´ee aux registres de
base ou d’index pour obtenir l’offset. Exemple : mov [si+100H],ax
qui peut aussi s’´ecrire
mov [si][100H],ax
ou encore mov 100H[si],ax
Dans cet exemple, table repr´esente l’offset du premier ´el´ement du tableau et le registre
SI joue le roˆle d’indice de tableau :
• adressage bas´e et index´e : l’offset est obtenu en faisant la somme d’un registre
de base, d’un registre d’index et d’une valeur constante. Exemple : mov ah,
[bx+si+100H]
Ce mode d’adressage permet l’adressage de structures de donn´ees complexes :
matrices, enregistrements, ... Exemple :
mov bx,10
mov si,15
mov byte ptr matrice[bx][si],12H
Multiplication : MUL ope´rande, ou` ope´rande est un registre ou une case m´emoire.
Cette instruction effectue la multiplication du contenu de AL par un op´erande sur 1
octet ou du contenu de AX par un op´erande sur 2 octets. Le r´esultat est plac´e dans AX
si les donn´ees `a multiplier sont sur 1 octet (r´esultat sur 16 bits), dans (DX,AX) si elles
sont sur 2 octets (r´esultat sur 32 bits). Exemples : • mov al,51 mov bl,32 mul bl → AX =
51 × 32
• mov ax,1234 mov word ptr [1200H],5678 mul word ptr [1200H]
→ (DX,AX) = 1234 × 5678
instructions arithm´etiques :
• OU;
• OU exclusif;
• compl´ement `a 1;
• compl´ement `a 2;
• d´ecalages et rotations.
mov al,10010110B AL = 1 0 0 1 0 1 1
0 mov bl,11001101B → BL = 1 1 0 0 1
1 0 1
and al, bl AL = 1 0 0 0 0 1 0 0
5.4 - Les instructions logiques
Application : masquage de bits pour mettre a` z´ero certains bits dans un mot. Exemple
: masquage des bits 0, 1, 6 et 7 dans un octet :
masque
OU logique : OR ope´rande1,op´erande2
L’op´eration effectu´ee est : ope´rande1←ope´rande1 OU ope´rande2.
Application : mise `a 1 d’un ou plusieurs bits dans un mot.
Exemple : dans le mot 10110001B on veut mettre a` 1 les bits 1 et 3 sans modifier les
autres bits.
masque
Les instructions correspondantes peuvent
s’´ecrire : mov ah,10110001B or
ah,00001010B
→ entr´ee d’un 0 a` la place du bit de poids fort; le bit sortant passe `a travers l’indicateur
de retenue CF.
Remarque : si le nombre de bits `a d´ecaler est sup´erieur a` 1, ce nombre doit ˆetre plac
´e dans le registre CL ou CX.
Exemple : d´ecalage de AL de trois positions vers la droite :
mov cl,3 shr
al,cl
D´ecalage logique vers la gauche (Shift Left) : SHL ope´rande,n Cette
instruction d´ecale l’op´erande de n positions vers la droite.
Exemple :
→ entr´ee d’un 0 a` la place du bit de poids faible; le bit sortant passe `a travers
l’indicateur de retenue CF.
Mˆeme remarque que pr´ec´edemment si le nombre de positions a` d´ecaler est sup
´erieur a` 1.
D´ecalage arithm´etique vers la droite : SAR ope´rande,n Ce d
´ecalage conserve le bit de signe bien que celui-ci soit d´ecal´e.
Exemple :
mov al,11001011B sar
al,1
avant
1 1 0 0 1 0 1 1
après CF
1 1 1 0 0 1 0 1 1
→ r´einjection du bit sortant qui est copi´e dans l’indicateur de retenue CF.
→ r´einjection du bit sortant qui est copi´e dans l’indicateur de retenue CF.
Rotation `a droite avec passage par l’indicateur de retenue (Rotate Right through
Carry) : RCR ope´rande,n
Cette instruction d´ecale l’op´erande de n positions vers la droite en passant par
l’indicateur de retenue CF.
Exemple :
→ le bit sortant par la droite est copi´e dans l’indicateur de retenue CF et la valeur pr´ec
´edente de CF est r´einject´ee par la gauche.
Rotation `a gauche avec passage par l’indicateur de retenue (Rotate Left through
Carry) : RCL ope´rande,n
Cette instruction d´ecale l’op´erande de n positions vers la gauche en passant par
l’indicateur de retenue CF.
Exemple :
mov al,11001011B rcl
al,1
avant
valeur 1 1 0 0 1 0 1 1
précédente
CF après
1 1 0 0 1 0 1 1 x
de CF
→ le bit sortant par la gauche est copi´e dans l’indicateur de retenue CF et la valeur pr´ec
´edente de CF est r´einject´ee par la droite.
• sauts conditionnels;
• appel de sous-programmes.
Exemple :
boucle : inc ax
dec bx → boucle infinie jmp boucle
Exemple :
. instructions pr´ec
´edant le
saut conditionnel
jnz suite
.
instructions ex´ecut´ees si la
condition ZF = 0 est v´erifi´ee
suite : ... ← instruction ex´ecut´ee `a la suite du saut
Remarque : il existe un autre type de saut conditionnel, les sauts arithm´etiques. Ils
suivent en g´en´eral l’instruction de comparaison : CMP ope´rande1,op´erande2
condition nombres sign nombres non sign´es
´es
début
fin
5.5 - Les instructions de branchement 51
nom sp ENDP
Remarque : une proc´edure peut ˆetre de type NEAR si elle se trouve dans le mˆeme
segment ou de type FAR si elle se trouve dans un autre segment.
Exemple : ss prog1 PROC NEAR
ss prog2 PROC FAR
Appel d’un sous-programme par le programme principal : CALL proce´dure
.
← instructions pr´ec´edant l’appel au sous-programme
sous- au sous-programme
valeur de IP programme
avant l'appel CALL 2000H
au sous-programme
valeur de IP 1000H
au retour du 1002H
sous-programme RET
2100H valeur de IP
à la fin du
sous-programme
sens de
croissance segment de code
du programme CS : 0000H
0 00000H
1 Mo FFFFFH
ISET Rad`es cours de microprocesseur HAGGEGE, 2003`
adresse de SS : FFFFH
retour au segment de pile
sous-programme
SS : SP décrémentation
(2 octets) SS : SP de SP de 2 unités
5.5 - Les instructions de branchement 53
ou` ope´rande est un registre ou une donn´ee sur 2 octets (on ne peut empiler que des
mots de 16 bits).
Exemple :
pushax ; empilage du registre AX ... pushbx ; ... du registre
BX ...
push[1100H] ; ... et de la case me´moire 1100H-1101H
...
pop [1100H] ; de´pilage dans l’ordre inverse de l’empilage pop bx pop ax
• programme principal :
mov ax,200
pushax mov ; empilage du premier parame`tre
ax,300
pushax ; empilage du deuxie`me param`etre
callsomme ; appel de la proce´dure somme
• proc´edure somme :
somme proc
pushbp ; sauvegarde de BP
mov bp,sp ; faire pointer BP sur le sommet de la pile
mov ax,[bp+4]; re´cup´eration du deuxie`me param`etre add ax,[bp+6]; addition au
premier parame`tre pop bp ; restauration de l’ancienne valeur de BP ret 4 ;
retour et de´pilage des param`etres
somme endp
2 octets SS : SP SS : SP
(sommet 2 octets paramètre 1 (200) SS : BP+6
de la pile) 2 octets paramètre 2 (300) SS : BP+4
2 octets adresse de retour retour de la pile
2 octets ancienne valeur de BP SS : SP à son état initial
= SS : BP
poursuivre?
• D´efinitions de constantes : nom constante EQU valeur Exemple : escape equ 1BH
valeur initiale
6.1 D´efinitions
Une interface d’entr´ees/sorties est un circuit int´egr´e permettant au
microprocesseur de communiquer avec l’environnement ext´erieur (p´eriph´eriques) :
clavier, ´ecran, imprimante, modem, disques, processus industriel, ...
interface port exemple de p´eriph
´erique
interface port imprimante
parall`ele parall`ele
interface s´erie port s´erie modem
Les interfaces d’E/S sont connect´ees au microprocesseur a` travers les bus d’adresses,
de donn´ees et de commandes.
données
adresses
commandes
signal de
selection CS
de boîtier
A chaque registre est assign´e une adresse : le microprocesseur acc`ede `a un port d’E/S
en sp´ecifiant l’adresse de l’un de ses registres.
Le microprocesseur peut voir les adresses des ports d’E/S de deux mani`eres :
• adressage cartographique : les adresses des ports d’E/S appartiennent au mˆeme
espace m´emoire que les circuits m´emoire (on dit que les E/S sont mapp´ees en
m´emoire) :
FFFFFH
circuits
espace d'E/S
mémoire circuits
total
mémoire
adressable
00000H Cons´equences :
– toutes les instructions employ´ees avec des cases m´emoires peuvent ˆetre
appliqu´ees aux ports d’E/S : les mˆemes instructions permettent de lire et
´ecrire dans la m´emoire et les ports d’E/S, tous les modes d’adressage ´etant
valables pour les E/S.
• adressage ind ´ependant : le microprocesseur consid`ere
deux espaces distincts :
circuits
– l’espace mémoire d’adressage des m´emoires;
– l’espace d’adressage des ports d’E/S.
C’est le cas du microprocesseur 8086 :
FFFFFH
1 Mo
FFFFH
circuits 64 Ko
d'E/S
00000H0000H espace mémoire espace E/S
Cons´equences :
– contrairement a` l’adressage cartographique, l’espace m´emoire total
adressable n’est pas diminu´e;
– l’adressage des port d’E/S peut se faire avec une adresse plus courte
(nombrede bits inf´erieur) que pour les circuits m´emoires;
– les instructions utilis´ees pour l’acc`es `a la m´emoire ne sont plus utilisables
pourl’acc`es aux ports d’E/S : ceux-ci disposent d’instructions sp´ecifiques;
– une mˆeme adresse peut d´esigner soit une case m´emoire, soit un port d’E/S :
lemicroprocesseur doit donc fournir un signal permettant de diff´erencier
l’adressage de la m´emoire de l’adressage des ports d’E/S.
Remarque : l’adressage ind´ependant des ports d’E/S n’est possible que pour les
microprocesseurs poss´edant un signal permettant de diff´erencier l’adressage de la m
´emoire de l’adressage des ports d’E/S ainsi que les instructions sp´ecifiques pour
l’acc`es aux ports d’E/S. Par contre, l’adressage cartographique est possible pour tous les
microprocesseurs.
Les instructions de lecture et d’´ecriture d’un port d’E/S sont respectivement les instruc-
tions IN et OUT. Elles placent la ligne M/IO `a 0 alors que l’instruction MOV place celle-ci
`a 1.
Lecture d’un port d’E/S :
• si l’adresse du port d’E/S est sur un octet :
Exemples : • lecture d’un port d’E/S sur 8 bits a` l’adresse 300H : mov dx,300H in
al,dx • ´ecriture de la valeur 1234H dans le port d’E/S sur 16 bits a` l’adresse
49H : mov ax,1234H out 49H,ax
adresses
commandes
Le 8255 est une interface parall`ele programmable : elle peut ˆetre configur´ee en entr´ee
et/ou en sortie par programme. Brochage du 8255 :
PA3 1 40 PA4
PA2 2 39 PA5
PA1 3 38 PA6
PA0 4 37 PA7
RD 5 36 WR
CS 6 8255 35 RESET
GND 7 34 D0
A1 8 33 D1
A0 9 32 D2
PC7 10 31 D3
PC6 11 30 D4
PC5 12 29 D5
PC4 13 28 D6
PC0 14 27 D7
PC1 15 26 VCC
PC2 16 25 PB7
PC3 17 24 PB6
PB0 18 23 PB5
PB1 19 22 PB4
PB2 20 21 PB3
Sch´ema fonctionnel :
alimentation
VCC GND
RD 8
port A groupe A
WR (PA0 - PA7)
lignes de A0
contrôle A1 8255 4 port C
haut
RESET (PC4 - PC7)
CS
4 port C
groupe B
bas
D0 - D7 (PC0 - PC3)
bus de
données 8 port B
(PB0 - PB7)
sorties; l’´etat des lignes d’entr´ees est recopi´e dans les registres correspondants et n’est
pas m´emoris´e.
Les modes 1 et 2 sont plus complexes. Ils sont utilis´es pour le dialogue avec des p´eriph
´eriques n´ecessitant un asservissement.
Structure du registre de commande :
D7 D6 D5 D4 D3 D2 D1 D0
drapeau
1 = actif
Groupe A Groupe B
sélection de port C bas
mode : 1 = entrée
00 = mode 0 0 = sortie
01 = mode 1 port B
1x = mode2 1 = entrée
port A 0 = sortie
1 = entrée
0 = sortie sélection de
mode :
port C haut 0 = mode 0
1 = entrée 1 = mode 1
0 = sortie
Connexion du 8255 sur les bus du 8086 : le bus de donn´ees du 8255 est sur 8 bits
alors que celui du microprocesseur 8086 est sur 16 bits. On peut donc connecter le bus
de donn´ees du 8255 sur les lignes de donn´ees de poids faible du 8086 (D0 - D7) ou sur
celles de poids fort (D8 - D15).
Une donn´ee est envoy´ee (ou rec¸ue) par le microprocesseur 8086 : • sur la partie faible
du bus de donn´ees lorsque l’adresse `a ´ecrire (ou `a lire) est paire :
validation par A0;
• sur la partie haute lorsque l’adresse est impaire : validation par BHE.
Ainsi l’un de ces deux signaux A0 ou BHE doit ˆetre utilis´e pour s´electionner le 8255 :
D0 - D7 D0
.
ou . 8255
D8 - D15 .
D7
M/IO
validation RD RD
décodeur WR WR
A3 - A15 d'adresses
CS
A0 ou BHE
A1 A0
A2 A1
Cons´equence : les adresses des registres du 8255 se trouvent a` des adresses paires
(valida-
D0
.
D0 - D7 . 8255
.
D7
A8 A Y0
RD RD
A9 B Y1
WR WR
A10 C Y2
74138 Y3 CS
validation
Y4 A0
G2B Y5 A1 A0
M/IO G2A Y6 A2 A1
+5 V G1 Y7
= 300H de registre =0
transmetteur
8 bidirectionnel
D0 - D7 A B
8286
8 D0
DT/R DIR .
.
EN . PA
D7
8
D8 - D15 A B 8255
8286
DIR
BHE
EN
PB
M/IO
validation
décodeur
A2- A15 d'adresses
CS
A1 A1 PC
A0 A0
RD RD
WR WR
K0 0
PA0
1
D0
. K1 0
PA1
8086 D0 - D7 .. 8255 1
D7 K2 0
PA2
1
adresse
de base PB0
= 300H
LED
données
adresses
commandes
La transmission asynchrone la plus utilis´ee est celle qui est d´efinie par la norme RS232.
Exemple : transmission du caract`ere ’E’ (code ASCII 45H = 01000101B) sous forme s
´erie selon la norme RS232 :
bit de bit de bits de
start parité stop
bits de données
+9 à +15 V
LSB MSB
-9 à -15 V
1 0 1 0 0 0 1 0
• les bits de donn´ees sont transmis l’un apr`es l’autre en commenc¸ant par le bit de
poids faible. Ils peuvent ˆetre au nombre de 5, 6, 7 ou 8. Chaque bit est maintenu
sur la ligne pendant une dur´ee d´etermin´ee T. L’inverse de cette dur´ee d´efinit la
fr´equence de bit = nombre de bits par secondes = vitesse de transmission. Les
vitesses normalis´ees sont : 50, 75, 110, 134.5, 150, 300, 600, 1200, 2400, 4800,
9600 bits/s;
• le bit de parit´e (facultatif) est un bit suppl´ementaire dont la valeur d´epend du
nombre de bits de donn´ees ´egaux a` 1. Il est utilis´e pour la d´etection d’erreurs
de transmission;
• les bits de stop (1, 1.5 ou 2) marquent la fin de la transmission du caract`ere.
horloge
Un circuit int´egr´e d’interface s´erie asynchrone s’appelle un UART : Universal
Asynchronous Receiver Transmitter); une interface s´erie synchrone/asynchrone est un
USART.
Exemples d’interfaces s´eries :
• 8251 (Intel);
• 6850 (Motorola).
Connexion de deux ´equipements par une liaison s´erie RS232 : les ´equipements
qui peuvent ˆetre connect´es `a travers une liaison s´erie RS232 sont de deux types :
Pour connecter ces ´equipements, on utilise des connecteurs normalis´es DB9 ou DB25 :
1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 11 12 13
6 7 8 9 14 15 16 17 18 19 20 21 22 23 24 25
DTR
RTS DTE
TxD donnée
DSR
DCD DCE
CTS
Ce cˆablage ne permet pas le controˆle mat´eriel du flux entre les deux DTE.
– liaison compl`ete : cˆable Null Modem :
TxD TxD
RxD RxD
RTS RTS
CTS CTS
DTR DTR
DSR DSR
DCD DCD
RI RI
DTE 1 GND GND DTE 2
Brochage du 8250 :
D0 1 40 VCC
D1 2 39 RI
D2 3 38 DCD
D3 4 37 DSR
D4 5 36 CTS
D5 6 8250 35 MR
D6 7 34 OUT1
D7 8 33 DTR
RCLK 9 32 RTS
SIN 10 31 OUT2
SOUT 11 30 INTRPT
CS0 12 29 NC
CS1 13 28 A0
CS2 14 27 A1
BAUDOUT 15 26 A2
XTAL1 16 25 ADS
XTAL2 17 24 CSOUT
DOSTR 18 23 DDIS
DOSTR 19 22 DISTR
GND 20 21 DISTR
Sch´ema fonctionnel :
Acc`es aux registres du 8250 : le 8250 poss`ede 11 registres. Comme il n’y a que 3 bits
d’adresses (A0, A1 et A2), plusieurs registres doivent se partager la mˆeme adresse :
DLAB A2 A1 A0 registre
1 → parit´e paire;
1 → parit´e fixe;
bit 6 : controˆle de l’´etat de la ligne TxD, 10 →→ forc¸age de TxD `ligne en
bit 7 : DLAB (Divisor Latch Access bit), fonctionnement normal,a l’´etat 0
(break);
: inutilis´es, toujours a` 0.
• Modem Status Register (MSR) :
: 1 → delta DSR;
: 1 → delta DCD;
1→
: inutilis´es, toujours a` 0.
bit 7 ⎪⎪⎭
: inutilis´es, toujours a` 0.
bit 7 ⎪⎪⎭
• Scratch Register (SCR) : registre a` usage g´en´eral pouvant contenir des donn
´ees temporaires.
Exemple de programmation : soit un UART 8250 dont le bus de donn´ees est connect´e
sur la partie faible du bus de donn´ees du microprocesseur 8086. L’adresse de base du
8250 est fix´ee `a la valeur 200H par un d´ecodeur d’adresses. La fr´equence d’horloge
du 8250 est de 1.8432 MHz. On veut :
• ´ecrire une proc´edurebits/s, 8 bits par caract`ere, parit´e paire, 1 bit de stop
(2400, 8, P, 1);init qui initialise le 8250 avec les param`etres suivants : 2400
est rencontr´e;
• ´ecrire une proc´eduredans une zone de donn´ees appel´eereception qui rec¸oit une
ligne de 80 caract`ligne. En cas d’erreur de r´eception, envoyer leeres et la range
caract`ere NAK (No Acknowledge, code ASCII = 15H) sinon envoyer le caract`ere
ACK (Acknowledge, code ASCII = 06H).
Programme :
RBR equ 200H ; adresses des registres du 8250
THR equ 200H
DLL equ 200H
DLM equ 202H
IER equ 202H
IIR equ 204H
LCR equ 206H
MCR equ 208H
LSR equ 20AH
MSR equ 20CH
SCR equ 20EH
EOT equ 03H ; caracte`re End Of Text
ACK equ 06H ; caracte`re Acknowledge
NAK equ 15H ; caracte`re No Acknowledge
LIGNE db 80 dup(?) ; zone de rangement des caracte`res re¸cus
MSG db ’Test 8250’, EOT ; message a` envoyer
INIT PROC NEAR ; proce´dure d’initialisation du 8250
mov dx,LCR ; DLAB = 1 pour acce´der au diviseur
mov al,80H out ; d’horloge
dx,al
mov dx,DLL ; vitesse de transmission = 2400 bit/s
mov al,48 out ; => DLL = 48 ...
dx,al
mov dx,DLM ; ... et DLM = 0
mov al,0 out
dx,al
Les interruptions
microprocesseur interface
Il y a deux m´ethodes possibles pour recevoir les donn´ees provenant des p´eriph´eriques
:
• scrutation p´eriodique (ou polling) : le programme principal contient des
instructions qui lisent cycliquement l’´etat des ports d’E/S.
Avantage : facilit´e de programmation. Inconv
´enients :
– perte de temps s’il y a de nombreux p´eriph´eriques `a interroger;
– de nouvelles donn´ees ne sont pas toujours pr´esentes;
– des donn´ees peuvent ˆetre perdues si elles changent rapidement.
• interruption : lorsqu’une donn´ee apparaˆıt sur un p´eriph´erique, le circuit d’E/S
le signale au microprocesseur pour que celui-ci effectue la lecture de la donn´ee :
c’est une demande d’interruption (IRQ : Interrupt Request) :
périphérique
demande
d'interruption
microprocesseur interface
transmission.
programme
sous-programme
principal
de service
de l'interruption
service de
l'interruption
arrivée de
la demande
d'interruption retour au programm
principal (IRET)
e
83H
interruptions
80H
réservées par Microsoft
7FH dans un PC : utilisées
7CH par MS-DOS,
Windows, ...
17H
14H interruptions réservées par
13H Intel
10H 0FH
0CH
0BH
08H
07H
04H
03H 2 octets
2 octets
7.5 - Le controˆleur programmable d’interruptions 8259 75
La table des vecteurs d’interruptions est charg´ee par le programme principal (carte a`
microprocesseur) ou par le syst`eme d’exploitation (ordinateur) au d´emarrage du
syst`eme. Elle peut ˆetre modifi´ee en cours de fonctionnement (d´etournement des
vecteurs d’interruptions).
CS
IP
Sch´ema fonctionnel :
+5 V
D0 - D7 VCC
ou D0 - D7 IR0
D8 - D15 IR1
RD RD IR2
M/IO 8259 entrées de
validation WR WR IR3
demandes
décodeur IR4
A2 - A15 d'adresses d'interruptions
IR5
CS IR6
A0
ou IR7
A1 A0
BHE
CAS0 mise en
INTR INT
CAS1 cascade
INTA INTA
CAS2 de plusieurs
GND SP/EN 8259
Annexe
Jeu d’instructions du 8086
Addition
G´en´eral
Controˆles d’it´erations
Pr´efixes