Histoire et Architecture du Processeur 8086
Histoire et Architecture du Processeur 8086
1971
Intel 4004, premier microprocesseur de l'histoire,
1972 – 1992
Intel 8008, Intel 8080 (6.000 transistors), Intel 8086 (1er processeur à
architecture x86), Intel 80286, Intel 80386DX (275.000 transistors),
Intel 80386 (1er µP 32 bits d'Intel), Intel 80386 & 80387.
Caractéristiques du 8086 :
❑ Disponible depuis juillet 1978.
❑ Existe en trois versions : 8086 (5 MHz), 8086-2 (8 MHz), 8086-4 (10 MHz).
❑ Un ancien programme écrit pour un 8086 fonctionne toujours sur un ordinateur équipé
d'un Pentium IV…
❑ Maîtriser la programmation en assembleur du 8086 constitue un grand pas vers la
programmation des µPs actuels.
Brochage du 8086 :
❑ Le 8086 se présente sous la forme d’un boîtier DIP ‘Dual In-line Package’ à 40 broches :
Architecture externe et description des signaux
A0 Octets transférés
0 0 Les 2 octets ‘Mot complet’
0 1 Octet fort ‘Adresse impaire’
1 0 Octet faible ‘Adresse paire’
1 1 Aucun octet
Architecture externe et description des signaux
Largeur du bus
Unidirectionnel
Bidirectionnel
Architecture interne
❑ Registres Généraux :
▪ AX, BX, CX et DX.
❑ Registres de Segments :
▪ CS, DS, SS et ES.
❖ Registres Généraux :
❖ Registres Généraux :
❑ Registres d’Index:
▪ SI : Source Index.
✔ Il permet de pointer la mémoire.
✔ Il est utilisé pour les instructions de chaînes de caractères et
pointe vers le caractère source.
▪ DI : Destination Index.
✔ Il pointe aussi sur la mémoire.
✔ Il sert au traitement des chaînes de caractères et pointe vers le
caractère de destination.
❑ Registres de Pointeurs :
▪ SP : Stack Pointer.
✔ Pointeur de pile, il pointe sur la tête de la pile.
▪ BP : Base Pointer.
✔ Pointeur de base, utilisé pour adresser des données sur la pile
lors d’appels de sous-programme ‘CALL’.
Architecture interne
❖ Registres de segments :
❖ Registre d’état :
X X X X OF DF IF TF SF ZF X AF X PF X CF
15 0
Architecture interne
❖ Registre d’état :
X X X X OF DF IF TF SF ZF X AF X PF X CF
15 0
❑ X : Bit non utilisé
❑ CF ‘Carry Flag’ :
▪ Mis à 1 en cas de retenue dans les opérations d'addition ou d'emprunt
en soustraction sur des entiers naturels à 8 ou 16 bits.
❑ PF ‘Parity Flag’ :
▪ Mis à 1 si le résultat de l’opération contient un nombre pair de 1.
❑ ZF ‘Zero Flag’ :
▪ Ce flag est à 1 lorsque le résultat est nul.
❑ SF ‘Sign Flag’ :
▪ Mis à 1 si le MSB du résultat d’une addition ou soustraction est 1.
Architecture interne
❖ Registre d’état :
X X X X OF DF IF TF SF ZF X AF X PF X CF
15 0
❑ OF ‘Overflow Flag’ :
▪ Indique un dépassement de capacité quand on travaille avec des
nombres signés. (40h + 40h = 80h et OF=1)
❑ DF ‘Direction Flag’ :
▪ Permet d'auto-incrémenter ‘DF = 0’ ou d'auto-décrémenter ‘DF = 1’
les registres SI et DI dans les instructions de chaînes de caractères.
❑ IF ‘Interrupt Flag’ :
▪ IF=1 : les interruptions, générées par des dispositifs externes, sont
autorisées.
▪ IF=0 : ces interruptions sont masquées.
❑ TF ‘Trap Flag’ :
▪ Mis à 1 pour que le microprocesseur exécute le programme pas à pas,
pour faciliter la recherche des erreurs d’exécution.
Gestion de la mémoire
Segmentation de la mémoire :
❖ Bus d’adresse est de 20 bits ---> Mémoire totale adressable égale 220 octets = 1 Mo.
❖ Taille des registres est de 16 bits ---> seuls 216 octets = 64 Ko peuvent être adressés.
❖ La mémoire est donc divisée en pages de 64 Ko appelées ‘Segments’.
❖ Un segment est une zone mémoire définie par son adresse de départ qui doit être un multiple
de 16. Dans une telle adresse, les 4 bits de poids faible sont à zéro.
❖ On peut donc représenter l’adresse d’un segment avec seulement ses 16 bits de poids fort, les
4 bits de poids faible étant implicitement à 0.
❖ Pour désigner une case mémoire parmi les 216 contenues dans un segment, il suffit d’une
valeur sur 16 bits.
❖ Deux registres sont alors nécessaires pour adresser un emplacement mémoire :
▪ Registre pour adresser le segment ‘registre de segment’ : CS, DS, SS, ES
▪ Registre pour adresser l'intérieur du segment ‘registre offset’ : IP, SP, BP, SI, DI et BX
Segmentation de la mémoire :
Gestion de la mémoire
Adresse Logique :
❖ La donnée d’un couple ‘Segment,Offset’ définit une adresse logique, notée sous la forme :
‘@ Segment : @ Offset’
• Le segment localise le début d’une zone mémoire de 64 Ko
• L’offset précise l’adresse relative par rapport au début de segment.
❖ Chaque registre segment peut être associé à un ou plusieurs registres, appelés registres
d’adressage, afin de former une adresse logique :
Adresse Logique :
❖ Les registres pointeurs et indexes SP, BP, IP, SI et DI et de 16 bits permettent l'adressage d'un
opérande à l'intérieur d'un segment de 64 ko (216 positions mémoires).
❖ Le registre CS est associé au pointeur d’instruction IP, ‘CS:IP’.
❖ Pour le segment de pile, les adresses ‘SS:SP’ et ‘SS:BP’ peuvent être utilisées.
❖ Pour le segment de données, l’adresse ‘DS:BX’ peut être utilisée pour chercher des données en
mémoire.
❖ ‘DS:SI’ et ‘ES:DI’ peuvent être utilisées pour travailler sur des tableaux ou des chaines de
caractères.
Adresse Logique :
Adresse Physique :
❖ L’adresse d’une case mémoire donnée sous la forme d’une quantité sur 20 bits ‘5 digit
hexa’ est appelée adresse physique car elle correspond à la valeur envoyée réellement sur
le bus d’adresse ‘A0-A19’.
❖ L’adresse physique se calcule par :
@
Gestion de la mémoire
❖ Rappel :
▪ Effectuez l'opération suivante en passant par le système binaire. Puis, calculer le
résultat directement.
+1 +1 +1
_ 2 66 6B 6 4 E
+ + +
1 9
1 D
1 5 E
1 C D F 0
✔ On emprunte 16, car on travaille en base de 16.
Gestion de la mémoire
❖ Application :
▪ Trouver l’adresse logique, si:
✔ Adresse segment : CS=1835H
✔ Adresse de décalage (offset) : IP=57F5H
Segment : Offset
----------->
----------->
1835H : 57F5H
Gestion de la mémoire
❖ Application : ‘@Phys
ique = @
▪ Calculer l’adresse physique, si: Segmen
t * 16 +
@Offse
t’
✔ Adresse segment : CS=1005H
✔ Adresse de décalage (offset) : IP=5555H
20 bits
Gestion de la mémoire
❖ Application :
▪ Trouver l’adresse logique. Puis, calculer l’adresse physique, si:
✔ Adresse segment : CS=A000H
✔ Adresse de décalage (offset) : IP=5F00H
❑ Adresse logique :
Segment : Offset
----------->
----------->
A000H : 5F00H
Gestion de la mémoire
❖ Application :
▪ Trouver l’adresse logique. Puis, calculer l’adresse physique, si:
✔ Adresse segment : CS=A000H
✔ Adresse de décalage (offset) : IP=5F00H
❑ Adresse physique :
Adresse segment: A000H -------> 1010 0000 0000 0000
20 bits
Format d’instruction
▪ Exemples : CMP, ADD, MOV, XCHG, AND …L’opération est réalisée entre les
Opération à effectuer
- Il existe différentes façons de spécifier l’adresse d’une case mémoire dans une instruction
→ Les modes d’adressage.
❖ Adressage Immédiat.
❖ Adressage Direct.
❖ Adressage Indirect :
▪ Adressage Basé.
▪ Adressage Indexé.
▪ Adressage Basé-Indexé.
Modes d’Adressage du 8086
Adressage Registre :
❖ Ce mode d'adressage concerne tout transfert ou toute opération, entre deux registres de
même taille.
❖ Dans ce mode, le μP effectue toutes les opérations d'une façon interne et l'opérande sera
stockée dans un registre interne (sauf IP).
❖ L'opération se fait sur un ou deux registres :
▪ INST R1 , R2
▪ INST R
❑ Exemples :
- INC AX : Incrémenter le registre AX.
- MOV AX, BX : Copier le contenu de BX dans AX (AX←BX); opérandes 16 bit.
- ADD CH, DL : Ajouter le contenu de DL au CH (CH←DL+CH); opérandes 8 bits.
- ADD BX, AL : Déclaration d’erreur car BX est de 16 bits et AL est de 8 bits.
Modes d’Adressage du 8086
Adressage Immédiat :
❖ Ce mode d'adressage est un mode de manipulation des valeurs latérales avec un registre
interne.
❖ L'opérande est une constante (valeur) qui fait partie de l’instruction :
▪ INST R , VN
❑ Exemples :
- MOV AX, 243 : Charger AX par le nombre décimal 243 (AX←00F3).
- MOV AL, ‘A‘ : Charger AL par le code ASCII du caractère ‘A’ (41).
- MOV AX,‘AB’ : Charger AH par le ASCII du caractère ‘A’ et AL par le ASCII du ‘B’.
- MOV AX, A1EBH : Charger le registre AX par la valeur hexadécimal A1EB.
- MOV AL, 102H : Déclaration d’une erreur, AL est de 8 bits et la valeur 102h est de
taille de 12 bits.
- MOV AX, 40H : Cette instruction est juste, car on peut écrire 40h 🡪 0040h valeur sur
16 bits.
Modes d’Adressage du 8086
Adressage Direct :
Adressage Direct :
❑ Exemples :
- MOV AX, [1234H] : Copier le contenu de la mémoire d'adresse DS:1234H dans AX
- MOV [0200h] , AX : Copier le contenu de AX dans la mémoire d'adresse DS:0200H
- MOV AX , SS:243H : Copier le contenu de la mémoire SS:243H dans AX
- MOV BYTE [1213H] , 4Ah : Copier la valeur 4A dans la case mémoire DS:1213H
- MOV WORD [1213H] , 4Ah : 4A → adresse DS:1213H, et 00 → adresse+1 (c-à-d
DS:1214H)
Modes d’Adressage du 8086
Adressage Indirect :
❖ Si le Rseg n'est pas spécifié, le segment par défaut sera utilisé comme suit :
Roffset BX BP SI DI
Rseg par défaut DS SS DS DS
Modes d’Adressage du 8086
Adressage Indirect :
❑ Exemples :
- MOV AX, [BX] : Transfert de contenu de la case mémoire 16 bits pointer par BX,
par rapport au DATA Segment vers AX.
- ADD [SI], DL : Ajouter le contenu de DL au contenu de la case mémoire 8 bits
pointer par DS:SI et stocker le résultats dans Op Destination.
Modes d’Adressage du 8086
Adressage Indirect :
❑ Adressage Indexé.
❑ Adressage Basé-Indexé.
Adressage Indirect :
❑ Exemples :
- MOV [BX+12], AL : Transfert de contenu de AL vers la case mémoire pointer par
(BX+12) par rapport au DATA Segment (DS:BX+12).
- MOV SI, [BP+400] : Charger SI par le contenu de la mémoire d'adresse SS:BP+400.
- MOV AX, [ES:BP] : Charger AX par le contenu de la mémoire d'adresse ES:BP.
Modes d’Adressage du 8086
Adressage Indirect :
❑ Exemples :
- MOV AX, [SI] : Charger AX par le contenu de la mémoire d'adresse DS:SI
- MOV AX, [SI+200] : Charger AX par le contenu de la mémoire d'adresse DS:SI+200
- MOV AX, [DI-10] : Charger AX par le contenu de la mémoire d'adresse DS:DI-10
- MOV AX, [ES:SI+4] : Charger AX par le contenu de la mémoire d'adresse ES:SI+4
Modes d’Adressage du 8086
Adressage Indirect :
❑ Exemples :
- MOV AX, [BX+DI+5] : AX est chargé par la mémoire d'adresse DS:BX+DI+5
- MOV AX, [BX+SI] : AX est chargé par la mémoire d'adresse DS:BX+SI
- MOV AX,[SS:BP+SI+2] : AX est chargé par la mémoire d'adresse SS:BP+SI+2
- MOV AX, [SS:BP+DI] : AX est chargé par la mémoire d'adresse SS:BP+DI
Modes d’Adressage du 8086
MOV BYTE ptr [@], 4Ah @ 4A MOV WORD ptr [@], 4Ah @ 4A
00
Modes d’Adressage du 8086
Exercices d’application :
❖ Exercice 1 :
▪ Identifier le mode d’adressage pour chacune des lignes suivantes:
N° de ligne
1. MOV AL, [000BH] ; 1. Adressage direct
2. ADD AL, C4H ; 2. Adressage immédiat
3. MOV [BX], 00H ; 3. Adressage indirect basé
4. SUB AL, [BX+SI] ; 4. Adressage indirect basé-indexé
5. MOV AX, [BX+DI+5] ; 5. Adressage indirect basé-indexé
6. MOV AX, ‘AB’ ; 6. Adressage immédiat
7. ADD CH, DL ; 7. Adressage registre
8. MOV AX, [SI]; 8. Adressage indirect indexé
9. MOV AX, 5; 9. Adressage immédiat
Modes d’Adressage du 8086
Exercices d’application :
❖ Exercice 1 :
▪ Identifier le mode d’adressage pour chacune des lignes suivantes:
N° de ligne
10. MOV AX, BX; 10. Adressage registre
11. MOV AX, [BX]; 11. Adressage indirect basé
12. MOV AX, [BX+5]; 12. Adressage indirect basé + déplacement
13. MOV AX, [SI+5]; 13. Adressage indirect indexé + déplacement
14. MOV AX, [BX+SI]; 14. Adressage indirect basé-indexé
15. MOV AX, [BX+DI]; 15. Adressage indirect basé-indexé
16. MOV AX, [BX][DI]5; 16. Adressage indirect basé-indexé
17. MOV AX, [BX+SI+5]; 17. Adressage indirect basé-indexé
Modes d’Adressage du 8086
Exercices d’application :
❖ Exercice 2 :
▪ Soit : SI = 24ABH, DI = C140H et DS = A1BAH
MOV [SI+1000H], 142BH
▪ L'adresse effective : 24ABH + 1000H = 34ABH
▪ L'adresse physique : 34ABH + A1BA0H = A504BH
▪ Soit le programme ci-contre :
Exercices d’application :
❖ Exercice 3 :
▪ Soit : SS = 1240H, BP = 42A8H et SI = 4010H
MOV [BP+SI], 12H
▪ Autre écriture : MOV [BP][SI],12H
▪ L'adresse effective : BP + SI = 82B8H
▪ L'adresse physique : 10H × SS + 82B8H = 1A6B8H
▪ L'octet d'adresse 1A6B8H sera chargé par la valeur 12H.
Exercices d’application :
❖ Exercice 4 :
▪ Soit la portion du programme ci-dessous, afficher le contenu de la RAM, en
hexadécimal puis en décimal à partir de l’adresse 4000h :
MOV BX,4000h ; adresse
MOV AX,2233h
MOV [BX],AX
MOV WORD PTR [BX+2],4455h
MOV BYTE PTR [BX+4],66
MOV BYTE PTR [BX+5],77 4000h 33 4000h 51
4001h 22 4001h 34
4002h 55 4002h 85
4003h 44 4003h 68
4004h 42 4004h 66
4005h 4D 4005h 77
Jeu d’instruction
Introduction :
❖ Une instruction est définie par son code opératoire ‘opcode’. On utilise donc une notation
symbolique pour représenter les instructions ‘mnémoniques’.
❖ Elles permettent de déplacer des données d’une source vers une destination :
‘MOV’
✔ MOV Od, Os : Copie l'opérande Source ‘Os’ dans l'opérande Destination ‘Od’
[Od ← Os]
MOV R1 , R2 R1 ← R2
MOV R , [@] R ← [adr]
MOV [@] , R [adr] ← R
MOV R , VN R ← im
Copier une constante dans une case mémoire de
MOV taille [adr] , VN
taille = BYTE ou WORD
❖ Elles permettent de déplacer des données d’une source vers une destination :
‘XCHG’
✔ XCHG Od, Os : Echange de l'opérande Source ‘Os’ avec l'opérande Destination ‘Od’
[Od ← Os]
XCHG R1 , R2 R1 ⟷ R2
XCHG R , [@]
R ⟷ [adr]
XCHG [@] , R
❖ Applications :
❖ Applications :
ADD R1 , R2 R1 ← R1 + R2
ADD R , [@] R ← R + [adr]
ADD [@] , R [adr] ← R + [adr] ! ADD [adr], [adr]
ADD R , VN R ← R + im
ADD taille ptr [@] , VN [adr] ← [adr] + im
Jeu d’instruction
❖ Applications :
▪ L’instruction ADD permet de positionner les flags à ‘1’ ou à ‘0’ selon le résultat de
l’opération.
▪ Après avoir exécuté les deux programmes suivants, quelles sont les valeurs que prennent
les flags? Faire un calcul manuel pour justifier la réponse.
Jeu d’instruction
SUB R1 , R2 R1 ← R1 - R2
SUB R , [@] R ← R - [adr]
SUB [@] , R [adr] ← [adr] - R
SUB R , VN R ← R - im
SUB taille ptr [@] , VN [adr] ← [adr] - im
! (I) MUL im
Jeu d’instruction
❖ Exemple :
AH AL
? ? 0 4
1 9 0 4
0 0 6 4
Jeu d’instruction
❖ Exemple :
0 1 B 3 BX
0 9 4 4 AX
0 0 0 F B E 8 C
DX AX
Jeu d’instruction
❖ Exemple :
❖ Exemple :
F E 4 D BX
0 9 4 4 AX
F F F 0 4 1 7 4
DX AX
Jeu d’instruction
! (I) DIV im
Jeu d’instruction
❖ Exemple :
0 1 B 3 BX
0 9 4 4 AX
0 0 C 5 0 0 0 5
DX AX
reste quotient
Jeu d’instruction
❖ Exemple :
❖ Exemple :
F E 4 D BX
0 9 4 4 AX
0 0 C 5 F F F B
DX AX
reste quotient
Jeu d’instruction
INC R R ← R+1
Incrémenter le contenu d’une case mémoire de
INC taille [adr]
taille = BYTE ou WORD
❖ Exemple :
DEC R R ← R-1
Décrémenter le contenu d’une case mémoire de
DEC taille [adr]
taille = BYTE ou WORD
❖ Exemple :
DEC R R ← R-1
Décrémenter le contenu d’une case mémoire de
DEC taille [adr]
taille = BYTE ou WORD
❖ Exemple :
NEG R R ← CA2(R)
NEG taille [adr] [adresse] ← CA2([adresse])
❖ Exemple :
AH AL
? ? 6 0
0 0 6 0
Jeu d’instruction
DX AX
Jeu d’instruction
DX AX
Jeu d’instruction
AND R1 , R2 R1 ← R1 ET R2
AND R , [@] R ← R et [adr] !
AND [@] , R [adr] ← [adr] et R
AND [adr], [adr]
AND R , VI R ← R et im
AND taille [@] ,
[adr] ← [adr] et im
VI
❖ Exemple :
AND R1 , R2 R1 ← R1 ET R2
AND R , [@] R ← R et [adr] !
AND [@] , R [adr] ← [adr] et R
AND [adr], [adr]
AND R , VI R ← R et im
AND taille [@] ,
[adr] ← [adr] et im
VI
❖ Exemple :
OR R1 , R2 R1 ← R1 OU R2
OR R , [@] R ← R OU [adr] !
OR [@] , R [adr] ← [adr] OU R
OR [adr], [adr]
OR R , VI R ← R OU im
OR taille [@] , VI [adr] ← [adr] OU im
❖ Exemple :
XOR R1 , R2 R1 ← R1 OU R2
XOR R , [@] R ← R OU [adr] !
XOR [@] , R [adr] ← [adr] OU R
XOR [adr], [adr]
XOR R , VI R ← R OU im
XOR taille [@] ,
[adr] ← [adr] OU im
VI
❖ Exemple :
NOT R R ← CA1(R)
NOT taille [adr] [adresse] ← CA1([adresse])
❖ Exemple :
NEG R R ← CA2(R)
NEG taille [adr] [adresse] ← CA2([adresse])
❖ Exemple :
✔ Similaire à AND mais ne retourne pas de résultat dans Od, seuls les indicateurs sont
positionnés.
❖ Exemple :
❖ Applications :
❖ Applications :
3. Écrire une commande pour convertir un octet décimal en BL en son équivalent ASCII
décimal.
✔ Solution : Utilisez l'instruction OR pour positionner les bits 4 et 5 à 1.
OR BL, 30H ou bien, OR BL, 00110000B
❖ Applications :
3. Écrire une commande pour convertir un octet décimal en BL en son équivalent ASCII
décimal.
✔ Solution : Utilisez l'instruction OR pour positionner les bits 4 et 5 à 1.
OR BL, 30H ou bien, OR BL, 00110000B
❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.
❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.
n zéros
❑ SHR Od, n
n zéros
✔ SHR ne tient pas compte du bit de signe ⇾ SHR fonctionne avec les nombres non signés.
Jeu d’instruction
❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.
n zéros
❑ SAR Od, n
✔ SAR préserve le bit de signe ⇾ SHR fonctionne avec les nombres signés.
Jeu d’instruction
❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.
❑ ROL Od, n
❑ ROR Od, n
❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.
❑ RCL Od, n
❑ RCR Od, n
AL
CF
MOV AL, CBH 1 1 0 0 1 0 1 1 X
RCR AL, 1 X 1 1 0 0 1 0 1 1
Jeu d’instruction
ROL AL, 1 1 1 0 0 1 0 1 1 1
AL
CF
MOV AL, CBH X 1 1 0 0 1 0 1 1
RCL AL, 1 1 1 0 0 1 0 1 1 X
Jeu d’instruction
❖ Applications :
❖ Applications :
✔ Avec un décalage de 2 positions vers la gauche, puis de 7 positions vers la droite, le bit 5 de AL
est déplacé au LSB (les autres bits sont à 0). Il suffit donc de tester Le drapeau ZF.
Jeu d’instruction
❖ Un label ‘ou une étiquette’ est une représentation symbolique d’une instruction en
mémoire.
- Si CX n'est pas encore nul, il reboucle à la ligne portant l'étiquette label, sinon il
poursuit le programme à la ligne suivante :
MOV CX, 10
ici: .....
..... S’exécute 10 fois
.....
LOOP
ici
......
Jeu d’instruction
ORG 100H
MOV AX, 05
MOV CX, 05
Etiq: INC AX
Si CX≠0
LOOP Etiq
Si CX=0
MOV BX, AX
RET
Incrémenter 5 fois le
contenu du registre AX
Jeu d’instruction
... ...
... ...
... ...
JMP suite label: . . . . .
... ...
Ne seront jamais ... ...
exécutées
... ...
suite: . . . . . JMP label
... Ne seront jamais
...
... exécutées ...
Jeu d’instruction
ORG 100H
MOV AX, 05
MOV BX, 02
JMP calc
Back: JMP STOP
calc: ADD AX, BX
JMP Back
STOP: RET
Jeu d’instruction
ORG 100H
MOV AL,-3
ici: INC AL
JZ FIN
JNZ ici
FIN: HLT
Interruption
❑ Définition :
▪ Lorsqu’une donnée apparaît sur un périphérique, le circuit d’E/S signale au
microprocesseur qu’il doit effectuer la lecture de la donnée, ce qui se traduit par une
demande d'interruption ‘IRQ : Interrupt Request’.
Demande
Périphérique
d’interruption
Microprocesseur Interface
s
‘CPU’ ‘E/S’
IRQ R/W Interruption IRQ R/W CS
acceptée
▪ Avantage :
- Le microprocesseur lit les ports d’E/S uniquement lorsque des données sont disponibles,
ce qui permet de gagner du temps et d’éviter de perdre des données.
▪ Inconvénients :
- La gestion des interruptions peut devenir complexe en cas d'interruptions multiples,
entraînant des délais de traitement.
Interruption
❑ Définition :
▪ Lorsqu’une donnée apparaît sur un périphérique, le circuit d’E/S signale au
microprocesseur qu’il doit effectuer la lecture de la donnée, ce qui se traduit par une
demande d'interruption ‘IRQ : Interrupt Request’.
Demande
Périphérique
d’interruption
Microprocesseur Interface
s
‘CPU’ ‘E/S’
IRQ R/W Interruption IRQ R/W CS
acceptée
▪ Exemples :
- Clavier : demande d’interruption lorsqu’une touche est enfoncée.
- Port série : demande d’interruption lors de l’arrivée d’un caractère sur la ligne de
transmission.
- Capteur de température : demande d'interruption lorsqu'une température dépasse un seuil
prédéfini, permettant au système de réagir rapidement pour éviter des situations critiques.
Interruption
❑ Définition :
▪ Lorsqu’une donnée apparaît sur un périphérique, le circuit d’E/S signale au
microprocesseur qu’il doit effectuer la lecture de la donnée, ce qui se traduit par une
demande d'interruption ‘IRQ : Interrupt Request’.
Demande
Périphérique
d’interruption
Microprocesseur Interface
s
‘CPU’ ‘E/S’
IRQ R/W Interruption IRQ R/W CS
acceptée
▪ Remarques :
- Les interruptions peuvent également être générées par le microprocesseur lui-même en
cas de problèmes critiques, tels qu'une erreur d'alimentation, une division par zéro ou
un circuit mémoire défectueux.
- Dans de telles situations, la demande d'interruption conduit à l'arrêt du
microprocesseur.
Prise en charge d’une interruption par le µP
❑ A la suite d’une demande d’interruption par un périphérique :
❖ Le microprocesseur termine l’exécution de l’instruction en cours.
Sous-programme ‘ISR’
Programme Principale
Arrivé de ‘IRQ’
Prise en charge d’une interruption par le µP
❑ Remarques :
• Le microprocesseur peut ignorer une demande d'interruption en la masquant, ce qui se fait
généralement en positionnant un drapeau dans le registre d'état.
• Cependant, certaines interruptions, appelées non masquables, sont toujours prises en
compte par le microprocesseur.
• La dernière instruction d’un sous-programme de service d’interruption doit être
l’instruction IRET ‘retour d’interruption’.
• Lorsque plusieurs interruptions se produisent simultanément, il est nécessaire de leur
attribuer une priorité afin que le microprocesseur puisse déterminer l'ordre dans lequel il
doit les traiter.
Sous-programme ‘ISR’
Programme Principale
Arrivé de ‘IRQ’
Adresses des sous-programmes d’interruptions
❑ Lorsqu’une interruption survient, le microprocesseur a besoin de connaître l’adresse du
sous-programme de service de cette interruption.
❑ Pour cela, la source d’interruption place sur le bus de données un code numérique indiquant
la nature de l’interruption.
Adresses des sous-programmes d’interruptions
❑ Le microprocesseur utilise ce code pour rechercher dans une table en mémoire centrale
l’adresse du sous-programme d’interruption à exécuter.
❑ Chaque élément de cette table s’appelle un vecteur d’interruption.
p o r te où en
t re s i t u ée n'im l e vecteur
t ê e r
L’ISR pe
u
f i t d e spécifi
il su f
mémoire, n correspondant.
tio
d'interrup
Les interrupteurs du microprocesseur 8086
❑ Les interruptions du 8086 sont vectorisées. La table des vecteurs d’interruptions doit
obligatoirement commencer à l’adresse physique 00000H dans la mémoire centrale.
❑ Chaque vecteur d’interruption est constitué de 4 octets représentant une adresse logique du
type CS : IP.
Les interrupteurs du microprocesseur 8086
✔ Brochage du 8259
Le contrôleur d’interruptions programmable 8259
✔ Schéma fonctionnel
Le contrôleur d’interruptions programmable 8259
❑ Un circuit d’E/S dispose des registres pour gérer les échanges avec les périphériques :
▪ Registres de configuration.
▪ Registres de données.
❑ Adressage cartographique :
- Les adresses des ports d’E/S appartiennent au même espace mémoire que les circuits
mémoire → on dit que les E/S sont mappées en mémoire.
- Conséquences :
▪ L’espace d’adressage des mémoires diminue.
▪ L’adressage se fait avec une adresse de même longueur que pour les cases mémoires.
▪ Toutes les instructions utilisées pour les cases mémoires s'appliquent aussi aux ports E/S,
permettant la lecture et l'écriture avec les mêmes modes d'adressage.
✔ Adressage cartographique
Adressage des ports d’E/S
❑ Adressage indépendant :
- Le microprocesseur considère deux espaces distincts : L’espace d’adressage des mémoires -
L’espace d’adressage des ports d’E/S → C’est le cas du µP 8086.
- Conséquences :
▪ L’espace mémoire total adressable reste inchangé.
▪ L’adressage peut se faire avec une adresse plus courte (nombre de bits inférieur).
▪ Les instructions pour l'accès mémoire ne s'appliquent pas aux ports E/S, qui ont leurs
propres instructions spécifiques.
▪ Une adresse peut correspondre à une case mémoire ou à un port E/S, d'où la nécessité pour
le microprocesseur de fournir un signal pour différencier les deux types d'adressage.
✔ Adressage indépendant
Gestion des ports d’E/S par le 8086
Exemples :
✔ Lecture d’un port d’E/S sur 8 bits à
l’adresse 300H :
MOV DX,300H
IN AL,DX
✔ Écriture de la valeur 1234H dans le port
d’E/S sur 16 bits à l’adresse 49H :
MOV AX,1234H
OUT 49H,AX
L’interface parallèle programmable 8255
A1 A0 Opération
0 0 0 1 0 Lecture du port A
0 1 0 1 0 Lecture du port B
1 0 0 1 0 Lecture du port C
0 0 1 0 0 Écriture du port A
0 1 1 0 0 Écriture du port B
1 0 1 0 0 Écriture du port C
1 1 1 0 0 Écriture du registre de commande
X X X X 1 Pas de transaction
1 1 0 1 0 Illégal
X X 1 1 0 Pas de transaction
▪ Mode 0 ‘le plus simple’ : Les ports sont configurés en E/S de base. Les données écrites
sont mémorisées sur les sorties, tandis que l'état des entrées est simplement recopié sans
être mémorisé.
▪ Modes 1 et 2 ‘plus complexes’ : Ils sont utilisés pour le dialogue avec des périphériques
nécessitant un asservissement.
▪ Le bus de données du 8255 est sur 8 bits alors que celui du microprocesseur 8086 est sur
16 bits.
▪ On peut donc connecter le bus de données du 8255 sur les lignes de données de poids
faible du 8086 ‘D0 - D7’ ou sur celles de poids fort ‘D8 - D15’.
▪ Les adresses des registres du 8255 se trouvent à des adresses paires ‘validation par A0’
ou impaires ‘validation par /BHE’.
▪ Le décodeur d’adresses détermine l’adresse de base du 8255.
▪ Exemple : Connexion du 8255 sur la partie faible du bus de données du 8086, avec
décodage d’adresses incomplet → les lignes d’adresses A3-A15 ne sont pas toutes
utilisées.
L’interface parallèle programmable 8255
▪ Remarque :
✔ Le décodage d’adresses étant incomplet, le 8255 apparaît dans plusieurs plages d’adresses
selon les valeurs des bits d’adresses non décodés ‘A3-A7 et A11-A15’.
✔ Dans cet exemple, l’adresse de base 300H correspond à la 1ère adresse possible ‘bits
d’adresses non décodés tous égaux à 0’.
✔ Si on veut que le 8255 possède des adresses consécutives ‘300H, 301H, 302H et 303H’,
on peut exploiter tout le bus de données ‘D0-D15’ du 8086.
L’interface parallèle programmable 8255
▪ Pour que le 8255 possède des adresses consécutives ‘300H, 301H, 302H et 303H’, on peut
exploiter tout le bus de données ‘D0-D15’ du 8086 :