Vous êtes sur la page 1sur 18

Université de Bordj Bou Arreridj

Faculté des Sciences et de la Technologie


Département d’Electronique
Informatique Industrielle
M. T. Abed (2014-2015)

Chap. IV
Le microprocesseur Intel 8086
Table des matières
I. Introduction ................................................................................................................................................................ 1
II. Organisation externe .................................................................................................................................................. 1
2.1- Schéma fonctionnel du 8086 .................................................................................................................................. 1
2.2- Modes minimal et maximal du 8086....................................................................................................................... 2
2.3- Description des signaux du 8086............................................................................................................................. 2
2.4- Création du bus système du 8086 ........................................................................................................................... 3
2.5- Disposition des banques de mémoire ..................................................................................................................... 4
2.6 Séquence de lecture ................................................................................................................................................. 5
2.7 Séquence d’écriture ................................................................................................................................................. 5
III. Organisation interne ............................................................................................................................................... 6
IV. Gestion de la mémoire ........................................................................................................................................... 8
4.1 Segmentation de la mémoire ................................................................................................................................... 8
4.2 Initialisation du microprocesseur : ........................................................................................................................... 9
V. Le jeu d’instruction et les modes d’adressage du 8086 ............................................................................................. 9
5.1 Les modes d’adressage........................................................................................................................................... 10
5.2 Format de base des instructions ............................................................................................................................ 12
5.3 Règles de détermination des codes des instructions ............................................................................................. 12
5.4 Les instructions de transfert................................................................................................................................... 14
5.5 Les instructions arithmétiques ............................................................................................................................... 14
5.6 Les instructions logiques ........................................................................................................................................ 14
5.7 Les instructions de branchement ........................................................................................................................... 16
5.8 Fonctionnement de la pile...................................................................................................................................... 17
I. Introduction
Disponible depuis juillet 1978, le 8086 est le premier microprocesseur 16 bits développé par Intel. C’est le premier de
la famille 80x86. Il est fabriqué en technologie H MOS. Le 8086 est constitué de 29000 transistors sur une puce de
32.7 mm². Il existe en trois versions : 8086 (5 MHz), 8086-2 (8 MHz) et le 8086-4 (4 MHz).

II. Organisation externe


Le 8086 se présente sous la forme d’un boîtier DIP (Dual In-line Package) à 40 broches :

Figure 1 : Brochage du 8086.

2.1- Schéma fonctionnel du 8086

Figure 2 : Schéma fonctionnel du 8086.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 1


2.2- Modes minimal et maximal du 8086
Le 8086 peut fonctionner selon deux modes : le mode minimal et le mode maximal. En mode minimal, le 8086
travaille de manière analogue au 8085 (processeur 8 bits de Intel) et ne peut adresser que 64 KO de mémoire. En
mode maximal, le 8086 fonctionne en 16 bits et permet d’adresser 1 MO de mémoire. Ce mode permet également de
réaliser des systèmes multiprocesseurs. La sélection entre les deux modes minimal et maximal, se fait par la broche
MN / MX .

2.3- Description des signaux du 8086


Lorsque MN / MX est à l’état haut, le 8086 fonctionne en mode minimal et génère sur ses broches 24 à 31, tous les
signaux de contrôle nécessaires à ce mode ( INTA, ALE , DNE , DT / R, M / IO, WR, HLDA, et HOLD) .
Lorsque cette broche est à l’état bas, le 8086 opère en mode maximal, un contrôleur de bus 8288 doit être ajouté
pour générer ces signaux de contrôle. Le rôle de chacun des signaux du 8086 est décrit dans ce qui suit :
- MN / MX : entrée de choix du mode de fonctionnement du microprocesseur :
• Mode minimum (MN/MX = 1) : Le 8086 génère les signaux du bus de commande (RD, WR, ...) ;
• Mode maximum (MN/MX = 0) : Signaux de commande produits par un contrôleur de bus (8288).
- CLK Entrée du signal d’horloge qui cadence le fonctionnement du microprocesseur. Ce signal provient d’un
générateur d’horloge : le 8284.

Figure 3 : Génération de l’horloge.


- RESET : entrée de remise à zéro du microprocesseur. Lorsque cette entrée est mise à l’état haut pendant au
moins 4 périodes d’horloge, le microprocesseur est réinitialisé : il va exécuter l’instruction se trouvant à l’adresse
FFFF0H (adresse de Bootstrap). Le signal de RESET est fourni par le générateur d’horloge.
- READY : entrée de synchronisation avec la mémoire. Ce signal provient également du générateur d’horloge.
- TEST : entrée de mise en attente du microprocesseur d’un événement extérieur.
- NMI, INTR : entrées de demande d’interruption. INTR : interruption normale, NMI (Non Maskable Interrupt) :
interruption prioritaire.
- INTA : Interrupt Acknowledge, indique que le microprocesseur accepte l’interruption.
- HOLD, HLDA : signaux de demande d’accord d’accès direct à la mémoire (DMA).
- 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.
- AD15…AD0 : 16 bits de poids faible du bus d’adresses, multiplexés avec 16 bits de données. 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 :
• 16 bits de données (microprocesseur 16 bits) ;
• 20 bits d’adresses, d’où 220 = 1 Mo d’espace mémoire adressable par le 8086.
- ALE Address Latch Enable. Commande de mémorisation de l’adresse.
- RD : Read, signal de lecture d’une donnée.
- WR : Write, signal d’écriture d’une donnée.
- M / IO : Memory/Input-Output, le 8086 adresse la mémoire ( M / IO =1) ou les entrées/sorties ( M / IO =0).
- DEN : Data Enable, indique que des données sont en train de circuler sur le bus A/D (équivalent de ALE pour les
données).
- DT / R : Data Transmit/Receive, indique le sens de transfert des données :
Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 2
• DT / R = 1 : données émises par le microprocesseur (écriture) ;
• DT / R = 0 : données reçues par le microprocesseur (lecture).
- BHE : Bus High Enable, signal de lecture de l’octet de poids fort du bus de données.
Le 8086 possède un bus d’adresses sur 20 bits, d’où la capacité d’adressage de 1 Mo ou 512 K mots de 16 bits (bus de
données sur 16 bits). Le méga-octet adressable est divisé en deux banques de 512 Ko chacune : la banque inférieure
(ou paire) et la banque supérieure (ou impaire). Ces deux banques sont sélectionnées par :
• A0 pour la banque paire qui contient les octets de poids faible ;
• BHE pour la banque impaire qui contient les octets de poids fort ;
Seuls les bits A1 à A19 servent à désigner une case mémoire dans chacune des banques de 512 Ko. Le
microprocesseur peut ainsi lire et écrire des données sur 8 bits ou sur 16 bits : (voir figure 8.)

BHE A0 octets transférés


0 0 les deux octets (mot complet)
0 1 octet fort (adresse impaire)
1 0 octet faible (adresse paire)
1 1 aucun octet
Remarque : le 8086 ne peut lire une donnée sur 16 bits en une seule fois, uniquement si l’octet de poids faible à une
adresse paire et l’octet de poids fort de cette donnée est rangé à une adresse impaire, sinon la lecture de cette
donnée devra se faire en deux opérations successives, d’où une augmentation du temps d’exécution du transfert.

2.4- Création du bus système du 8086


1. Démultiplexage des signaux
Le démultiplexage des signaux AD0 à AD15 (ou A16/S3 à A19/S6), se fait en mémorisant l’adresse lorsque celle-ci est
présente sur le bus A/D, à l’aide d’un verrou (latch) de type 8282. Un niveau haut sur la ligne ALE permet d’indiquer
qu’il s’agit d’une adresse qui circule sur le bus, cette ligne sera donc utilisée comme commande de mémorisation de
l’adresse.

Figure 4 : Démultiplexage des adresses et des données.


• Si ALE = 1, l’adresse générée est présente en entrée et en sortie du latch ;
• Si ALE = 0, mémorisation de l’adresse ;
Cette opération est effectuée grâce à des circuits latch tels : 8282/8283, 74373, 74573.

Figure 5 : Exemple circuit pour la génération des lignes du bus d’adresses.


Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 3
2. Transfert des données

Figure 6 : Contrôle du transfert des données.


Exemples de tampons de bus : circuits buffers bidirectionnels 8286/8287 ou 74245.
3. Création du bus système

Figure 7 : Création du bus système.

2.5- Disposition des banques de mémoire

Figure 8 : Disposition des banques de mémoire.


Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 4
2.6 Séquence de lecture
Un cycle de bus est constitué par quatre cycles T1, T2, T3 et T4 de l’horloge CLK .
Pendant le cycle T1, le 8086 envoie vers l’extérieur une adresse sur 16 bits et les signaux M / IO , BHE et DT / R .
Les poids d’adresse AD0 à AD15 et le signal BHE ne sont stables que pendant le cycle T1 et une partie du cycle T2.
Pour conserver l’information d’adresse et de sélection du boîtier pendant toute la durée du transfert, il est par
conséquent nécessaire de sauvegarder ces informations dans les registres latch 8282/8283, validés par le signal ALE .
Au début du cycle T2, les lignes d’adresse passent à l’état de haute impédance et BHE à 1. Simultanément, la ligne
de sélection du mode de lecture RD est portée à l’état bas, indiquant que le microprocesseur est prêt à recevoir une
donnée.
Le signal DEN , signal de validation des buffers 8286/8287, passe ensuite à l’état bas, autorisant le chargement de la
donnée à recevoir dans ces circuits. Cette donnée apparaît sue le bus de données au milieu de T2 et reste stable
pendant les cycles T3 et T4.
Les circuits adressés envoient un niveau haut sur la broche READY du 8086 pour signaler qu’une donnée est
disponible. L’opération de lecture est effectuée.
Au cycle T4, les lignes DEN , RD et DT / R , reviennent successivement à l’état haut et le bus de données est porté à
l’état haute impédance. La séquence de lecture est terminée.

Figure 9. Séquence de lecture.

2.7 Séquence d’écriture


Cette séquence est semblable à celle de lecture. La ligne WR , au lieu de la ligne RD , est portée au niveau bas au
début de T2 et le signal DT / R reste à l’état haut, indiquant un transfert du microprocesseur vers un circuit de sortie
à travers le 8286/8287.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 5


Figure 10. Séquence d’écriture

III. Organisation interne

Figure 11 : Organisation interne.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 6


Le 8086 est constitué de deux unités fonctionnant en parallèle :
• L’unité d’interface de bus (BIU : Bus Interface Unit) : recherche les instructions en mémoire et les range dans une
file d’attente ;
• L’unité d’exécution (EU : Execution Unit) : exécute les instructions contenues dans la file d’attente.
Les deux unités fonctionnent simultanément, d’où une accélération du processus d’exécution d’un programme
(fonctionnement selon le principe du pipe-line).
Le microprocesseur 8086 contient 14 registres répartis en 4 groupes :
• Registres généraux : 4 registres sur 16 bits.
AX = (AH, AL) ;
BX = (BH, BL) ;
CX = (CH, CL) ;
DX = (DH, DL).
Ils peuvent être également considérés comme 8 registres sur 8 bits. Ils servent à contenir temporairement des
données. Ce sont des registres généraux mais ils peuvent être utilisés pour des opérations particulières.
AX = accumulateur, BX= registre de base, CX= compteur et DX= registre données.
• Registres de pointeurs et d’index : 4 registres sur 16 bits.
Pointeurs :
SP (Stack Pointer) : pointeur de pile et BP (Base Pointer) : pointeur de base.
Ces deux registres sont utilisés pour indiquer un déplacement dans le segment de pile (la pile est une zone de
sauvegarde de données en cours d’exécution d’un programme).
Index :
SI : Source Index. DI : Destination Index.
Ils sont utilisés pour repérer un déplacement dans le segment de données, et pour les transferts de chaînes d’octets
entre deux zones mémoire.
• Pointeur d’instruction et registre d’état : 2 registres sur 16 bits.
Pointeur d’instruction : IP, contient l’adresse de la prochaine instruction à exécuter.
Registre d’état : contient les indicateurs (flags)

Figure 12 : Registre d’état.


CF : indicateur de retenue (carry) ; TF : indicateur d’exécution pas à pas (trap) ;
PF : indicateur de parité ; IF : indicateur d’autorisation d’interruption ;
AF : indicateur de retenue auxiliaire ; DF : indicateur de décrémentation ;
ZF : indicateur de zéro ; OF : indicateur de dépassement (overflow).
SF : indicateur de signe ;
• Registres de segments : 4 registres sur 16 bits.
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 ;
Les registres de segments, associés aux pointeurs et aux index, permettent au microprocesseur 8086 d’adresser
l’ensemble de la mémoire.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 7


IV. Gestion de la mémoire
4.1 Segmentation de la mémoire
Le 8086 dispose de 20 lignes d’adresses, son espace mémoire adressable est de 220 = 1 048 576 octets = 1 MO. Il est
géré par une technique dite segmentation de la mémoire. L’espace mémoire est divisé en segments. Un segment est
une zone mémoire de 64 KO (65 536 octets) 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. L’adresse segment est donc représentée avec seulement ses
16 bits de poids fort. Pour désigner une case mémoire parmi les 64KO (216) contenues dans un segment, une adresse
sur 16 bits est donc nécessaire. Cette adresse est dite déplacement (offset).

Figure 13 : Gestion de la mémoire.


Ainsi, une case mémoire est repérée par le 8086 au moyen de deux quantités sur 16 bits :
• L’adresse d’un segment ;
• Un déplacement ou offset (appelé aussi adresse effective) dans ce segment.
La donnée d’un couple (segment, offset) définit une adresse logique, notée sous la forme segment : offset.
L’adresse sur 20 bits d’une case mémoire, est appelée adresse physique, c’est celle-ci qui est envoyée réellement sur
le bus d’adresses A0 - A19. La correspondance entre adresse logique et adresse physique est donnée par :

Figure 14 : Calcul de l’adresse physique.


L’adresse physique est calculée par l’expression :
Adresse physique = Segment x 16 + Offset
A un instant donné, le 8086 a accès à 4 segments dont les adresses se trouvent dans les registres CS, DS, SS et ES. Le
segment de code contient les instructions du programme, le segment de données contient les données manipulées
par le programme, le segment de pile contient la pile et le segment supplémentaire peut aussi contenir des données.
Le registre CS est associé au pointeur d’instruction IP, ainsi la prochaine instruction à exécuter se trouve à l’adresse
logique CS:IP. Les registres de segments DS et ES sont, quant à eux, associés aux registres d’index SI et DI (DS:SI, ES:DI,
DS:DI, ES:SI). Le registre de segment de pile peut être associé aux registres pointeurs (SS:SP ou SS:BP).
La mémoire accessible par le 8086 à un instant quelconque peut être décrite par la figure suivante :

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 8


Figure 15 : Division de la mémoire en segments.
Remarque : les segments ne sont pas nécessairement distincts les uns des autres, ils peuvent se chevaucher ou bien
occuper le même espace.

Figure 16 : Chevauchement des segments.


La segmentation permet de séparer les données et les programmes. Elle permet également d’exprimer l’adresse
d’une instruction ou d’une donnée, uniquement par l’adresse effective sur 16 bits, l’adresse du segment étant
implicite. Ceci réduit donc la taille des codes des instructions.

4.2 Initialisation du microprocesseur :


A la mise sous tension ou à la remise à zéro du microprocesseur, un signal d’initialisation doit être appliqué sur la
ligne RESET. Le microprocesseur exécute alors l’instruction se trouvant à une adresse dite adresse de bootstrap. Cette
instruction est généralement un saut vers le programme principal qui initialise ensuite les autres registres. Ce
programme principal correspond au système d’exploitation dans le cas des ordinateurs.
Le contenu des registres du 8086 après un RESET est : IP=0000H, CS=FFFFH, DS=0000H, ES=0000H SS=0000H
La première instruction exécutée se trouve donc à l’adresse logique FFFFH : 0000H (adresse physique FFFF0H).

V. Le jeu d’instruction et les modes d’adressage du 8086


Chaque microprocesseur ne peut exécuter qu’un ensemble particulier d’opérations élémentaires définies par le
constructeur. Cet ensemble est appelé jeu d’instructions (Instruction Set). Chaque instruction est définie par une
valeur binaire dite code opération (ou code opératoire). L’écriture d’un programme où les instructions sont décrites
par leurs codes opératoires est dite programmation bas niveau. Il est difficile de pouvoir retenir les codes des
instructions. Alors, au lieu de manipuler les codes opératoires, on utilise des notations symboliques dites
mnémoniques pour représenter les instructions. C’est la programmation en assembleur.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 9


Dans le cas du microprocesseur 8086, les instructions en assembleur s’écrivent sous la forme :
Mnémonique Destination, Source.
Les instructions peuvent être classées en quatre groupes :
• Instructions de transfert de données ;
• Instructions arithmétiques ;
• Instructions logiques ;
• Instructions de branchement ...

5.1 Les modes d’adressage


Les modes d’adressages (figure 18) permettent de déterminer la manière avec laquelle, accéder à une position en
mémoire. Ce qui correspond au calcul de l’adresse effective (EA : Effective Address) de cette position. L’adresse
effective représente le déplacement (offset) de la case mémoire dans le segment.
1- Adressage implicite : L’instruction contient seulement le code opération.
Exemple : NOT AX ; permet de complémenter le contenu du registre AX.
2- Adressage immédiat : La donnée est fournie immédiatement après l’instruction
Exemple : MOV AL, 21h ; permet de transférer 21h dans le registre AL.
3- Adressage d’un registre : La donnée est contenue dans un registre.
Exemple : MOV AX, BX : charge le contenu du registre BX dans le registre AX.
4- Adressage direct ou étendu : L’instruction comporte l’adresse effective de la case mémoire où se trouve la
donnée.
Exemple : MOV BL, [0200h] ; transfère le contenu de la case mémoire d’adresse 0200h vers le registre BL.
5- Adressage indirect par registre ou basé (et basé avec déplacement) : L’offset est contenu dans un
registre de base BX ou BP. EA= (BP) ; EA= (BX) (contenu de BP ou de BX).
Exemples :
- MOV AL, [BX] ; transfère la donnée dont l’offset est contenu dans le registre de base BX vers le registre AL. Le
segment associé par défaut au registre BX est le segment de données DS ;
- MOV AL, ES : [BX] ; transfère dans registre AL, la donnée dont l’offset est contenu dans le registre de base BX du
segment de données supplémentaires ES ;
- MOV AL, [BP] ; le segment par défaut associé au registre de base BP est le segment de pile.
Dans le cas de l’adressage basé avec déplacement, une constante est additionnée au contenu du registre de base.
EA= (BP) + d ; EA= (BX) + d.
Exemple : MOV [BX+100h], AX ; L’adresse effective est donnée par (BX) + 100h.
6- Adressage indexé (et indexé avec déplacement) : Semblable à l’adressage basé, sauf que l’offset est
contenu dans un registre d’index (SI ou DI), associés par défaut au segment de données. Les modes d’adressage
basés ou indexés permettent la manipulation de tableaux (vecteurs) rangés en mémoire.
EA= (SI) ; EA= (DI). Adressage indexé avec déplacement, EA= (SI) + d ; EA= (DI) + d
Exemples :
- MOV [DI], BX ; charge les cases mémoire d’offset DI et DI + 1 avec le contenu du registre BX.
- MOV AL, [SI+200h] ; charge le registre AL avec le contenu de la case mémoire dont l’offset est contenu dans SI plus
un déplacement de 200h.
7- Adressage indirect indexé (et indirect indexé avec déplacement) : L’offset est obtenu en faisant la
somme des contenus d’un registre de base et d’un registre d’index, et d’une valeur constante dans le cas avec
déplacement. Ce mode d’adressage permet l’adressage de structures de données complexes : matrices,
enregistrements, …
EA= (BP) + (DI) ; EA= (BP) + (SI) ; EA= (BX) + (DI) ; EA= (BX) + (SI).
Avec déplacement : EA= (BP) + (DI) + d ; EA= (BP) + (SI) + d ; EA= (BX) + (DI) + d ; EA= (BX) + (SI) + d
Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 10
Exemple : MOV AH, [BX+SI+100h]
8- Adressage relatif : L'adresse effective est obtenue est additionnant un déplacement au contenu du compteur
ordinal. Ce type d'adressage est utilisé dans les instructions de saut ou de branchement.
Exemples : - JMP 05h ; branchement inconditionnel à l’adresse IP + 05h.
- JNZ F5h ; branchement si zéro à l’adresse IP - 11h (C à 2 de F5h).
(C.O.) Instruction Adressage implicite

(C.O.) Instruction
Adressage immédiat
Opérande

Registre

(C.O.) Instruction Opérande Adressage d’un registre

(C.O.) Instruction
Adressage direct (ou étendu)
Adresse Opérande

Registre

(C.O.) Instruction Adresse Opérande Adressage indirect par registre

Registre
Adressage indirect par registre avec
(C.O.) Instruction Adresse Opérande
déplacement

Déplacement +

Registre

(C.O.) Instruction Index Opérande Adressage indexé

Registre

(C.O.) Instruction Index Opérande Adressage indexé avec déplacement

Déplacement +

Registre

(C.O.) Instruction Adresse Opérande Adressage indirect indexé

Index

Registre
Registre
Adressage indirect indexé avec
(C.O.) Instruction Adresse Opérande
déplacement

Déplacement +

Index

Registre

Figure 18 : Modes d’adressage du 8086.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 11


5.2 Format de base des instructions
Contrairement aux microprocesseurs 8 bits qui exécutent, en général, une opération entre l’accumulateur et un
opérande, le 8086 a été conçu pour travailler sur deux opérandes. L’un des opérandes est un registre ou une position
mémoire, l’autre est un registre ou une donnée. L’instruction de base tient sur deux octets (voir figure 17). Le premier
octet définit le code de l’instruction ainsi que les bits d et w. Le second octet est composé de trois champs : MOD,
REG et R/M. L’instruction sur deux opérandes peut comporter plus de deux octets. Les octets supplémentaires
expriment un déplacement et/ou une donnée. Lorsqu’une instruction contient à la fois un déplacement et une
donnée, la donnée suit le déplacement (voir section 5.3).
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Code opération d w MOD REG R/M

Figure 17 : Format des instructions.

5.3 Règles de détermination des codes des instructions


7 07 07 07 07 07 0
M
Code
d w O REG R/M Depl./Data low Depl./Data high Data low Data high
opération
D
Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6

Figure 19 : Frome générale des instructions.


1. Le bit d de destination :
S’il existe un seul registre dans l’instruction, d spécifie si ce registre est la source ou bien la destination. d=1 : le
registre est une destination, d= 0 : le registre est une source (d=1 : to REG ; d=0 : from REG).
2. Le bit w (Width) :
w=1 : Opérande sur 16 bits ; w=0 : Opérande sur 8 bits
3. Les champs MOD et R/M :
● MOD = 00 : Adressage sans déplacement.
R/M Adresse effective EA Mode d’adressage Segment
000 [BX+SI] adressage indirect indexé DS
001 [BX+DI] adressage indirect indexé DS
010 [BP+SI] adressage indirect indexé SS
011 [BP+DI] adressage indirect indexé SS
100 [SI] adressage indexé DS
101 [DI] adressage indexé DS
110 Depl.L Depl.H adressage direct DS
111 [BX] adressage indirect DS
MOD =00 et R/M=110 : Adressage direct, l’adresse (offset), octet bas puis octet haut, est spécifiée sur les bytes 3 et 4.
● MOD = 01 : Adressage avec déplacement sur 8 bits.
R/M Adresse effective EA Mode d’adressage Segment
000 [BX+SI±Depl.8] adressage indirect indexé avec déplacement sur 8 bits DS
001 [BX+DI±Depl.8] adressage indirect indexé avec déplacement sur 8 bits DS
010 [BP+SI±Depl.8] adressage indirect indexé avec déplacement sur 8 bits SS
011 [BP+DI±Depl.8] adressage indirect indexé avec déplacement sur 8 bits SS
100 [SI±Depl.8] adressage indexé avec déplacement sur 8 bits DS
101 [DI±Depl.8] adressage indexé avec déplacement sur 8 bits DS
110 [BP±Depl.8] adressage indirect avec déplacement sur 8 bits SS
111 [BX±Depl.8] adressage indirect avec déplacement sur 8 bits DS

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 12


● MOD = 10 : Adressage avec déplacement sur 16 bits.
R/M Adresse effective EA Mode d’adressage
000 [BX+SI+Depl.L Depl.H] adressage indirect indexé avec déplacement sur 16 bits
001 [BX+DI+ Depl.L Depl.H] adressage indirect indexé avec déplacement sur 16 bits
010 [BP+SI+ Depl.L Depl.H] adressage indirect indexé avec déplacement sur 16 bits
011 [BP+DI+ Depl.L Depl.H] adressage indirect indexé avec déplacement sur 16 bits
100 [SI+ Depl.L Depl.H] adressage indexé avec déplacement sur 16 bits
101 [DI+ Depl.L Depl.H] adressage indexé avec déplacement sur 16 bits
110 [BP+ Depl.L Depl.H] adressage indirect avec déplacement sur 16 bits
111 [BX+ Depl.L Depl.H] adressage indirect avec déplacement sur 16 bits
● MOD = 11 : Instructions sur deux registres ou adressage immédiat :
MOD REG R/M
11 destination source
Les valeurs des champs REG et R/M sont déterminées selon le tableau suivant :
4. Le champ REG :
Le champ REG (et R/M dans le cas où MOD=11) contient un nombre entre 0 et 7, il est définie par :
REG registre 16 (w=1) registre 8 (w=0) Registre segment
000 AX AL ES
001 CX CL CS
010 DX DL SS
011 BX BL DS
100 SP AH
101 BP CH
110 SI DH
111 DI BH
5. Le bit S :
Un nombre binaire sur 8 bits, selon la représentation en complément à 2, peut être étendu à un nombre sur 16 bits
en complément à 2, en mettant tous les bits de l’octet haut à la même valeur que le MSB de l’octet bas. C’est ce que
l’on appelle une extension du signe. Le bit S apparaît dans les instructions d’addition, de soustraction, et de
comparaison sous la forme : Immédiat vers Registre/Mémoire. Il est définit comme suit :
S : W = 00 : opération sur 8 bits ;
S : W = 01 : opération sur 16 bits ;
S : W = 11 : opération sur un opérande sur 8 bits avec extension du signe à 16 bits.
6. Le bit V :
Utilisé par les instructions de décalage et de rotation, il permet de déterminer le nombre de répétition.
V = 0 : Nombre de répétition = 1 ;
V = 1 : Nombre de répétition contenu dans CL.
7. Le bit Z :
Utilisé par l’instruction REP dans primitives de manipulation de chaînes.
Exemples de détermination de codes d’instructions :
MOV DX, AX –––––> 100010dw mod reg r/m = 100010 1 1 11 010 000 = 8BD0
PUSH BX –––––> 01010 reg = 01010 011 = 53
LEA AX, [BX+0100h] –––––> 10001101 mod reg r/m = 10001101 10 000 111 00 10 = 8D 87 00 01
ADD [BX+SI], AL –––––> 000000 dw mod reg r/m = 000000 0 0 00 000 000 = 00
ADD CX, 2105h –––––> 100000 sw mod 000 r/m data data (if s:w=01) =100000 0 1 11 000 001 05 21 = 81 C1 05 21
Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 13
5.4 Les instructions de transfert
Elles permettent de déplacer des données d’une source vers une destination :
• Registre vers mémoire ;
• Registre vers registre ;
• Mémoire vers registre.
Remarque : le microprocesseur 8086 n’autorise pas les transferts de mémoire vers mémoire.
L’instruction MOV :
Syntaxe : MOV destination, source
Exemples :
MOV AL, 21h ; MOV AX, BX ; MOV BL, [0200h] ; MOV AH, [BX+SI+100h]
L’instruction XCHG (Exchange) :
Syntaxe : XCHG Destination, Source ; Echange les contenus de Source et Destination.

5.5 Les instructions arithmétiques


Les instructions arithmétiques de base sont l’addition, la soustraction, la multiplication et la division qui incluent
diverses variantes. Plusieurs modes d’adressage sont possibles.
Addition : ADD opérande1, opérande2 ; L’opération effectuée est : opérande1 ← opérande1 + opérande2.
Exemples :
ADD AH, [1100h] ; Ajoute le contenu de la case mémoire d’offset 1100h à l’accumulateur AH (adressage direct) ;
Soustraction : SUB opérande1, opérande2 ; L’opération effectuée est : opérande1 ← opérande1 − opérande2.
Multiplication : Multiplication entière non signée.
MUL opérande ; Où opérande est un registre ou une case mémoire.
Cette instruction effectue la multiplication du contenu de AL par un opérande sur 1 octet ou du contenu de AX par un
opérande sur 2 octets. Le résultat est placé dans AX si l’opération est sur 8 bits (résultat sur 16 bits), et dans (DX, AX)
si l’opération est sur 16bits (résultat sur 32 bits).
Exemple :
MOV AL,51
MOV BL,32 AX = 51 × 32
MUL BL
Division : Division entière non signée.
DIV opérande ; où opérande est un registre ou une case mémoire.
Cette instruction effectue la division du contenu de AX par un opérande sur 1 octet ou le contenu de (DX, AX) par un
opérande sur 2 octets. Résultat : si l’opérande est sur 1 octet, alors AL = quotient et AH = reste ; si l’opérande est sur
2 octets, alors AX = quotient et DX = reste.
Exemple :
MOV DX, 0
MOV AX, 1234 AX = 123 (quotient) et
MOV BX, 10 DX = 4 (reste)
DIV BX
Autres instructions arithmétiques :
• ADC : addition avec retenue ; • SBB : soustraction avec retenue ; • INC : incrémentation d’une unité ;
• DEC : décrémentation d’une unité ; • IMUL : Multiplication entière signée ; • IDIV : Division entière signée.

5.6 Les instructions logiques


Ce sont des instructions qui permettent de manipuler des données au niveau des bits. Les opérations logiques de
base sont : ET, OU, OU exclusif, complément à 1, complément à 2, décalages et rotations.
Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 14
ET logique : AND opérande1, opérande2 ; L’opération effectuée est : opérande1 ← opérande1 ET opérande2.
Exemple :
MOV BL, 10010110b
MOV BL, 11001101b AL= 10000100
AND AL, BL
Autres instructions logiques :
OR : OU logique, XOR : OU exclusif, NOT : complément à 1, NEG : complément à 2…
Décalage logique à droite : SHR opérande, n ; décale l’opérande de n positions vers la droite.
Exemples : MOV AL, 11001011b
SHR AL, 1

MOV AL, 11001011b


MOV CL, 3 (si n > 1, n est placé dans CL ou CX)
SHL AL, CL AL = 01011000b, CF=0
Décalage logique à gauche : SHL opérande, n ; décale l’opérande de n positions vers la gauche.
Exemple : MOV AL, 11001011B
SHL AL, 1

Décalage arithmétique vers la droite : SAR opérande, n ; Le bit signe est décalé et est conservé tel quel.
Exemple : MOV AL, 11001011b
SAR AL, 1

Décalage arithmétique vers la gauche : SAL opérande, n ; Identique au décalage logique à gauche.
Rotation à droite (Rotate Right) : ROR opérande, n ; Cette instruction décale l’opérande de n positions vers la droite
et réinjecte par la gauche les bits sortant.
Exemple : MOV AL, 11001011b
ROR AL, 1

Rotation à gauche (Rotate Left) : ROL opérande, n

Rotation à droite avec passage par le carry : RCR opérande, n

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 15


Rotation à gauche avec passage par le carry : RCL opérande, n

5.7 Les instructions de branchement


Les instructions de branchement (ou saut) permettent de modifier l’ordre d’exécution des instructions du programme
en fonction de certaines conditions. Il existe 3 types de saut :
• Saut inconditionnel ;
• Sauts conditionnels ;
• Appel de sous-programmes.
Instruction de saut inconditionnel : JMP label ; Cette instruction effectue un saut vers le label spécifié.
Boucle1 : INC AX
DEC BX ; Ceci est une boucle infinie
JMP Boucle1
Remarque : l’instruction JMP ajoute au registre IP (pointeur d’instruction) le nombre d’octets (distance) qui sépare
l’instruction de saut de sa destination. Pour un saut en arrière, la distance est négative (codée en complément à 2).
Instructions de sauts conditionnels : Jcondition label
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. La condition du saut porte sur le test de l’état des indicateurs des flags :
Instruction nom condition
JZ label Jump if Zero saut si ZF = 1
JNZ label Jump if Not Zero saut si ZF = 0
JE label Jump if Equal saut si ZF = 1
JNE label Jump if Not Equal saut si ZF = 0
JC label Jump if Carry saut si CF = 1
JNC label Jump if Not Carry saut si CF = 0
JS label Jump if Sign saut si SF = 1
JNS label Jump if Not Sign saut si SF = 0
JO label Jump if Overflow saut si OF = 1
JNO label Jump if Not Overflow saut si OF = 0
JP label Jump if Parity saut si PF = 1
JNP label Jump if Not Parity saut si PF = 0
Remarque : il existe un autre type de saut conditionnel, les sauts arithmétiques. Ils suivent en général l’instruction de
comparaison : CMP opérande1, opérande2
condition nombres signés nombres non signés
= JEQ label JEQ label
> JG label JA label
< JL label JB label
≠ JNE label JNE label

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 16


Exemple :
CMP AX, BX
JG superieur
JL inferieur
superieur : ...
...
inferieur : ...
Instruction de boucle : LOOP ; Répète une boucle tant que CX est différent de zéro (celui-ci est auto décrémenté).
Appels de sous-programmes : CALL label
Pour éviter la répétition d’une même séquence d’instructions plusieurs fois dans un programme, on rédige la
séquence une seule fois en lui attribuant un nom et on l’appelle lorsqu’on en a besoin. Le programme appelant est le
programme principal. La séquence appelée est un sous-programme ou procédure.
Remarque : une procédure peut être de type NEAR si elle se trouve dans le même segment ou de type FAR si elle se
trouve dans un autre segment.
Lors de l’exécution de l’instruction CALL, le contenu de IP (adresse de retour) est sauvegardé dans la pile, puis IP est
chargé avec l’adresse de la première instruction du sous-programme. La fin du sous-programme est indiquée par
l’instruction RET, une fois celle-ci atteinte, le registre IP est chargé par l’adresse de retour sauvegardée dans la pile,
l’instruction suivant le CALL est ainsi exécutée et le programme appelant peut être donc poursuivi.

5.8 Fonctionnement de la pile


La pile est une zone mémoire fonctionnant en mode LIFO (Last In First Out : dernier entré, premier sorti). Deux
opérations sont possibles sur la pile :
• Empiler une donnée : placer la donnée au sommet de la pile ;
• Dépiler une donnée : lire la donnée se trouvant au sommet de la pile.
On représente la pile comme une zone mémoire où les adresses augmentent de haut en bas. Le sommet de la pile est
repéré par un registre appelé pointeur de pile (SP : Stack Pointer) qui contient l’adresse de la dernière donnée
empilée.
La pile est définie dans le segment de pile dont l’adresse de départ est contenue dans le registre SS. Le pointeur de
pile SP est automatiquement pré-décrémenté lors d’une opération d’empilage. Une opération de dépilage est suivie
quant à elle par une incrémentation de SP (post- incrémentation).
La pile sert à sauvegarder momentanément des données ainsi que les contenus des registres qui ne sont pas
automatiquement sauvegardés lors de l’appel à un sous-programme.
• Instruction d’empilage : PUSH opérande (précédée par une auto décrémentation)
• Instruction de dépilage : POP opérande (suivie par une auto incrémentation)
Où opérande est un registre ou une donnée sur 2 octets (on ne peut empiler que des mots de 16 bits).
Exemple :
PUSH AX ; empilage du registre AX ...
PUSH BX ; ... du registre BX ...
PUSH [1100h] ; ... et de la case mémoire 1100H-1101H
...
POP [1100h] ; dépilage dans l’ordre inverse de l’empilage
POP BX
POP AX
Remarque : la valeur de SP doit être initialisée par le programme principal avant de pouvoir utiliser la pile.

Université de BBA-Département d’Electronique Tarek Abed (2014/2015) 17

Vous aimerez peut-être aussi