Chap. IV Le microprocesseur Intel 8086 Université de Bordj Bou Arreridj Faculté des Sciences et de la Technologie Département d’Electronique Informatique Industrielle M. T. Abed (2013-2014) (2013-2014)
Chap. IV : Le microprocess microprocesseur eur Intel 8086 I.
.................................................................. ............................................ ............................................ ............................................ ................................. ........... 2 Introduction ............................................
II.
............................................................... ............................................ ............................................ ............................................ ...................... 2 Organisation externe ......................................... 2.1- Schéma fonctionnel du 8086 ....................... ............................................. ............................................ ............................................ ............................................ .......................... .... 2 2.2- Description Descripti on des signaux du 8086 .............................................. .................................................................... ............................................ ........................................ .................. 3 2.3- Création du bus système du 8086.......................................... ................................................................ ............................................ ............................................ ...................... 4 2.4- Disposition Disposit ion des banques de mémoire ......................... ............................................... ............................................ ............................................ ................................. ........... 6 2.5 Séquence de lecture ............................................................ .................................................................................. ............................................ ............................................ .......................... .... 6 2.6 Séquence d’écriture .......................................... ................................................................ ............................................ ............................................ ............................................ ...................... 7
III.
................................................................ ............................................ ............................................ ........................................ .................. 8 Organisation interne ..........................................
IV.
................................................................ ............................................ ............................................ ..................................... ............... 9 Gestion de la mémoire ..........................................
V.
..................................................................... ........................ .. 11 Le jeu d’instruction et les modes d’adressage du 8086 ................................................ 5.1 Format de base des instructions .......................................... ................................................................ ............................................ ............................................ ........................ .. 11 5.2 Les modes d’adressage ................................................ ...................................................................... ............................................ ............................................ ............................... ......... 11 5.3 Règles de détermination détermi nation des codes des instructions ............................................ .................................................................. ................................... ............. 15 5.4 Les instructions de transfert ......................................... ............................................................... ............................................ ............................................ ............................... ......... 17 5.5 Les instructions arithmétiques ..................................... ........................................................... ............................................ ............................................ ............................... ......... 17 5.6 Les instructions logiques ................................................. ....................................................................... ............................................ ............................................ ........................... ..... 18 5.7 Les instructions inst ructions de branchement ................................................... ......................................................................... ............................................ ................................... ............. 19 5.8 Fonctionnement de la pile............................................ pile.................................................................. ............................................ ............................................ ............................... ......... 20
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 (2013/2014)
2
2.2- Description des signaux du 8086 Le 8086 peut fonctionner suivant deux modes : un mode minimal et un 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. En mode maximal, un contrôleur de bus 8288 doit être ajouté pour générer des signaux de contrôle. La sélection entre ces deux modes se fait au niveau de la broche MN / / MX . Lorsque cette broche 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. En configuration c onfiguration haute, le 8086 peut adresser directement quatre segments ou quatre pages de 64 KO, soit au total 256 KO. En modifiant les contenus des registres de segment, le 8086 peut adresser 16 segments de 64 KO, soit 1MO. Ce mode permet de réaliser des systèmes multiprocesseurs. - 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. - MN / / MX : entrée de choix du mode de fonctionnement du microprocesseur : • Mode minimum (MN/MX = 1) : le 8086 fonctionne de manière autonome, il génère lui-même le bus de commande
(RD, WR, ...) ; • Mode maximum (MN/MX = 0) : ces signaux de commande sont produits par un contrôleur de bus, le 8288.
- 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 po ids 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, indique si le 8086 adresse la mémoire ( M / IO = 1) ou les entrées/sorties ( M / IO =0). Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
3
- 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 :
/ R = 1 : données émises par le microprocesseur (écriture) ; • DT / • 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é capac ité 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 chaque banque de 512 Ko. Le microprocesseur peut ainsi lire et écrire des données sur 8 bits ou sur 16 bits : (voir figure 6.) 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 fort de cette donnée est rangé à une adresse impaire et l’octet de poids faible à une adresse paire, sinon la lecture de cette donnée doit se faire en deux opérations o pérations successives, d’où une augmentation du temps d’exécution du transfert.
2.3- 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). La commande de mémorisation de l’adresse est générée par le microprocesseur : c’est le signal ALE.
Figure 4 : Démultiplexage des adresses et des données. • Si ALE = 1, le verrou est transparent (Q = D) ; • Si ALE = 0, mémorisation de la dernière valeur de D sur les sorties Q ; • Les signaux de lecture ( RD ) ou d’écriture ( WR ) ne sont générés par le microprocesseur que lorsque les données
sont présentes sur le bus A/D. Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
4
Figure 5 : Génération des lignes du bus d’adresses. Exemples de bascules D : circuits 8282/8283, 8282/8283, 74373, 74573.
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
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
5
Figure 7 : Création du bus système.
2.4- Disposition des banques de mémoire
Figure 8 : Disposition banques de données.
2.5 Séquence de lecture Pendant le cycle T1, le 8086 envoie vers l’extérieur une adresse sur 16 bits et les signaux M / IO , Les poids d’adresse AD0 à AD15 et le signal
BHE ne
BHE
et DT / / R .
sont stables que pendant le cycle T 1et une partie du cycle T 2.
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 « tampon » des 8282/8283, validés par le signal ALE. Les signaux M / IO et DT / / R sont disponibles pendant toute l’opération de lecture. M / IO détermine si l’opération en cours est une opération avec la mémoire ou une opération d’entrée/sortie. DT / / R indique le sens de transfert à travers les amplificateurs bidirectionnels de données 8286/8287. Au début du cycle T 2, 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. 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 T 2 et reste stable pendant les cycles T3 et T4. Simultanément, le ou les circuits adressés envoient sur la broche
READY du
8086 un niveau haut signalant qu’une
donnée est disponible. 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. Cette séquence est spécifique au mode minimum. Dans le mode maximum, le principe reste le même, sauf que l’adresse envoyée est sur 20 bits : A0-A19, A0 à A15 étant multiplexés avec D0 à D15 et A16 à A19 avec S3 à S6. Les signaux de contrôle sont générés par le contrôleur de bus.
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
6
Figure 9. Séquence de lecture.
2.6 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
/ R reste à l’état haut, indiquant un transfert du microprocesseur vers la périphérie à début de T2 et le signal DT / travers le 8286/8287.
Figure 10. Séquence d’écriture
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
7
III.
Organisation interne
Figure 11 : Organisation interne. 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 gro upes : • 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. Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
8
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 c ode ; 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.
IV.
Gestion de la mémoire
L’espace mémoire adressable par le 8086 est de 2 20 = 1 048 576 octets = 1 Mo (20 bits d’adresses). Pour diminuer la longueur des instructions et n’avoir des adresses que sur 16 bits et non sur 20 bits, cet espace est divisé en 16 segments (pages) de 64 Ko (65 536 octets). 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. Et pour désigner une case mémoire parmi les 64Ko=216 contenues dans un segment, il suffit d’une valeur sur 16 bits.
Figure 13 : Gestion de la mémoire. Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
9
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.
Cette méthode de gestion de la mémoire est appelée segmentation de la mémoire. La donnée d’un couple (segment, offset) définit une adresse logique, notée sous la forme segment : offset . L’adresse d’une case mémoire donnée sous la forme d’une quantité sur 20 bits (5 digits hexa) est appelée adresse physique car elle correspond à la valeur envoyée réellement sur le bus d’adresses A0 - A19. Les registres de segments contiennent le début de la page. Le mécanisme d’adressage, ou la correspondance entre adresse logique et adresse physique est donnée par :
Figure 14 : Calcul de l’adresse physique. Ainsi, l’adresse physique se calcule par l’expression : Adresse physique = 16 × segment + offset car le fait d’injecter 4 zéros en poids faible du segment revient à effectuer un décalage de 4 positions vers la gauche, c’est à dire une multiplication par 24 = 16. A un instant donné, le 8086 a accès à 4 segments dont les adresses se trouvent dans les registres de segment 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 de sauvegarde 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. De même, les registres de segments DS et ES peuvent être associés à un registre d’index. Exemple : DS : SI, ES : DI. Le registre de segment de pile peut être associé aux registres de pointeurs : SS : SP ou SS : BP. Mémoire accessible par le 8086 à un instant donné :
Figure 15 : Division de la l a mémoire en segments. Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
10
Remarque : les segments ne sont pas nécessairement distincts les uns des autres, ils peuvent se chevaucher ou se recouvrir complètement.
Initialisation Initialisa tion du microprocesse microprocesseur ur : Le contenu des registres après un RESET du mic roprocesseur est le suivant : IP = 0000H CS = FFFFH DS = 0000H ES = 0000H SS = 0000H Puisque CS contient la valeur FFFFH et IP la valeur 0000H, la première instruction exécutée par le 8086 se trouve donc à l’adresse logique FFFFH : 0000H, correspondant à l’adresse physique FFFF0H (bootstrap). Cette instruction est généralement un saut vers le programme principal qui initialise ensuite les autres registres de segment.
V.
Le jeu d’instruction et les modes d’adressage du 8086
Chaque microprocesseur reconnaît un ensemble d’instructions appelé jeu d’instructions (Instruction Set) fixé par le constructeur. Le jeu d’instructions décrit l’ensemble des opérations élémentaires que le processeur peut exécuter. Le nombre d’instructions varie entre 75 et 150 pour les microprocesseurs CISC et entre 10 et 30 instructions pour les microprocesseurs RISC. Chaque instruction est définie par une valeur numérique binaire dite code opératoire (ou code opération). Au lieu de manipuler les codes opératoires, on utilise une notation symbolique pour représenter les instructions : les mnémoniques. Un programme constitué de mnémoniques est appelé programme en assembleur . Les instructions s’écrivent sous la forme : Mnémonique Destination, Source . Elles peuvent être classées en groupes : • Instructions de transfert de données ; • Instructions arithmétiques ; • Instructions logiques ; • Instructions de branchement ...
5.1 Format de base des instructions ins tructions 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 16). 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 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
Code opération
1
0
d
w
7
6
5
MOD
4 REG
3
2
1
0
R/M
Figure 16 : Format des instructions.
5.2 Les modes d’adressage Les modes d’adressages permettent de déterminer comment accéder à une position en mémoire, Ce qui revient à la détermination de l’adresse effective (EA) de cette position. L’adresse effective représente le déplacement (offset) de la case mémoire dans le segment de données (voir figure 18). Dans ce qui suit nous utiliserons des exemples d’instructions du 8086 qui s’écrivent selon la forme :
1- Ad re s sa g e im pl ic it e L’instruction contient seulement le code opération. Exemple : not AX ; permet de complémenter le contenu du registre AX.
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
11
2- Ad re s sa g e im mé di at 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- Ad re s sa g e d’ u n re gi st r e La donnée est contenue dans un registre. Exemple : mov AX, BX : charge le contenu du registre BX dans le registre AX.
4 - Ad re s sa g e di re ct ou ét en du : L’instruction comporte l’adresse effective de la case mémoire où se trouve la donnée. Exemple : mov BL, [1200h] ; transfère le contenu de la case mémoire d’adresse 1200h vers le registre BL.
Figure 17 : Adressage dans le segment de données.
5 - Ad re s sa g e in di re ct p ar r eg i s tr e o u b as é (e t b a sé a ve c dé pl ac e me nt ) : 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 : on dit que l’adressage est basé sur DS ; - mov AL, [BP] : le segment par défaut associé au registre de base BP est le segment de pile. Dans ce cas, l’adressage est basé sur SS. Dans le cas de l’adressage basé avec déplacement, une valeur constante (déplacement) est rajoutée pour obtenir l’offset. EA= (BP) + d ; EA= (BX) + d. Exemple : mov [BX+100h], AX ; L’adresse effective est donnée par (BX) + 100h.
6 - Ad re s sa g e in de xé ( et in de xé av ec dé pl ac em en t ) : 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 rangés en mémoire. EA= (SI) ; EA= (DI). Dans le cas de l’adressage indexé avec déplacement. EA= (SI) + d ; EA= (DI) + d Exemples : - mov [DI], BX ; charge c harge les cases mémoire d’offset DI et DI + 1 avec le contenu du registre BX.
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
12
- 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 - Ad re s sa g e in di re ct in d ex é ( et in di re ct in d ex é av ec dé pl ac em e nt ) : L’offset est obtenu en faisant la somme 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 Exemple : mov AH, [BX+SI+100h] Dans cet exemple, BX et SI peuvent être considérés comme indices de ligne et de colonne co lonne dans une matrice.
8 - Ad re s sa g e r el at if 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. Exemple : - JMP 05h ; branchement inconditionnel à l’adresse IP + 05h. - JNZ F5h ; branchement si zéro à l’adresse IP - 11h (C à 2 de F5h).
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
13
5.3 Règles de détermination des codes des instructions 7
07
07
M d w O D
Code opération
REG
Byte 1
R/M
Byte 2
07
07
07
0
Depl./Data low
Depl./Data high
Data low
Data high
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
● 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 :
MOD
REG
R/M
11
destination
source
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
15
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+100h] : 10001101 mod reg r/m = 10001101 10 000 111 00 10 = 8D 87 00 10 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 (2013/2014)
16
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, il faut passer par un registre intermédiaire. L’instruction MOV :
Syntaxe : MOV destination, source Exemples : mov AL, 21h, mov AX, BX, mov BL, [1200h], mov AH, [BX+SI+100h] L’instruction XCHG (Exchange) :
Syntaxe : XCHG Destination, Source : Echange les contenus de Source et de 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. opérande1, opérande2 Addition : ADD opérande1,
L’opération effectuée est : opérande1 o pé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 o pérande1 ← opérande1 − opérande2. Multiplication Multiplication : Multiplication entière non signée. MUL opérande, où opérande est un registre r egistre 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 les données à multiplier sont sur 1 octet (résultat sur 16 bits), dans (DX, AX) si elles sont sur 2 octets (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. Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
17
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. opérande1, opérande2 ET logique : AND opérande1, L’opération effectuée est : opérande1 ← opérande1 ET o pérande2.
Exemple : mov BL, 10010110b 10010110b mov BL, 11001101b 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, 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 : Ce décalage conserve le bit de signe bien que celui-ci soit
décalé. 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
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
18
Rotation à gauche (Rotate Left) : ROL opérande, n
Rotation à droite avec passage par le carry : RCR opérande, n
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é. Comme le montre l’exemple suivant : 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 Po ur 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 l’état de l’un (ou plusieurs) des indicateurs d’état (flags) du microprocesseur : 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
Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
19
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
≠
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 pointeur d’instruction IP est chargé avec l’adresse de la première instruction du sous-programme. Lors du retour au programme appelant, l’instruction suivant le CALL doit être exécutée, c’est-à-dire que IP doit être rechargé avec l’adresse de cette instruction. Avant de charger IP avec l’adresse du sous-programme, l’adresse de retour au programme principal (contenu de IP), est sauvegardée dans la pile. Lors de l’exécution de l’instruction RET, cette adresse est récupérée à partir de la pile et rechargée dans IP, ainsi le programme progr amme appelant peut se poursuivre.
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.
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. Lors de l’appel à un sous-programme, l’adresse de retour au programme appelant (contenu de IP) est empilée après que le pointeur de pile SP soit automatiquement décrémenté. Au retour du sous-programme, le pointeur d’instruction IP est rechargé avec la valeur contenue dans le sommet de la pile et SP est incrémenté. La pile peut également servir à sauvegarder le contenu de 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 : Université de BBA-Département d’Electronique
Tarek Abed (2013/2014)
20
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 (2013/2014)
21