0% ont trouvé ce document utile (0 vote)
6 vues137 pages

Histoire et Architecture du Processeur 8086

Le document retrace l'histoire des processeurs Intel, en mettant l'accent sur le 8086, premier microprocesseur 16 bits et membre de la famille x86, qui a été lancé en 1978. Il décrit également les caractéristiques techniques du 8086, son architecture interne et externe, ainsi que les différents types de registres qu'il contient. Enfin, il souligne l'importance de l'architecture x86 dans l'évolution des ordinateurs personnels et des systèmes informatiques modernes.

Transféré par

khadijaizmaoune85
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues137 pages

Histoire et Architecture du Processeur 8086

Le document retrace l'histoire des processeurs Intel, en mettant l'accent sur le 8086, premier microprocesseur 16 bits et membre de la famille x86, qui a été lancé en 1978. Il décrit également les caractéristiques techniques du 8086, son architecture interne et externe, ainsi que les différents types de registres qu'il contient. Enfin, il souligne l'importance de l'architecture x86 dans l'évolution des ordinateurs personnels et des systèmes informatiques modernes.

Transféré par

khadijaizmaoune85
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Généralité

Histoire des processeurs d’

1968 Création d'Intel Corporation par Gordon Moore et Robert Noyce.

1971
Intel 4004, premier microprocesseur de l'histoire,

4 bits et 2.300 transistors.

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.

1993 – 2005 Pentium I, II, III, IV, V, ….

2006 – Aujourd’hui Processeurs multicore : Core 2, i3, i5, i7, i9 .....


Généralité

Caractéristiques du 8086 :
❑ Disponible depuis juillet 1978.

❑ Premier microprocesseur 16 bits développé par Intel.

❑ Premier de la famille x86.

❑ Constitué de 29.000 transistors sur une puce de 32,7 mm².

❑ Existe en trois versions : 8086 (5 MHz), 8086-2 (8 MHz), 8086-4 (10 MHz).

❑ Équipé d’un bus de données de 16 bits.

❑ Dispose d’un bus d’adresse de 20 bits pouvant accéder à 1Mo de mémoire.

❑ Contient 14 registres de 16 bits.

Tablette GriDPad (1989) Lunar Prospector (1998-1999)


PC Toshiba T1200 (1987)
Généralité

Pourquoi l’Intel 8086 ?


❑ C'est le 1er processeur de la famille Intel x86 (8086, 80186, 80286, 80386, 80486, Pentium,
...), d’architecture CISC 16 bits.
❑ Il est devenue l'architecture de processeur la plus répandue dans le monde des ordinateurs
personnels, stations de travail et serveurs informatiques.
❑ La majorité des ordinateurs sont équipés de µP Intel compatibles avec le 8086.

❑ 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.

Tablette GriDPad (1989) Lunar Prospector (1998-1999)


PC Toshiba T1200 (1987)
Architecture externe et description des signaux

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

Description des signaux :

❖ CLK (Clock) : Entrée d’horloge qui cadence


le fonctionnement du μP.

❖ RESET : Entrée de réinitialisation du


microprocesseur. Lorsque cette entrée est mise
à l'état haut pendant au moins 4 périodes
d'horloge, le μP est remis à zéro.

❖ READY : Entrée de synchronisation avec la


mémoire. Ce signal provient également du
générateur d’horloge. Le signal est actif à l’
état haut.

❖ TEST : Entrée de mise en attente du μP d’un


événement extérieur.
Architecture externe et description des signaux

Description des signaux :

❖ MN/MX : Le signal de cette broche indique


dans quel mode le μP va fonctionner.
▪ Mode Minimum ‘MN/MX=1’ : le 8086
fonctionne de manière autonome, il génère
lui-même le bus de commande,
▪ Mode Maximum ‘MN/MX=0’ : Les signaux
de commande sont produits par un
contrôleur de bus (8288). Ce mode permet
de réaliser des systèmes multiprocesseurs.
❖ NMI et INTR : Entrées de demande
d’interruption.
▪ NMI ‘Non Maskable Interrupt’ :
interruption prioritaire est utilisée pour des
événements critiques qui ne peuvent pas
être ignorés.
▪ INTR ‘Maskable Interrupt’ : interruption
normale.
Architecture externe et description des signaux

Description des signaux :

❖ INTA ‘Interrupt Achnowledge’ : Indique


que le μP accepte l’interruption. Il est actif à l’
état bas.
❖ HOLD et HLDA : Signaux de demande
d’accès direct à la mémoire (DMA). Le µP qui
reçoit la demande HOLD va émettre HLDA à
l’état haut comme accusé de réception.
❖ S0….S7 : Signaux d’état indiquant le type
d’opération en cours sur le bus.
❖ A16/S3…A19/S6 : 4 bits de poids fort du bus
d’adresses, multiplexés avec 4 bits d’état.
❖ AD0…AD15 : Le bus A/D est multiplexé
(multiplexage temporel) d’où la nécessité d’un
démultiplexage pour obtenir séparément les
bus d’adresses et de données.
Architecture externe et description des signaux

Description des signaux :


Architecture externe et description des signaux

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

Démultiplexage des adresses et des données :

✔ Chronogramme du bus A/D


Architecture externe et description des signaux

Démultiplexage des adresses et des données :

❖ Les lignes d’adresses et de données sont multiplexées de manière à économiser le nombre de


broches.
❖ Le bus sera démultiplexé pour fournir des bus de données et d'adresses séparément. Ceci est
réalisé par de simples ‘LATCHs’ commandés par le signal ALE.
❖ Le signal ALE est généré directement par le 8086 en mode minimum, et par son contrôleur de
bus 8288 en mode maximum.
❖ Exemples de bascules D : 8282, 74373, 74573.

✔ Circuit de démultiplexage A/D


Architecture externe et description des signaux

Démultiplexage des adresses et des données :

❖ Les lignes d’adresses et de données sont multiplexées de manière à économiser le nombre de


broches.
❖ Le bus sera démultiplexé pour fournir des bus de données et d'adresses séparément. Ceci est
réalisé par de simples ‘LATCHs’ commandés par le signal ALE.
❖ Le signal ALE est généré directement par le 8086 en mode minimum, et par son contrôleur de
bus 8288 en mode maximum.
❖ Exemples de bascules D : 8282, 74373, 74573.

✔ Circuit de démultiplexage A/D


Architecture externe et description des signaux

Modes de fonctionnement du 8086 :


Architecture externe et description des signaux

Démultiplexage des adresses et des données :


Architecture interne
❖ Unité d’Interface de Bus ‘UIB’ :
▪ 4 registres de segments: DS, CS,…
▪ 1 Pointeur d’instruction (IP).
▪ 1 Pile pour stocker les instructions
et les données en attente.
❖ Unité d’Exécution ‘UE’ :
▪ Unité Arithmétique et Logique.
▪ 4 registres généraux: AX, BX,…
▪ 2 pointeurs de pile: SP et BP.
▪ 2 registres d'index: SI et DI.
❖ Traitement des instructions :
▪ ‘1’ Génération des adresses de
données mémoire.
▪ ‘2’ Extraction des instructions par
l’UIB et les range dans une file
d’attente.
▪ ‘3’ Décodage et exécution des
instructions par l’UE
▪ ‘4’ Nouvelle extraction par UIB. Unité d’Exécution (UE) Unité d’Interface de Bus (UIB)
Architecture interne

❖ Bloc de commandes de l’unité


d’exécution:
- Permet de générer les signaux de
commandes nécessaires au fonctionnement
et à la synchronisation des différents
éléments du microprocesseur.

❖ Bloc UAL ‘Unité


Arithmétique-Logique’:
- Une partie de la machine chargée
d'effectuer les calculs.

Largeur du bus

Unidirectionnel

Bidirectionnel
Architecture interne

❖ Le 8086 contient 14 registres, de 16 bits, répartis en 4 groupes :

❑ Registres Généraux :
▪ AX, BX, CX et DX.

❑ Registres de Pointeurs et d’Index :


▪ Registres d’Index : SI et DI.
▪ Registres de Pointeurs : SP et BP.

❑ Registres de Segments :
▪ CS, DS, SS et ES.

❑ Pointeur d’Instruction et Registre


d’Etat :
▪ IP : Compteur programme.
▪ Flag : Inducteurs.
Architecture interne

❖ Registres Généraux :

- Ils peuvent être utilisés dans toutes les opérations arithmétiques et


logiques.
- Chaque registre est divisé en deux registres distincts de 8 bits.
- On peut utiliser une partie du registre si on veut y stocker une
valeur n'excédant pas 8 bits;
- Si la valeur qu’on désire ranger dans ce type de registre excède 8
bits, on utilise le registre complet.
❑ AX = ‘AH, AL’ : Accumulateur.
▪ Toutes les opérations de transfert de données avec les entrées/sorties.
▪ Toutes les opérations de traitement des chaines de caractères.
▪ Toutes les opérations arithmétiques et logiques.
❑ BX = ‘BH, BL’ : Registre de base (adressage).
▪ Utilisé pour l’adressage de données dans une zone mémoire
différente de la zone code.
Architecture interne

❖ Registres Généraux :

❑ AX = ‘AH, AL’ : Accumulateur.


▪ Toutes les opérations de transfert de données avec les
entrées/sorties.
▪ Toutes les opérations de traitement des chaines de caractères.
▪ Toutes les opérations arithmétiques et logiques.
❑ BX = ‘BH, BL’ : Registre de base (adressage).
▪ Utilisé pour l’adressage de données dans une zone mémoire
différente de la zone code
❑ CX = ‘CH, CL’ : Compteur (boucle).
▪ Sert comme compteur avec des instructions de boucles, pour
compter le nombre d’itérations.
▪ Remarque: le compteur CL sert en tant que compteur de nombre
de décalage et de rotation (à droite ou à gauche) de bits.
❑ DX = ‘DH, DL’ : Registre de données.
▪ Utilisé lors des opérations de multiplication et de division
Architecture interne

❖ Registres de Pointeurs et d’Index :

- Registres de Pointeurs ‘SP et BP’, Registres d’Index ‘SI et DI’.


- Ces registres sont plus spécialement adaptés au traitement des
éléments dans la mémoire.
- Ils sont en général munis de propriétés d'incrémentation et de
décrémentation
- Un cas particulier de pointeur est le pointeur de pile ‘Stack Pointer
: SP’ :
▪ Ce registre permet de stocker des données ou des adresses selon
le principe du "Dernier Entré Premier Sorti" ou "LIFO :
Last In First Out".
▪ Dans certain cas, la pile est contenue dans l'U.T, mais la plupart
du temps elle est située en mémoire.
Architecture interne

❖ Registres de Pointeurs et d’Index :

❑ 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 :

❑ CS ‘Code Segment’ : registre de segment de code.


❑ DS ‘Data Segment’ : registre de segment de données.
❑ SS ‘Stack Segment’ : registre de segment de pile.
❑ ES ‘Extra Segment’ : registre de segment supplémentaire pour les
données.
Ces registres sont chargés de sélectionner les différents segments
de la mémoire en pointant sur le début de chacun d'entre eux.
Chaque segment de mémoire ne peut excéder les 216 octets =
65536 → ‘64Ko’.

❖ Pointeur d’Instruction IP ‘Compteur Ordinal’ :

- Il contient l'adresse de l'emplacement mémoire où se situe la


prochaine instruction à exécuter.
- Il doit indiquer au processeur la prochaine instruction à exécuter.
- Il pointe TOUJOURS vers le premier octet de l'adresse de
l'instruction suivante.
Architecture interne

❖ Registre d’état :

- IL sert à contenir l'état de certaines opérations effectuées par le


processeur
- L’état d’une opération est donné par 9 drapeaux ‘Flags’ ou
‘Indicateurs’ : CF, PF, AF, ZF, SF, TF, IF, DF, et OF.
- Remarque :
▪ Chaque indicateur est manipulé individuellement par des
instructions spécifiques.
▪ Les bits DF, IF et TF sont des indicateurs de contrôle qui
permettent de modifier le comportement du microprocesseur. Ils
sont positionnés par le programmeur.

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.

❑ AF ‘Auxiliary Carry Flag’ :


▪ Mis à 1 lors d’un débordement non signé sur les 4 bits de poids faible.

❑ 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

✔ Cette méthode de gestion de la mémoire est appelée segmentation de la mémoire.


Gestion de la mémoire

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 :

Registre segment Registre associé


CS IP
SS SP et/ou BP
DS BX et/ou SI
ES DI
Gestion de la mémoire

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.

Registre segment Registre associé


CS IP
SS SP et/ou BP
DS BX et/ou SI
ES DI
Gestion de la mémoire

Adresse Logique :

❖ Mémoire accessible par le 8086 à un instant


donné :
Gestion de la mémoire

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 :

‘@Physique = @Segment * 1016 + @Offset ou @Segment * 1610 + @Offset’

@
Gestion de la mémoire

Calcul de l’adresse d’une case mémoire :

❖ Rappel :
▪ Effectuez l'opération suivante en passant par le système binaire. Puis, calculer le
résultat directement.

26B4EH – 9D5EH= 1CDF0H

+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

Calcul de l’adresse d’une case 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

Calcul de l’adresse d’une case 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

Adresse segment: 1005H -------> 0001 0000 0000 0101

Décalage à gauche de 4 positions ------> 0001 0000 0000 0101 0000


+ 16 bits
Adresse offset: 5555H ------> 0101 0101 0101 0101

Adresse physique: 155A5H <-----


= 16 bits
0001 0101 0101 1010 0101

20 bits
Gestion de la mémoire

Calcul de l’adresse d’une case 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

Calcul de l’adresse d’une case 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

Décalage à gauche de 4 positions ------> 1010 0000 0000 0000 0000


+ 16 bits
Adresse offset: 5F00H ------> 0101 1111 0000 0000

Adresse physique: A5F00H <-----


= 16 bits
1010 0101 1111 0000 0000

20 bits
Format d’instruction

- Un microprocesseur exécute un programme.


- Le programme est une suite d’instructions stockées dans la mémoire.
- Une instruction peut être codée sur un ou plusieurs octets.
La structure la plus générale d’une instruction est la suivante :

Opération à effectuer Opérande 1 , Opérande 1

▪ Exemples : CMP, ADD, MOV, XCHG, AND …L’opération est réalisée entre les

Il y a des instructions qui agissent sur un seul opérande :

Opération à effectuer Opérande 1

▪ Exemples : INC, DEC,,NEG, NOT …

Il y a aussi des instructions sans opérande :

Opération à effectuer

▪ Exemples : NOP, CBW …


Modes d’Adressage du 8086

- Il existe différentes façons de spécifier l’adresse d’une case mémoire dans une instruction
→ Les modes d’adressage.

- Il y a plusieurs modes d’adressage dans le 8086 :


❖ Adressage Registre.

❖ 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 :

❖ Dans ce mode d’adressage on spécifie directement l'adresse de l'opérande dans l'instruction


qui est l'adresse effective (offset) qui doit être ajouté au contenu du registre segment pour
former l'adresse physique de 20 bits.
❖ Un des deux opérandes se trouve en mémoire.
❖ L’adresse de la case mémoire est précisé directement dans l’instruction :
▪ INST R , [@]
▪ INST [@] , R
▪ INST taille [@] , VN

✔ L’adresse doit être placée dans [Rseg : Roffset].


✔ Si le segment (Rseg) n’est pas précisé, le registre DS est pris par défaut comme Rseg.
Modes d’Adressage du 8086

Adressage Direct :

❖ Dans ce mode d’adressage on spécifie directement l'adresse de l'opérande dans l'instruction


qui est l'adresse effective (offset) qui doit être ajouté au contenu du registre segment pour
former l'adresse physique de 20 bits.
❖ Un des deux opérandes se trouve en mémoire.
❖ L’adresse de la case mémoire est précisé directement dans l’instruction :
▪ INST R , [@] / INST [@] , R / INST taille [@] , VN

❑ 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 :

❖ L’adressage indirect transfère un octet ou un mot entre un registre et un déplacement


mémoire adressés par un intermédiaire → c’est à dire un des 4 registres d’offset suivants :
BX, BP, SI ou DI.
❖ Un des deux opérandes se trouve en mémoire.
❖ L’adresse se trouve dans l’un de ces 4 registres BX, BP, SI ou DI :
▪ INST R , [Rseg : Roffset]
▪ INST [Rseg : Roffset] , R
▪ INST taille [Rseg : Roffset] , VN

❖ 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 :

❖ L’adressage indirect transfère un octet ou un mot entre un registre et un déplacement


mémoire adressés par un intermédiaire → c’est à dire un des 4 registres d’offset suivants :
BX, BP, SI ou DI.
❖ Un des deux opérandes se trouve en mémoire.
❖ L’adresse se trouve dans l’un de ces 4 registres BX, BP, SI ou DI :
▪ INST R , [Rseg : Roffset]
▪ INST [Rseg : Roffset] , R
▪ INST taille [Rseg : Roffset] , VN

❑ 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 :

❖ L’adressage indirect est divisé en 3 catégories selon le registre d’offset utilisé :


❑ Adressage Basé.

❑ Adressage Indexé.

❑ Adressage Basé-Indexé.

Mode Adressage Basé Indexé Basé-Indexé


BX, DI
BX DI BX, SI
Registres utilisés
BP SI BP, DI
BP, SI
Modes d’Adressage du 8086

Adressage Indirect :

❑ Adresse Indirect Basé :


- L’offset se trouve dans l’un des deux registres de base ‘BX ou BP’.
- On peut préciser un déplacement (Dep) optionnel qui sera ajouté au contenu de Rbase pour
déterminer l’offset :
▪ INST R , [Rbase+Dep]
▪ INST [Rbase+Dep] , R
▪ INST taille [Rbase+Dep] , VN

❑ 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 :

❑ Adresse Indirect Indexé :


- L’offset se trouve dans l’un des deux registres de base ‘SI ou DI’.
- On peut préciser un déplacement (Dep) optionnel qui sera ajouté au contenu de Rindex
pour déterminer l’offset :
▪ INST R , [Rindex+Dep]
▪ INST [Rindex+Dep] , R
▪ INST taille [Rindex+Dep] , VN

❑ 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 :

❑ Adresse Indirect Basé-Indexé :


- L'offset de l’adresse de l'opérande est la somme d’un registre de base (Rbase), d'un registre
d'index (Rindex) et d'un déplacement (Dep) optionnel.
- Si Rseg n'est pas spécifié, le segment par défaut du registre de base est utilisé :
▪ INST R , [Rbase+Rindex +Dep]
▪ INST [Rbase+Rindex +Dep] , R
▪ INST taille [Rbase+Rindex +Dep] , VN

❑ 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

Taille des échanges avec la mémoire :

❖ La mémoire est organisée en octets.


❖ Lorsqu'une instruction est effectuée entre un registre et des données en mémoire, le registre
détermine la taille de l'opération :
Si le registre est sur un octet, l'opération sera effectuée avec une cellule de mémoire.
Si le registre est sur un mot, l'opération sera effectuée avec deux cellules de mémoire.
Lorsqu'on effectue une opération entre une constante et une cellule de mémoire, il faut
utiliser les préfixes BYTE (octet) et WORD (mot) pour spécifier le nombre d'octets à écrire.

MOV [@], AL @ AL MOV [@], AX @ AL


AH

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 :

Dans la dernière instruction où l'adressage indirect indexé est employé :


▪ L'adresse effective : C140H
▪ L'adresse physique : A1BA0H + C140H = ADCE0H
Modes d’Adressage du 8086

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.

▪ Indiquer le mode d’adressage pour chacune des instructions suivantes :


Adressage registre
Adressage immédiat
Adressage direct
Adressage indirect basé
Adressage indirect basé indexé
Modes d’Adressage du 8086

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 :

❖ Chaque microprocesseur reconnait un ensemble d’instructions appelé jeu d’instructions


fixé par le constructeur.

❖ Une instruction est définie par son code opératoire ‘opcode’. On utilise donc une notation
symbolique pour représenter les instructions ‘mnémoniques’.

❖ Un programme constitué de mnémoniques est appelé programme en assembleur.

❖ Les instructions peuvent être classées en groupes :


❑ Instructions de transfert de données (MOV, XCHG, ...) ;

❑ Instructions arithmétiques (ADD, SUB, MUL, DIV, ...) ;

❑ Instructions logiques (NOT, AND, OR, XOR, ...) ;

❑ Instructions de décalage et de rotation (SHR, SHL, ROL, ROR, ...);

❑ Instructions de branchement (JMP, Jxx, LOOP, ...) ...


Jeu d’instruction

Les Instructions de Transfert :

❖ 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

MOV [adr], [adr]


! MOV Rseg, Rseg
Jeu d’instruction

Les Instructions de Transfert :

❖ 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

! XCHG [adr], [adr]


Jeu d’instruction

Les Instructions de Transfert :

❖ Applications :

1. Ecrire un code permettant de :


- Mettre dans AX la valeur 10FAH
- Mettre dans BX la valeur 2234H
- Permuter le contenu des registres AX et BX

2. Ecrire un code permettant de:


- Mettre dans SI la valeur 10AAH
- Mettre dans DI la valeur 10ABH
- Mettre dans [SI] la valeur FFH
- Mettre dans [DI] la valeur 33H
- Permuter le contenu des [SI] et [DI]
Jeu d’instruction

Les Instructions de Transfert :

❖ Applications :

3. Ecrire un programme en assembleur 8086 qui permet de :


- Charger la valeur 100H dans le registre AX.
- Charger la valeur 205H dans le registre BX.
- Permuter les valeurs des registres AX et BX.

4. Refaire la même chose sans utiliser l’instruction XCHG :


Jeu d’instruction

Les Instructions Arithmétiques :

❖ Le 8086 permet d'effectuer les quatre opérations arithmétiques de base : l'addition, la


soustraction, la multiplication et la division.
❖ Les opérations peuvent s'effectuer sur des nombres de 8 bits ou de 16 bits signés ou non
signés → Les nombres signés sont représentés en complément à 2.

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘ADD’
✔ ADD Od, Os : Additionne l'opérande source ‘Os’ et l'opérande destination ‘Od’ et met
le résultat dans l'opérande destination ‘Od’ → [Od ← Od + Os]

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

Les Instructions Arithmétiques :

❖ 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

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘SUB’
✔ SUB Od, Os : Soustrait l'opérande source ‘Os’ et l'opérande destination ‘Od’ et met le
résultat dans l'opérande destination ‘Od’ → [Od ← Od - Os]

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

! SUB [adr], [adr]


❖ Exemple :
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘MUL’
✔ MUL Os : Effectue une multiplication non signée entre l'accumulateur ‘AL ou AX’ et
l'opérande ‘Os’ → Le résultat de taille double est stocké dans l'accumulateur et son
extension ‘AH ou DX’.

✔ IMUL Os : Identique à MUL excepté qu’une multiplication signée est effectuée.

(I) MULReg8 AX ← AL*Reg8


(I) MULBYTE [@] AX ← AL*[adr]
(I) MULReg16 DX:AX ← AX*Reg16
(I) MULWORD [@] DX:AX ← AX*[adr]
(I) MULReg8 AX ← AL*Reg8

! (I) MUL im
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘MUL’

❖ Exemple :

MOV AL, 4 ; Charger le registre AL par 04)10 = 04)16


MOV AH, 25 ; Charger le registre AH par 25)10 = 19)16
MUL AH ; Multiplier le contenu de AH par le contenu de AL
et stocker le résultat dans AX
AX

AH AL
? ? 0 4

1 9 0 4

0 0 6 4
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘MUL’

❖ Exemple :

MOV BX, 435 ; BX ← 435)10 = 01B3)16


MOV AX, 2372 ; AX ← 2372)10 = 0944)16
MUL BX ; {DX,AX} ← 01B3)16 x 0944)16

0 1 B 3 BX

0 9 4 4 AX

0 0 0 F B E 8 C

DX AX
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘MUL’

❖ Exemple :

MOV AL, 51 ; Charger le registre AL par 51)10 = 33)16


MOV BL, 31 ; Charger le registre BL par 31)10 = 1F)16
MUL BL ; Multiplier le contenu de BL par le contenu de
l’accumulateur AL et stocker le résultat dans AX

MOV AX, 4253 ; Charger le registre AX par 4253)10 = 109D)16


MOV BX, 1689 ; Charger le registre BL par 1689)10 = 0699)16
MUL BX ; Multiplier le contenu de BX par le contenu de
l’accumulateur AX et stocker le résultat dans
{DX,AX}
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘IMUL’

❖ Exemple :

MOV BX, -435 ; BX ← -435)10 = FE4D)16


MOV AX, 2372 ; AX ← 2372)10 = 0944)16
IMUL BX ; {DX,AX} ← FE4D)16 x 0944)16

F E 4 D BX

0 9 4 4 AX

F F F 0 4 1 7 4

DX AX
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘DIV’
✔ DIV Os : Effectue une division non signée entre l'accumulateur ‘AL ou AX’ par
l'opérande ‘Os’ → Le quotient est récupéré dans le registre AL ou AX et le reste dans le
registre AH ou DX.

✔ IDIV Os : Identique à DIV excepté qu'une division signée est effectuée.

(I) DIV Reg8 AL ← Quotient


(I) DIV BYTE [@] AH ← Reste
(I) DIV Reg16 AX ← Quotient
(I) DIV WORD [@] DX ← Reste

! (I) DIV im
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘DIV’

❖ Exemple :

MOV BX, 435 ; BX ← 435)10 = 01B3)16


MOV AX, 2372 ; AX ← 2372)10 = 0944)16
DIV BX ; AX ← Quotient DX ← Reste

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

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘DIV’

❖ Exemple :

MOV AX, 35 ; Charger le registre AX par 35)10 = 23)16


MOV BL, 10 ; Charger le registre BL par 10)10 = A)16
DIV BL ; Diviser le contenu de AX par le contenu de BL et
stocker le quotient dans AL(=3H) et le reste dans
AH(=5H)

MOV DX, 0 ; Mettre le registre DX à 0


MOV AX, 1234 ; Charger le registre AX par 1234)10 = 04D2)16
MOV BX, 10 ; Charger le registre BX par 10)10 = A)16
DIV BX ; Diviser le contenu de AX par le contenu de
; BX et stocker le quotient AX(=7BH) et le reste
dans DX(=4H)
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘IDIV’

❖ Exemple :

MOV BX, -435 ; BX ← 435)10 = FE4D)16


MOV AX, 2372 ; AX ← 2372)10 = 0944)16
IDIV BX ; AX ← Quotient DX ← Reste

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

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘INC’
✔ INC Od : incrémente l'opérande ‘Od’ d’une unité → [Od ← Od + 1]

INC R R ← R+1
Incrémenter le contenu d’une case mémoire de
INC taille [adr]
taille = BYTE ou WORD
❖ Exemple :

▪ En partant de la situation mémoire illustrée, quelle est la situation mémoire après


l’exécution séquentielle des instructions suivantes :

INC BYTE ptr [400H]


DS:0400H FEH
INC WORD ptr [400H] DS:0401H 33H
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘DEC’
✔ DEC Od : décrémente l'opérande ‘Od’ d’une unité → [Od ← Od - 1]

DEC R R ← R-1
Décrémenter le contenu d’une case mémoire de
DEC taille [adr]
taille = BYTE ou WORD
❖ Exemple :

▪ En partant de la situation mémoire illustrée, quelle est la situation mémoire après


l’exécution séquentielle des instructions suivantes :

DEC BYTE ptr [400H]


DS:0400H FEH
DEC WORD ptr [400H] DS:0401H 33H
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘DEC’
✔ DEC Od : décrémente l'opérande ‘Od’ d’une unité → [Od ← Od - 1]

DEC R R ← R-1
Décrémenter le contenu d’une case mémoire de
DEC taille [adr]
taille = BYTE ou WORD
❖ Exemple :

DS:0400H FEH DS:0400H FFH DS:0400H 00H


33H 33H 34H

INC BYTE ptr [400H] INC WORD ptr [400H]


Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘NEG’
✔ NEG Od : remplace l'opérande ‘Od’ par son complément → [Od ← 0 – Od =
CA2(Od)]

NEG R R ← CA2(R)
NEG taille [adr] [adresse] ← CA2([adresse])

❖ Exemple :

MOV AX, 2372 ; Charger le registre AX par 2372)10 = 0944H


NEG AX ; Remplace le contenu de AX par son CA2 = F6BCH
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘CMP’
✔ CMP Od, Os : Compare ‘soustrait’ les opérandes ‘Od’ et ‘Os’ et positionne les flags
‘registre d’état’ en fonction du résultat. Od n’est pas modifié.

Op non Signés Op Signés


OF SF ZF CF OF SF ZF CF
Od > Os - - 0 0 0/1 0 0 -
Od = Os - - 1 0 0 0 1 -
Od < Os - - 0 1 0/1 1 0 -
❖ Exemple :

MOV AL, 23 ; Charger le registre AL par 23)10 =


17H
CMP AL, 34
; Comparer le contenu de AL avec
34)10 = 22H; et positionner les flags
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘CBW / CWD’
✔ CBW : Conversion d’octet en mot, extension de AL dans AH en respectant le signe.

✔ CWD : Conversion de mot en double mot, extension de AX dans DX en respectant le


signe.
❖ Exemple :

MOV AL, 96 ; Charger le registre AL par 96)10 = 60H


CBW ; Convertit la valeur du registre AL (byte) en
une copie signée dans AX (word)
AX

AH AL
? ? 6 0
0 0 6 0
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘CBW / CWD’
✔ CBW : Conversion d’octet en mot, extension de AL dans AH en respectant le signe.

✔ CWD : Conversion de mot en double mot, extension de AX dans DX en respectant le


signe.
❖ Exemple :

MOV AX, 96 ; AX ← 60H


CWD ; Convertit la valeur du registre AX
AX (word) en une copie signée AH AL
dans DX:AX (double word)
0 0 6 0
0 0 0 0 0 0 6 0

DX AX
Jeu d’instruction

Les Instructions Arithmétiques :

❖ Elles permettent d’effectuer les opérations arithmétiques :


‘CBW / CWD’
✔ CBW : Conversion d’octet en mot, extension de AL dans AH en respectant le signe.

✔ CWD : Conversion de mot en double mot, extension de AX dans DX en respectant le


signe.
❖ Exemple :

MOV AX, -96 ; AX ← FFA0H


CWD ; Convertit la valeur du registre AX
AX (word) en une copie signée AH AL
dans DX:AX (double word)
F F A 0
F F F F F F A 0

DX AX
Jeu d’instruction

Les Instructions Logiques :

❖ Le 8086 permet d’exécuter les instructions logiques.

❖ Ces instructions permettent de manipuler des données au niveau des bits.

❖ Les opérations logiques de base sont :


❑ ET.
❑ OU.
❑ OU Exclusif.
❑ NOT : Complément à 1.
❑ Complément à 2.
❑ Décalages et rotations.
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘AND’
✔ AND Od, Os : effectue un ET logique entre Od et Os → [Od ← Od ET Os]

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 :

MOV AL, 10010110B ; AL ← 96H ? ? 9 6 AX


MOV BL, 11001101B ; BL ← CDH ? ? C D BX
AND AL, BL ; AL ← [Link] ? ? 8 4 AX
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘AND’
✔ AND Od, Os : effectue un ET logique entre Od et Os → [Od ← Od ET Os]

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 :

MOV AX, 0503H ; AX ← 503H 0 5 0 3 AX


MOV BX, 0201H ; BX ← 201H 0 2 0 1 BX
AND AX, BX ; AX ← [Link] 0 0 0 1 AX
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘OR’
✔ OR Od, Os : effectue un OU logique entre Od et Os → [Od ← Od OU Os]

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 :

MOV AX, 0503H ; AX ← 503H 0 5 0 3 AX


MOV BX, 0201H ; BX ← 201H 0 2 0 1 BX
OR AX, BX ; AX ← AX+BX 0 7 0 3 AX
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘XOR’
✔ XOR Od, Os : effectue un OU EXCLUSIF entre Od et Os → [Od ← Od XOR Os]

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 :

MOV AX, 0503H ; AX ← 503H 0 5 0 3 AX


MOV BX, 0201H ; BX ← 201H 0 2 0 1 BX
OR AX, BX ; AX ← AX⊕BX 0 7 0 2 AX
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘NOT’
✔ NOT Od : remplace l’opérande Od par son complément à 1 → [Od ← CA1(Od)]

NOT R R ← CA1(R)
NOT taille [adr] [adresse] ← CA1([adresse])
❖ Exemple :

MOV AX, 2372 ; Charger le registre AX par 2372)10 = 0944H


NOT AX ; Remplace le contenu de AX par son CA1 = F6BBH

MOV AX, 0503H ; Charger le registre AX par 0503H


NOT AX ; Remplace le contenu de AX par son CA1 = AFCH

MOV AX, 96 ; Charger le registre AX par 0060H


NOT AX ; Remplace le contenu de AX par son CA1 = FF9FH
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘NEG’
✔ NEG Od : remplace l’opérande Od par son complément à 2 → [Od ← CA2(Od)]

NEG R R ← CA2(R)
NEG taille [adr] [adresse] ← CA2([adresse])
❖ Exemple :

MOV AX, 2372 ; Charger le registre AX par 2372)10= 0944H


NEG AX ; Remplace le contenu de AX par son CA2 = F6BCH

MOV AX, 0503H ; Charger le registre AX par 0503H


NEG AX ; Remplace le contenu de AX par son CA2 = AFDH

MOV AX, 96 ; Charger le registre AX par 0060H


NEG AX ; Remplace le contenu de AX par son CA2 = FFA0H
Jeu d’instruction

Les Instructions Logiques :

❖ Elles permettent de manipuler des données au niveau des bits.


‘TEST’
✔ TEST Od, Os : effectue un ET logique entre Od et Os.

✔ Similaire à AND mais ne retourne pas de résultat dans Od, seuls les indicateurs sont
positionnés.

❖ Exemple :

MOV AX, 0503H ; AX ← 0503H 0 5 0 3 AX


SF 0
MOV BX, 0201H ; BX ← 0201H 0 2 0 1 BX
ZF 0
TEST AX, BX ; [Link] 0 5 0 3 AX
Jeu d’instruction

Les Instructions Logiques :

❖ Applications :

1. Ecrire un programme qui fait AX ⊕ BX sans utiliser l'instruction XOR.


Jeu d’instruction

Les Instructions Logiques :

❖ Applications :

2. Écrire une commande pour convertir un caractère en minuscule en AL en majuscule.


✔ Solution : Utilisez l'instruction AND pour effacer le bit 5.
AND AL, DFH ou bien, AND AL, 11011111B

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

3. Sauter à une étiquette si la valeur dans AL est différente de zéro.


✔ Solution : Utilisez l'instruction OR entre l’octet et lui-même, puis JNZ.
OR AL, AL ; ORing any number with itself does not change its value.
JNZ IsNotZero
Jeu d’instruction

Les Instructions Logiques :

❖ Applications :

2. Écrire une commande pour convertir un caractère en minuscule en AL en majuscule.


✔ Solution : Utilisez l'instruction AND pour effacer le bit 5.
AND AL, DFH ou bien, AND AL, 11011111B

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

3. Sauter à une étiquette si la valeur dans AL est différente de zéro.


✔ Solution : Utilisez l'instruction OR entre l’octet et lui-même, puis JNZ.
OR AL, AL ; ORing any number with itself does not change its value.
JNZ IsNotZero
Jeu d’instruction

Les Instructions de Décalage et de Rotation :

❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.

SHL Od, n Décalage Logique Gauche (Shift Logical Left)

SAL Od, n Décalage Arithmétique Gauche (Shift Arithmetic Left)

SHR Od, n Décalage Logique Droit (Shift Logical Right)

SAR Od, n Décalage Arithmétique Droit (Shift Arithmetic Right)

ROL Od, n Décalage Circulaire Gauche (Rotate Left)

ROR Od, n Décalage Circulaire Droit (Rotate Right)


Décalage Circulaire Gauche à travers la retenue (Rotate Left
RCL Od, n
through Carry)
Décalage Circulaire Droit à travers la retenue (Rotate Right through
RCR Od, n
Carry)
Od → Registre ; n → nombre, CL ou CX
Jeu d’instruction

Les Instructions de Décalage et de Rotation :

❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.

❑ SHL Od, n et SAL Od, n ont le même comportement

CF MSB .... LSB 0 .... 0

n zéros

❑ SHR Od, n

0 .... 0 MSB .... LSB CF

n zéros

✔ SHR ne tient pas compte du bit de signe ⇾ SHR fonctionne avec les nombres non signés.
Jeu d’instruction

Les Instructions de Décalage et de Rotation :

❖ Elles décalent les bits d'un mot ou d’un octet vers la gauche ou la droite d'un certain
nombre de positions.

❑ SHL Od, n et SAL Od, n ont le même comportement

CF MSB .... LSB 0 .... 0

n zéros

❑ SAR Od, n

MSB .... LSB CF

✔ SAR préserve le bit de signe ⇾ SHR fonctionne avec les nombres signés.
Jeu d’instruction

Les Instructions de Décalage et de Rotation :

❖ 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

CF MSB .... LSB

❑ ROR Od, n

MSB .... LSB CF


Jeu d’instruction

Les Instructions de Décalage et de Rotation :

❖ 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

CF MSB .... LSB

❑ RCR Od, n

MSB .... LSB CF


Jeu d’instruction

Les Instructions de Décalage et de Rotation :


❖ Exemple :
AL
CF
MOV AL, CBH 1 1 0 0 1 0 1 1 X
SHR AL, 1 0 1 1 0 0 1 0 1 1
AL
CF
MOV AL, CBH 1 1 0 0 1 0 1 1 X
ROR AL, 1 1 1 1 0 0 1 0 1 1

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

Les Instructions de Décalage et de Rotation :


❖ Exemple :
AL
CF
MOV AL, CBH X 1 1 0 0 1 0 1 1
SHL AL, 1 1 1 0 0 1 0 1 1 0
AL
CF
MOV AL, CBH X 1 1 0 0 1 0 1 1

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

Les Instructions de Décalage et de Rotation :

❖ Applications :

1. Écrire un programme permettant de déterminer la valeur du quartet le plus significatif


dans le registre AL.
MOV AL, CBH ; AL ← 11001011B
✔ Après l’exécution de la dernière
MOV CL, 4 ; CL ← 04H instruction, le contenu de AL sera 0CH
SHR AL, CL ; Décaler AL 4 bits à droite

2. Écrire un programme pour déterminer l'état du bit 5 de AL :


MOV AL, CBH ; AL ← 11001011B
MOV CL, 3 ; CL ← 03H
SHL AL, CL ; Décaler AL 3 bits à gauche ✔ Avec un décalage de 6 positions vers la
droite ou de 3 positions vers la gauche, le
Ou bien :
bit 5 de AL est transféré au CF. Il suffit
MOV AL, CBH ; AL ← 11001011B donc de tester ce drapeau.
MOV CL, 6 ; CL ← 06H
SHR AL, CL ; Décaler AL 6 bits à droite
Jeu d’instruction

Les Instructions de Décalage et de Rotation :

❖ Applications :

1. Écrire un programme permettant de déterminer la valeur du quartet le plus significatif


dans le registre AL.
MOV AL, CBH ; AL ← 11001011B
✔ Après l’exécution de la dernière
MOV CL, 4 ; CL ← 04H instruction, le contenu de AL sera 0CH
SHR AL, CL ; Décaler AL 4 bits à droite

2. Écrire un programme pour déterminer l'état du bit 5 de AL :


MOV AL, CBH ; AL ← 11001011B
MOV CL, 2 ; CL ← 02H
SHL AL, CL ; Décaler AL 2 bits à gauche : AL ← 00101100B
MOV CL, 7 ; CL ← 07H
SHR AL, CL ; Décaler AL 7 bits à droite :AL ← 00000000B

✔ 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

Les Instructions de Branchement :

❖ Les instructions de branchement permettent de modifier l’ordre d’exécution des


instructions du programme en fonction de certaines conditions.

❖ L’instruction de branchement est une instruction à un seul opérande « INST Label ».

❖ Un label ‘ou une étiquette’ est une représentation symbolique d’une instruction en
mémoire.

❖ Le mode d’adressage des instructions de branchement est Immédiat.

❖ On distingue trois types d’instructions de branchement:


❑ Contrôle de boucle : LOOP X
❑ Branchement inconditionnel : JMP X
❑ Branchement conditionnel : JCONDITION
Jeu d’instruction

Les Instructions de Branchement :

❑ Instructions de contrôle de boucle : LOOP X


- LOOP label : fonctionne automatiquement avec le registre CX.

- Quand le processeur rencontre une instruction LOOP, il décrémente le registre CX.

- 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

Les Instructions de Branchement :

❑ Instructions de contrôle de boucle : LOOP X @DS: 1107H


- Que fait ce programme ? @DS: 1106H
@DS: 1105H
ORG 100H @DS: 1104H
MOV DX, 0 @DS: 1103H
MOV CX, 5 @DS: 1102H
ici: MOV BX, CX @DS: 1101H
ADD DL, [BX+1100H] @DS: 1100H
LOOP ici
RET
DS: 1101H
1105H
1104H
1103H
1102H
+
DL
DL
Jeu d’instruction

Les Instructions de Branchement :

❑ Instructions de contrôle de boucle : LOOP X


- Que fait ce programme ?

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

Les Instructions de Branchement :

❑ Instructions de branchement inconditionnel : JMP


- JMP label : effectue un saut (jump) vers le label spécifié.

... ...
... ...
... ...
JMP suite label: . . . . .
... ...
Ne seront jamais ... ...
exécutées
... ...
suite: . . . . . JMP label
... Ne seront jamais
...
... exécutées ...
Jeu d’instruction

Les Instructions de Branchement :

❑ Instructions de branchement inconditionnel : JMP


- Que fait ce programme ?

ORG 100H
MOV AX, 05
MOV BX, 02
JMP calc
Back: JMP STOP
calc: ADD AX, BX
JMP Back
STOP: RET
Jeu d’instruction

Les Instructions de Branchement :

❑ Instructions de branchement conditionnel : Jcondition


- Un saut conditionnel n’est exécuté que si une certaine condition est satisfaite, sinon
l’exécution se poursuit séquentiellement à l’instruction suivante.
- Instructions de branchement (saut) arithmétique :

Condition Nombres signés Nombres non signés


A=B JE : Jump if Equal
A≠B JNE : Jump if Not Equal
A>B JG : Jump if Greater JA : Jump if Above
A≥B JGE : Jump if Greater or Equal JAE : Jump if Above or Equal
A<B JL : Jump if Less JB : Jump if Below
A≤B JLE : Jump if Less or Equal JBE : Jump if Below or Equal
Jeu d’instruction

Les Instructions de Branchement :

❑ Instructions de branchement conditionnel : Jcondition


- Un saut conditionnel n’est exécuté que si une certaine condition est satisfaite, sinon
l’exécution se poursuit séquentiellement à l’instruction suivante.
- Instructions de branchement (saut) conditionnel :

Instruction Nom Condition


JZ Jump if Zero Saut si ZF = 1
JNZ Jump if Not Zero Saut si ZF = 0
JC Jump if Carry Saut si CF = 1
JNC Jump if Not Carry Saut si CF = 0
JS Jump if Sign Saut si SF = 1
JNS Jump if Not Sign Saut si SF = 0
JO Jump if Overflow Saut si OF = 1
JNO Jump if Not Overflow Saut si OF = 0
JP Jump if Parity Saut si PF = 1
JNP Jump if Not Parity Saut si PF = 0
Jeu d’instruction

Les Instructions de Branchement :

❑ Instructions de branchement conditionnel : Jcondition


- Que fait ce programme ?

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.

❖ Il range le contenu des principaux registres sur la pile de sauvegarde : pointeur


d’instruction, flags, ...
❖ Il émet un accusé de réception de demande d’interruption ‘Interrupt Acknowledge’
indiquant au interface d’E/S que la demande d’interruption est acceptée.
❖ Il abandonne l’exécution du programme en cours et va exécuter un sous-programme de
service de l’interruption ‘ISR : Interrupt Service Routine’.
❖ Après l’exécution de l’ISR, les registres sont restaurés à partir de la pile et le
microprocesseur reprend l’exécution du programme qu’il avait abandonné.

Sous-programme ‘ISR’

Service de l’interruption Retour au P.P ‘IRET’

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’

Service de l’interruption Retour au P.P ‘IRET’

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.

❑ On dit que les interruptions sont vectorisées.

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

❑ Le microprocesseur 8086 peut gérer jusqu’à 256 interruptions → Chaque interruption


recoit un numéro compris entre 0 et 255 appelé type de l’interruption.

❑ Trois sortes d’interruptions sont reconnues par le 8086 :

❖ Interruptions matérielles produites par l’activation des lignes INTR et NMI du


microprocesseur,
❖ Interruptions logicielles produites par l’instruction ‘INT n’, où n est le type de
l’interruption,
❖ Interruptions processeur générées par le microprocesseur en cas de dépassement, de
division par zéro ou lors de l’exécution pas à pas d’un programme.

❑ 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

❑ 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.
❑ Correspondance entre le type de l’interruption et l’adresse
du vecteur correspondant :
Adresse vecteur d’interruption = 4 × type de l’interruption
▪ Exemples :
✔ Interruption 20H → Adresse du vecteur = 4 × 20H =
80H.
✔ Interruption 40H → Adresse du vecteur = 4 × 40H =
100H.
Le contrôleur d’interruptions programmable 8259

❑ Le microprocesseur 8086 ne dispose que de deux lignes de demandes d’interruptions


matérielles ‘NMI et INTR’.
❑ Pour pouvoir connecter plusieurs périphériques utilisant des interruptions, on peut utiliser le
contrôleur programmable d’interruptions 8259 dont le rôle est de :
❖ Recevoir des demandes d’interruptions des périphériques.

❖ Résoudre les priorités des interruptions.

❖ Générer le signal INTR pour le 8086.

❖ Emettre le numéro de l’interruption sur le bus de données.

❑ Un 8259 peut gérer jusqu’à 8 demandes d’interruptions


matérielles.

✔ Brochage du 8259
Le contrôleur d’interruptions programmable 8259

✔ Schéma fonctionnel
Le contrôleur d’interruptions programmable 8259

❑ Remarque : si le nombre de demandes d’interruptions est supérieur à 8, on peut placer


plusieurs 8259 en cascade.

✔ Schéma fonctionnel pour IRQ > 8


L’interface parallèle programmable

❑ Une interface d’E/S est un circuit intégré permettant au microprocesseur de communiquer


avec des périphériques externes : clavier, écran, imprimante, processus industriel, ...
❑ Elles se connectent au microprocesseur via les bus d'adresses, de données et de
commandes.
❑ Les points d’accès aux interfaces sont appelés ports.

✔ Schéma synoptique d’un circuit d’E.S


Adressage des ports d’E/S

❑ 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.

❑ A chaque registre est assigné une adresse, permettant au microprocesseur d’accéder à un


port d’E/S en spécifiant l’adresse de l’un de ses registres.
❑ Le microprocesseur peut voir les adresses des ports d’E/S de deux manières :
▪ Adressage cartographique.
▪ Adressage indépendant.

✔ Adressage cartographique ✔ Adressage indépendant


Adressage des ports d’E/S

❑ 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

❑ Ce signal est utilisé pour valider le décodage


d’adresse dans les deux espaces.
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

❑ Rôle : Transférer des données du microprocesseur vers des périphériques et inversement,


tous les bits de données étant envoyés ou reçus simultanément.
❑ Le 8255 est une interface parallèle programmable → elle peut être configurée en entrée
et/ou en sortie par programme.

✔ Schéma fonctionnel ✔ Brochage du 8255


L’interface parallèle programmable 8255

✔ Schéma fonctionnel ✔ Brochage du 8255


L’interface parallèle programmable 8255

❑ Accès aux registres du 8255 :


▪ Les lignes d’adresses A0 et A1 définissent les adresses des registres du 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

✔ Remarque : le registre de commande est accessible uniquement en écriture, la lecture de


ce registre n’est pas autorisée.
L’interface parallèle programmable 8255

❑ Configuration et programmation du 8255 :


▪ Les ports sont configurés en entrée ou en sortie selon le registre de commande.

▪ De plus le 8255 peut fonctionner selon 3 modes :


- Mode 0 : E/S de base.
- Mode 1 : Entrée sortie échantillonnée.
- Mode 2 : Bus bidirectionnel.

✔ Structure du registre de commande


L’interface parallèle programmable 8255

❑ Configuration et programmation du 8255 :

▪ 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.

✔ Structure du registre de commande


L’interface parallèle programmable 8255

❑ Connection du 8255 sur les bus du 8086 :

▪ 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’.

✔ Connection 8255 et 8086


L’interface parallèle programmable 8255

❑ Connection du 8255 sur les bus du 8086 :

▪ Une donnée est envoyée ‘ou reçue’ par le microprocesseur 8086 :


- Sur la partie faible du bus de données lorsque l’adresse à écrire ‘ou à 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 être utilisé pour sélectionner le 8255.

✔ Connection 8255 et 8086


L’interface parallèle programmable 8255

❑ Connection du 8255 sur les bus du 8086 :

▪ 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.

▪ Les lignes A1 et A2 déterminent les adresses des registres du 8255.

✔ Connection 8255 et 8086


L’interface parallèle programmable 8255

❑ Connection du 8255 sur les bus du 8086 :

▪ 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

❑ Détermination de l’adresse du 8255 :

❖ A2 = 0 et A1 = 0 : Adresse du port A = adresse de base + 0 = 300H.

❖ A2 = 0 et A1 = 1 : Adresse du port B = adresse de base + 2 = 302H.

❖ A2 = 1 et A1 = 0 : Adresse du port C = adresse de base + 4 = 304H.


❖ A2 = 1 et A1 = 1 : Adresse du registre de commande = adresse de base + 6 = 306H.

▪ Remarque :
✔ Le décodage d’adresses étant incomplet, le 8255 apparaî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

❑ Détermination de l’adresse du 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 :

Vous aimerez peut-être aussi