Vous êtes sur la page 1sur 25

24/05/2022

Chapitre 5: Le Microprocesseur Intel 8086

3ème Année GTR et Génie Informatique

Pr. Hayat SEMLALI

h.semlali@uca.ma

1. Caractéristiques du 8086 :

Le Microprocesseur Intel 8086 possède les caractéristiques suivantes :

- Structure 16 bits (bus de données 16 bits) ;

- Capacité d’adressage 1Mo (un bus d’adresses de 20 bits) ;

- 14 registres internes de 16 bits ;

- 24 modes d’adressage ;

- Opérations sur des bits, des octets, des mots et des chaines de caractères ;

- Arithmétique signée ou non signée ;

- Arithmétique binaire ou BCD, sur 8 ou 16 bits.

2 24/05/2022

1
24/05/2022

2. Structure interne du 8086 :

Registres
De calcul

Registres
d’adressage

Registre d’état

3 24/05/2022

2. Structure interne du 8086 :

L’unité d’exécution comporte les éléments suivants :

- L’UAL ;

- Les registres généraux (AX, BX, CX et DX) ;

- Les registres d’adressage (SP, BP, SI et DI) ;

- Le registre d’état (Flags) et le décodeur d’instructions.

L’unité d’interface de bus comporte :

- Une file d’attente d’instructions gérée en FIFO ;

- Les registres de segments (CS, DS, SS et ES) ;

- Le pointeur d’instructions.

4 24/05/2022

2
24/05/2022

2. Structure interne du 8086 :


2.1 Fonctions de la BIU :

L’unité d’interface de bus permet de :

- Chercher les instructions à exécuter de la mémoire et les stocker dans la file


d’attente FIFO ;

- Calculer les adresses physiques sur 20 bits ;

- Réaliser le transfert des données avec la mémoire.

2.2 Fonctions de l’EU :

L’unité d’exécution permet de :

- Extraire les codes des instructions à partir de la file d’attente et les exécuter ;

- Fournir les adresses des opérandes au BIU en nommant le segment concerné et en


fournissant le déplacement dans ce segment ;

- Recevoir et fournir les opérandes au BIU.


5 24/05/2022

2. Structure interne du 8086 :

Ces deux unités travaillent pratiquement comme deux processeurs en

parallèle. Cette procédure est appelée mode pipe-line (pendant que l’EU

exécute les informations qui lui sont transmises, l’instruction suivante est

chargée dans la BIU).

 Un gain important en temps d’exécution.

6 24/05/2022

3
24/05/2022

3. Organisation de l’espace mémoire :

Le Microprocesseur Intel 8086 dispose d’un bus d’adresse de 20 bits : A0 à A19.

Donc d’un espace mémoire adressable de 220 = 1Mo.

8 bits (octet)

00000
00001

Chaque case contient un octet


……...

FFFFE
FFFFF

7 24/05/2022

3. Organisation de l’espace mémoire :

Le microprocesseur Intel 8086 manipule des données sur 8 bits et sur 16 bits :

- Pour accéder à une donnée sur 8 bits, il suffit de donner son adresse sur
20 bits ;

- Les données exprimées sur 16 bits occupent deux octets dans la


mémoire. Dans la famille Intel les 8 bits de poids faible sont stockées en
premier suivis des 8 bits de poids fort.

Ainsi, le 8086 stocke le mot 658Fh à l’adresse 01000h comme suit :

8 24/05/2022

4
24/05/2022

4. Les registres du 8086 :

Le 8086 a 14 registres de 16 bits classés en quatre groupes :

- Les registres de calcul ;

- Les registres d’adressage ;

- Les registres de segmentation ;

- Les registres de contrôle.

9 24/05/2022

4. Les registres du 8086 :


4.1 Les registres de calcul :

Ce sont les registres AX, BX, CX et DX. Ils sont utilisables dans tout type de
traitement (calcul, stockage temporaire, ….).

4.1.1 Le registre AX :
Appelé registre accumulateur. C’est le registre le plus utilisé implicitement par les
instructions du 8086.

Il peut être vu sous forme de deux registres indépendants de taille 8 bits : AL et


AH.

On écrit : AX = AH : AL

10 24/05/2022

5
24/05/2022

4. Les registres du 8086 :


4.1 Les registres de calcul :
4.1.2 Le registre BX :

Il est appelé registre de base. Il est utilisé aussi bien pour le calcul que pour
l’adressage. Comme AX, le registre BX est constitué de deux registres 8 bits : BL et
BH.

On écrit : BX = BH : BL

4.1.3 Le registre CX :

C’est le registre compteur. Il est souvent employé d’une manière implicite par
certaines instructions comme compteur (instructions de boucle, traitement des
chaines des caractères, …).

On écrit : CX = CH : CL

11 24/05/2022

4. Les registres du 8086 :


4.1 Les registres de calcul :
4.1.4 Le registre BX :

Appelé registre de donnée, il est utilisé implicitement par certaines instructions

pour stocker des opérandes ou des résultats.

On écrit : DX = DH : DL

12 24/05/2022

6
24/05/2022

4. Les registres du 8086 :


4.2 Les registres d’adressage :

Il existe quatre registres d’adressage de taille 16 bits : SI, DI, SP et BP.

4.2.1 Les registres SI (Source Index) et DI (Destination Index) :

Appelés indice de source et indice de destination respectivement. Ils sont souvent


utilisés dans la gestion des tableaux et des chaines de caractères dans la zone
mémoire réservée aux données.

4.2.2 Les registres SP (Stack Pointer) et BP (Base Pointer):

SP et BP s’appellent pointeur de pile et pointeur de base respectivement. Ils


servent à la gestion de la pile. Le registre SP pointe sur le sommet de la pile et le
registre BP permet de manipuler les données existantes dans la pile (paramètres de
fonctions, variables locales, ….).

13 24/05/2022

4. Les registres du 8086 :


4.3 Les registres de segmentation :

Le 8086 dispose de 4 registres de segmentation : DS, CS, SS et ES. Chacun est

associé à une zone spécifique de la mémoire.

Lorsqu’un programme est chargé, il réserve plusieurs zones mémoire généralement

indépendantes :

- Une zone réservée aux données (octets, mots, tableaux, …);

- Une zone réservée aux instructions (le code du programme);

- Une zone réservée à la pile.

14 24/05/2022

7
24/05/2022

4. Les registres du 8086 :


4.3 Les registres de segmentation :

Le 8086 dispose de 4 registres de segmentation : DS, CS, SS et ES. Chacun est

associé à une zone spécifique de la mémoire.

DS Zone de Données

CS Zone de Code

SS Zone de Pile

15 24/05/2022

4. Les registres du 8086 :


4.3 Les registres de segmentation :
4.3.1 Registre de segment de données DS (Data Segment) :

Il permet d’accéder à la zone de données.

L’adresse réelle d’une donnée est appelée adresse physique. Elle est exprimée sur

20 bits et c’est elle qui est effectivement mise sur le bus d’adresses pour accéder à

la donnée.

Dans un programme la donnée sera désignée par une adresse logique sur 16 bits et

par une valeur de segment inscrite dans le registre DS.

16 24/05/2022

8
24/05/2022

4. Les registres du 8086 :


4.3 Les registres de segmentation :
4.3.1 Registre de segment de données DS (Data Segment) :

L’adresse physique est définie par la formule ci-dessous :

Adresse physique = Adresse logique + (10h *DS)

 Exemple :

Dans l’instruction Mov AL, [1000h], l’adresse physique, si DS = 120h, est :

Adresse physique = 1000h + (10h * 120h) = 1000h + 1200h = 02200h

Remarque :

- L’adresse logique est aussi appelée déplacement ou offset;

- Une case mémoire est complètement définie par son segment et par son déplacement

17 dans ce segment. 24/05/2022

4. Les registres du 8086 :


4.3 Les registres de segmentation :
4.3.2 Registre de segment de code CS (Code Segment) :
La zone réservée aux instructions du programme est associé au registre de segment
CS.

Afin que le microprocesseur puisse lire une instruction dans la mémoire, il doit
fournir son adresse logique (contenue dans le registre IP) et son segment dans
CS.

4.3.3 Registre de segment de pile SS (Stack Segment) :

La zone mémoire réservée à la pile est associée au registre de segment SS.

Le pointeur de pile SP contient l’adresse logique du sommet de la pile. Pour


calculer son adresse physique, la formule utilisées est :

Adresse physique du sommet de la pile = SP + (10h *SS)


18 24/05/2022

9
24/05/2022

4. Les registres du 8086 :


4.3 Les registres de segmentation :
4.3.4 Registre de segment ES (Extra Segment) :

Il est utilisé implicitement par certaines instructions (Ex : manipulation des chaines

de caractères).

Il permet l’accès à n’importe quelle donnée dans la mémoire.

19 24/05/2022

4. Les registres du 8086 :


4.4 Les registres Contrôle :

Les registres de contrôle sont susceptibles de modifier le comportement du


microprocesseur et informent le programmeur de l’état de celui-ci.

4.4.1 Registre d’état SR (ou Flags) :

C’est un registre constitué d’un ensemble de bits portant le nom drapeau (flag) :

X : bit non utilisé

Ces drapeaux sont divisés en deux catégories

20 24/05/2022

10
24/05/2022

4. Les registres du 8086 :


4.4 Les registres Contrôle :
4.4.1 Registre d’état SR (ou Flags) :
 Indicateurs d’état :

Les indicateurs d’état sont mis à jour après chaque instruction. Leur valeur indique la nature
du résultat obtenu :

21 24/05/2022

4. Les registres du 8086 :


4.4 Les registres Contrôle :
4.4.1 Registre d’état SR (ou Flags) :
 Indicateurs d’état :

Si AX = 0012h, l’opération AX  AX – 0012h donne un résultat nul. Le microprocesseur met


automatiquement ZF à 1.

Si BL = FF h, l’opération BL  BL + 10 h engendre une retenue (en effet, FF h + 10 h = 0Fh


avec une retenue). CF est donc automatiquement mis à 1.

Remarque :

Ces indicateurs sont souvent employés dans les sauts conditionnels.

22 24/05/2022

11
24/05/2022

4. Les registres du 8086 :


4.4 Les registres Contrôle :
4.4.1 Registre d’état SR (ou Flags) :
 Indicateurs de contrôle :

Les indicateurs de contrôle permettent de modifier le comportement du microprocesseur. Ils


sont positionnés par le programmeur.

23 24/05/2022

4. Les registres du 8086 :


4.4 Les registres Contrôle :
4.4.2 Registre pointeur d’instructions IP :

IP est un compteur qui contient en permanence l’adresse de la prochaine instruction

que le microprocesseur va exécuter. Il est automatiquement mis à jour par le

microprocesseur après chaque instruction.

IP contient uniquement l’adresse logique de l’instruction, le segment se trouve dans

le registre CS.

Adresse physique de la prochaine instruction à exécuter = IP + (10h *CS)

24 24/05/2022

12
24/05/2022

5. Les modes d’adressage :

L’adressage est un moyen qui permet au microprocesseur d’avoir accès à une

donnée.

Afin d’étudier des exemples sur les différents modes d’adressage, nous allons

donner la syntaxe de l’instruction de transfert MOV :

MOV destination, source

Destination est chargée par le contenu de source et source reste inchangée.

25 24/05/2022

5. Les modes d’adressage :


5.1 Mode registre :

L’opérande est désignée par le contenu d’un registre.

 Exemple :

Mov AX, DX

Avant l’instruction Après l’instruction

AX = 12C7 h AX = 5EBA h

DX = 5EBA h DX = 5EBA h

26 24/05/2022

13
24/05/2022

5. Les modes d’adressage :


5.2 Mode immédiat :

L’opérande est donnée en mode immédiat s’elle constitue lui-même la valeur.

 Exemple :

Mov SI, 1245 h

SI est chargée par la valeur immédiate 1245h (SI  1245h).

Remarque :

Ce type de transfert est interdit avec les registres de segmentation (DS, CS, SS et ES).

27 24/05/2022

5. Les modes d’adressage :


5.3 Mode direct :

Une opérande est donnée en mode direct s’elle est désignée par son adresse logique dans la

mémoire.

 Exemple 1 :

Mov [1200 h], 5A h

La valeur 5Ah sera stockée à l’adresse logique 1200h.

Pour calculer réelle de la case (l’adresse physique), il faut connaitre la valeur stockée dans le

registre de segmentation DS.

Si DS = 720h, l’adresse physique sera :

Adresse physique = 1200 h + (10h *720 h) = 08400 h


28 24/05/2022

14
24/05/2022

5. Les modes d’adressage :


5.3 Mode direct :

Une opérande est donnée en mode direct s’elle est désignée par son adresse logique dans la

mémoire.

 Exemple 2 :

Mov [1200 h], 4D59 h

4D59h est une donnée sur 16 bits, elle occupera les deux octets d’adresse logique 1200h et

1201h.

Si DS = 720h, l’adresse physique sera :

29 24/05/2022

5. Les modes d’adressage :


5.3 Mode indirect :
5.3.1 Mode indirect basé :

L’adresse logique de l’opérande est fournie par BX ou BP avec éventuellement un


déplacement constant sur 8 ou 16 bits.

Les registres de segment utilisés pour le calcul de l’adresse physique sont : DS pour BX et SS
pour BP.

Ceci signifie que :

- BX sera utilisé comme pointeur sur une donnée dans le segment de données
(registre DS);

- BP sera employé pour accéder aux informations stockées dans la pile (registre SS).

On note une opérande fournie en adressage indirect basé par : [BX] ou [BP].

30 24/05/2022

15
24/05/2022

5. Les modes d’adressage :


5.3 Mode indirect :
5.3.1 Mode indirect basé :

 Exemple 1 :

Soit BX = 1342h et DS = 1072h et soit l’instruction :

Mov [BX], 0768 h

- L’adresse logique : 1342h;

- L’adresse physique : 1342h + (10h * 1072h) = 11A62h

La donnée 0768h sera stockée à l’adresse pointée par BX, soit : 11A62h.

La donnée étant sur 16 bits, le résultat de cette instruction sera :

31 24/05/2022

5. Les modes d’adressage :


5.3 Mode indirect :
5.3.1 Mode indirect basé :

 Exemple 2 :

Soit BX = 1342h et DS = 1072h et soit l’instruction :

Mov [BX]5Ch, 0768 h

- L’adresse logique : 1342h + 5Ch = 139Eh;

- L’adresse physique : 139Eh + (10h * 1072h) = 11ABEh

La donnée 0768h sera stockée à l’adresse pointée par BX, soit : 11ABEh.

La donnée étant sur 16 bits, le résultat de cette instruction sera :

32 24/05/2022

16
24/05/2022

5. Les modes d’adressage :


5.3 Mode indirect :
5.3.1 Mode indirect indexé :

L’adresse logique de l’opérande est fournie par SI ou DI avec éventuellement un déplacement


constant sur 8 ou 16 bits.

SI et DI sont des pointeurs utilisés dans la zone des données. Le registre de segment utilisé
pour le calcul de l’adresse physique est : DS.

 Exemple :

Soit SI = 1024h, DI = 124Ch et DS = 013Ah et soit l’instruction :

Mov [SI + 1500h], 0768 h

33 24/05/2022

6. Les instructions de la famille INTEL 8086 :

Les instructions du 8086 sont classées en 6 catégories :

- Instructions de transfert ;

- Instructions arithmétiques;

- Instructions logiques;

- Instructions de manipulation de bits;

- Instructions de branchement;

- Instructions de contrôle et gestion de la pile.

34 24/05/2022

17
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.1 Résumé des principales instructions :
(Voir résumé des principales instructions du 8086).

35 24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :

Ils sont également appelés des branchements et ils permettent de poursuivre l’exécution du

programme à un point spécifique avec ou sans condition préalable.

Le retour s’effectue à l’instruction se trouvant juste après l’appel.

Les sauts sont classés en deux catégories :

- Les sauts inconditionnels ;

- Les sauts conditionnels.

36 24/05/2022

18
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.1 Notion d’étiquette :

Quand on écrit un programme en langage assembleur, on peut désigner certaines instructions

par des étiquettes.

Une étiquette joue le rôle de référence lorsqu’on désire effectuer un saut à l’instruction

marquée.

Une étiquette peut être n’importe quel texte suivi de deux points (:). Elle est mise juste avant

l’instruction à marquer.

37 24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.1 Notion d’étiquette :

 Exemple :

Debut : Mov AX, 1000h

Mov DS, AX - Debut, TestRS et Suite1 sont des


étiquettes.
TestRS : Mov AH, 01h
- La dernière ligne fait référence à
Int 21h
l’étiquette TestRS par l’instruction de
Mov BL, 0Ah saut conditionnel JZ.

Suite1 : Div BL

JZ TestRS

38 24/05/2022

19
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.2 Les sauts inconditionnels :

Ces sauts ont lieu après l’exécution d’une instruction de saut sans respect préalable d’une

quelconque condition.

 L’instruction JMP :

Syntaxe :

JMP Etiquette

Dès que le microprocesseur rencontre cette instruction, il continue l’exécution à l’instruction

indiquée par Etiquette.

L’exécution se poursuit normalement et aucune mémorisation de l’endroit d’appel n’est faite.

39 24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.2 Les sauts inconditionnels :

 L’instruction JMP :

Debut : Mov AX, 1000h

Mov CL, 4

Mov BL, 0Ah

JMP Suite

Mov AL, CL

Suite : Div BL

AND AL, 0Fh

40 24/05/2022

20
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.2 Les sauts inconditionnels :

 L’instruction CALL :

Syntaxe :
CALL Etiquette

Cette instruction permet d’appeler un sous-programme.

Un sous-programme est une suite d’instructions qui effectuent un traitement donné. Les sous-
programmes permettent d’améliorer la lisibilité et évitent surtout les répétitions lorsqu’on
désire effectuer un même traitement à plusieurs endroits du programme.

Un sous-programme doit être terminé par l’instruction de retour RET et sa première


instruction désignée par une étiquette qui servira de référence d’appel.

41 24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.2 Les sauts inconditionnels :

 L’instruction CALL :

En rencontrant l’instruction CALL, le microprocesseur suit le même comportement que pour

JMP à la différence qu’il mémorise l’endroit d’appel pour y retourner à la fin du sous-

programme.

 Remarque:

L’adresse de retour est mémorisée dans la pile au moment de l’appel. En arrivant à la fin

du sous-programme (l’instruction RET), le microprocesseur récupère l’adresse de retour de

la pile et continu l’exécution à cette adresse.

42 24/05/2022

21
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.2 Les sauts inconditionnels :
 L’instruction CALL :

Mov DL, 41h

CALL Affich ; Premier appel au sous-programme Affich


1er retour
XOR BL, BL ; Instruction exécutée après le premier appel

ADD DL, 05h


2ème retour
CALL Affich ; Deuxième appel au sous-programme Affich

OR AL, 0Fh ; Instruction exécutée après le deuxième appel

-----------------

Affich: Mov AH, 2h ; Début du sous-programme

INT 21h

RET ; Fin du sous-programme (instruction de retour)

43 24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.3 Les sauts conditionnels :

Les sauts conditionnels ont lieu si une condition est vérifiée. Ils dépendent en réalité des

différents drapeaux du registre d’état (CF, ZF, PF, …).

Avant d’effectuer un saut conditionnel, il faut positionner les drapeaux pour traduire la

condition à vérifier.

Dans la plupart des cas, les sauts conditionnels sont précédés par deux instructions de

comparaison : CMP et TEST.

44 24/05/2022

22
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.3 Les sauts conditionnels :

 L’instruction CMP :

Syntaxe :

CMP destination, source

CMP réalise une soustraction entre les deux opérandes :

destination – source

En fonction du résultat de cette opération, les drapeaux du registre d’état sont positionnés.

Exemple :

CMP AL,50h

Si AL = 50h, la soustraction donnera un résultat nul. Par conséquent, ZF sera mis à 1.

45 24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.3 Les sauts conditionnels :

 L’instruction TEST :

Syntaxe :

TEST destination, source

TEST effectue un ET logique entre les deux opérandes:

destination AND source

destination et source restent inchangés.

En fonction du résultat de cette opération, les drapeaux du registre d’état sont positionnés.

46 24/05/2022

23
24/05/2022

6. Les instructions de la famille INTEL 8086 :


6.2 Les sauts :
6.2.3 Les sauts conditionnels :

 L’instruction TEST :

Exemple :

TEST BL, BL

- Si BL=00h, le ET donnera un résultat nul. Par conséquent, ZF sera mis à 1.

- Si BL est différent de 00h, le résultat sera non nul. Par conséquent, ZF sera mis à 0.

Donc pour vérifier si BL est nul ou non, il suffit de tester l’état de ZF juste après cette

instruction.

47 24/05/2022

7. Codage des instructions :

Les instructions et leurs opérandes sont stockés en mémoire principale. Une instruction se

compose en général de deux champs :

- Le code opération qui représente l’instruction;

- Le code opérande qui représente la donnée ou la référence à la donnée (son adresse ou

le registre pointeur utilisé).

Code opération (1 ou 2 octets) Code opérande (0, 1, 2, …octets)

48 24/05/2022

24
24/05/2022

7. Codage des instructions:

Exemples :

- Mov AX,125Eh est codée sur 3 octets: B8 5E 12

(B8: code opération Mov AX ; 5E 12: opérande donnée en immédiat).

- INC AX est codée sur un seul octet : 40

(B8: code opération Mov AX ; 5E 12: opérande donnée en immédiat).

Le codage des instructions est l’une des tâches du compilateur assembleur. Le


microprocesseur ne connait en réalité que les codes opérations avec leurs
opérandes rangés dans la mémoire principale.

49 24/05/2022

25

Vous aimerez peut-être aussi