Vous êtes sur la page 1sur 15

MICROPROCESSEUR 16

BITS
(LE 8086 DE INTEL)

R. GRISEL

Objectifs
- Architecture gnrale
- Cycle daccs au bus
- Organisation de la mmoire
- Modes dadressages

R. GRISEL

Caractristiques gnrales du 8086


- Microprocesseur 16 bits avec une architecture issue de celle du 8080.
- Il prsente une capacit d'adressage tendue (24 modes).
- Jeu d'instructions trs puissant (multiplication et division cbles).
- Il utilise pour ladressage des segments spcialiss (transportabilit).
- Il peut fonctionner soit en mode minimum, soit en mode maximum.
- La mmoire de un Mo est vu comme un bloc de 512 Kilo-mots.
- les bus dadresses et de donnes sont multiplexs.
- Lespace mmoires des E/S est spar du reste de la mmoire.
- Il est totalement compatible avec le microprocesseur 8088.
- Il prsente 1 entre dinterruption logicielle et 2 entres matrielles.
- Il dispose de circuits d'interface ou de traitements spcialiss.
- Peut reprendre les circuits priphriques des microprocesseurs 8 bits.

R. GRISEL

Architecture interne du 8086


Unit d'excution ( UE)

AH
BH

AX
BX
CX

CH

DX

DH

Unit d'interface de bus ( UIB)


gnration
d'adresses

AL
BL
CL
DL
SI
DI
SP

CS

BP

DS

20 bits
Buffer
du bus

SS
Registres gnraux

bus interne

SS
Compteur
d'instructions

oprandes
file d'attente de 6 octets
de codes instructions
ALU

dcodeur

16 bits

drapeaux

R. GRISEL

E.U. et B.I.U.?
La premire machine: L'EU ( Execution Unit, unit d'excution) regroupe les fonctions
de traitement (unit arithmtique et logique), les registres gnraux, le dcodeur
d'instruction et le microcode associ. Elle lit les codes opration dans une file d'attente
et les excute. La file d'attente est alimente par le BIU (Bus Interface Unit, unit
d'interface de bus) qui constitue la deuxime machine.
Le travail principal de l'UIB, est de chercher les instructions en mmoire et
de les mettre dans la file d'attente. Ce travail est rompu dans deux cas particuliers.
Le premier cas est celui o l'UE, excute une instruction ncessitant un
accs mmoire. Elle demande alors l'IUB de lire ou d'crire une valeur en mmoire.
Le second cas est celui o l'UE rencontre un droutement de programme (
jmp / call ...). Le contenu de la file d'attente n'est plus jour et l'UE doit demander une
rinitialisation partir de l'adresse de branchement.
La file d'attente des instructions a une taille de 6 octets, l'accs se fait
toujours par mots de 16 bits sauf dans le seul cas particulier o l'adresse de
rinitialisation est impaire.

R. GRISEL

Le but recherch est la paralllisation des deux tches d'acquisition et d'excution


des instructions de manire optimiser l'occupation du bus . Cette distinction est
justifie par le fait que ces deux blocs travaillent en partie indpendamment .
Lorsque l'EU a besoin d'accder une donne en mmoire , il demande le
transfert au BIU en nommant le segment concern , et en fournissant le dplacement
dans le segment. Le BIU calcule l'adresse physique sur 20 bits et ralise le transfert
demand .
Les instructions excutes par l'EU sont issues d'une file d'attente de six
octets d'instructions pour le 8086. Le BIU prsente les octets d'instructions l'entre
de la file d'attente ds que les deux conditions suivantes sont remplies :
- L'EU ne demande pas de transfert de donnes; cet vnement est
prioritaire sur la lecture des instructions.
- Il existe des places libres dans la file d'attente qui peuvent tre remplies
par au moins un cycle de lecture du bus . Le 8086 a un bus de donnes de 16 bits:
une lecture des octets d'instructions se fait ds qu'il y a au moins deux places libres .
En rsum : pendant que l'EU ne demande pas de transfert avec la mmoire
, le BIU occupe ce temps libre du bus pour amener les instructions dans la file
d'attente. Quand la file d'attente est vide , l'EU attend que le BIU place une instruction
dans la file d'attente. Ceci arrive lorsque l'EU effectue un saut dans le programme : le
contenu de la file d'attente est alors effac ( flush ou vidage)
Cela peut galement arriver, lorsque l'excution d'une suite d'instructions est
plus rapide que le remplissage de la file d'attente par les cycles lecture du bus .

R. GRISEL

Les registres du 8086


AL
BL
CL
DL

AH
BH
CH
DH
SP
BP
SI
DI

ACCUMULATEUR
BASE
COMPTAGE
DONNEES
POINTEUR DE PILE
POINTEUR DE BASE
INDEX DE SOURCE
INDEX DE DESTINATION

IP

POINTEUR D'INSTRUCTION

Indicateurs de commande
TF

DF

Indicateurs d'tat

IF

ZF

SF

OF

AF

PF

CF

SF : SIGNE
OF : DEBORDEMENT
IF : VALIDATION D'INTERRUPTION
DF : DIRECTION
TF : PIEGE

CF : RETENUE
PF : PARITE
AF : RETENUE AUXILIAIRE
ZF : ZERO

SEGMENT DE CODE
SEGMENT DE DONNEES
SEGMENT DE PILE
SEGMENT SUPPLEMENTAIRE

CS
DS
SS
ES

R. GRISEL

Les registres de travail :


Ce sont les registres avec lesquels peuvent tre effectues les additions , soustractions et
oprations logiques , la deuxime oprande tant obtenue par l'un des modes d'adressages du
microprocesseur . Chacun de ces registres a des fonctions particulires :
Les registres de base et d'index : BX , BP , SI , DI
Le contenu de ces registres peut tre utilis comme adresse mmoire ( voir modes d'adressage du
8086 ) . Les deux index permettent la gestion de suite de mots; il s'agit de l'index de destination ( DI
) et de l'index de source ( SI ) . Le registre BP ( base pointer ) sert la gnration des adresses des
donnes .
Le pointeur de pile : SP
Le 8086/8088 gre une pile utilise pour les sous programmes et servant sauvegarder les
donnes de l'utilisateur.
Les registres gnraux : AX , BX , CX , DX
Ils sont au nombre de 4 et peuvent travailler par moiti (8 bits). Ils ont pour appellation :
- L'accumulateur : AX compos de AH et de AL. Les multiplications, les divisions, les
traitements de chanes, les transferts entres-sorties, la conversion en BCD du rsultat d'une
opration arithmtique se font tous par son intermdiaire .
- Base : BX compos de BH et de BL. Ce registre sert l'adressage en mmoiredonnes.
- Le compteur : CX compos de CH et de CL, est utilis en compteur lors des
instructions de boucles , dont les traitements de chanes. Le registre CL est utilis en compteur lors
des instructions de dcalages et de rotations multiples (sur plusieurs bits) .
- Le registre de donnes : DX compos de DH et de DL. Ce registre des utilisations
particulires, par exemples :
* extension 32 bits pour les multiplications et les divisions de mots .
* reste d'une division de mots ( AX contient le quotient ) .
* en registre d'adresses d'entres sorties .
R. GRISEL

Les registres de contrle du programme :


- Le pointeur d'instruction "IP" : Ce registre est mis jour par le BIU afin qu'il pointe
vers l'adresse de l'instruction suivante. Les programmes n'ont pas d'accs direct au pointeur
d'instruction, mais au cours de l'excution d'un programme, ce registre peut tre modifi ou bien
sauvegard, puis restaur par la pile.
- Le registre d'tat "FLAGS" : Le 8086 dispose de neuf indicateurs d'tat un bits, (voir
figure suivante). (Les indicateurs TF, DF et IF ont un usage particulier). Les indicateurs d'tat sont
mis jour par l'EU suite au rsultat d'une opration arithmtique ou logique.

Indicateurs d'tat

Indicateurs de commande

TF

IF

DF

OF

SF

ZF

AF

PF

CF

CF : RETENUE
PF : PARITE
AF : RETENUE AUXILIAIRE
ZF : ZERO
SF : SIGNE
OF : DEBORDEMENT
IF : VALIDATION D'INTERRUPTION
DF : DIRECTION
TF : PIEGE

R. GRISEL

CF ( carry flag ) : indicateur de retenue .


PF ( parity flag ) : indicateur de parit .
AF ( auxiliary flag ) : indicateur de retenue auxiliaire . La retenue auxiliaire est la retenue gnre
par les 4 bits de poids faible du rsultat d'une opration arithmtique . Elle permet de coder le
rsultat sous forme BCD .
ZF ( zro flag ) : indicateur de zro .
SF ( sign flag ) : indicateur de signe.
TF ( trap flag ) :indicateur de mode pas pas . Si TF=1 une interruption est gnre aprs
excution de chaque instruction du programme . Il permet la mise au point du logiciel sans gestion
externe. Chaque instruction est interrompue par une exception de type pas pas afin d'aller
excuter , la fin de chaque instruction un sous programme d'aide la mise au point ( debug
exception ). Ce bit ne peut tre modifi que par l'intermdiaire de la pile . Lorsqu'on entre dans le
programme de pas pas, le registre des indicateurs est sauvegard et le bit TF est
automatiquement remis zro afin d'empcher le programme pas pas d'tre effectu lui mme en
mode pas pas. Au retour, le registre des indicateurs est restitu et ainsi le bit TF se retrouve de
nouveau positionn.
IF (interrupt flag) : indicateur d'autorisation d'interruption . Cet indicateur autorise (IF=1) ou interdit
(IF=0) les interruptions externes demandes sur la broche INTR du circuit .
DF (direction flag) : indicateur de direction . C'est le sens de progression des registres d'index SI et
DI lors des instructions de traitements de chanes . DF=1 adresses dcroissantes, DF=0 adresses
croissantes
OF (overflow flag) : Le flag d'overflow est ncessaire en arithmtique signe (complment A 2),
dans ce cas le bit de plus fort poids (le huitime ou le seizime) est le bit de signe et OF indique un
dpassement de calculs.

R. GRISEL

10

Signaux du 8086
GND

40

VCC (+ 5 V 5 %)

AD14

39

AD 15

AD13

38

A16 / S3

AD12

37

A17 / S4

AD11

36

A18 / S5

AD10

35

A19 / S6

AD9

34

/BHE / S7

AD8

33

AD7

32

/RD

AD6

10

31

HOLD

31

/RQ / /GTO

AD5

11

30

HLDA

30

/RQ / /GT1

AD4

12

29

/WR

29

/LOCK

AD3

13

28

M / /IO

28

/S2

AD2

14

27

DT / /R

27

/S1

AD1

15

26

/DEN

26

/S0

AD0

16

25

ALE

25

QS0

NMI

17

24

/INTA

24

QS1

INTR

18

23

/TEST

CLK

19

22

READY

GND

20

21

RESET

8086

MN / /MX

R. GRISEL

11

Les lignes adresses et donnes du 8086 sont multiplexes de manire conomiser


le nombre de broches. Ce bus peut tre utilis directement en tant que bus local sur
des petits systmes.
En rgle gnrale le bus sera dmultiplex pour fournir des bus de donnes
et d'adresses indpendants. Ceci est ralis par de simples latchs commands par
le signal ALE (adress Latch Enable). De plus cela offre l'intrt de bufferiser les lignes
adresses et donnes (la sortance du 8086 tant limite). Le signal ALE est gnr
directement par le 8086 en mode minimum , et par son contrleur de bus 8288 en
mode maximum.
Chaque cycle d'accs au bus comporte 4 priodes d'horloge (T1 T4)
auxquelles peuvent s'ajouter des priodes d'attente Tw (wait states) insres entre T3
et T4. La figure suivante donne le cycle de base du 8086.
Pendant T1 , le processeur met l'adresse sur le bus. Les transferts de
donnes ont lieu pendant les cycles T3 et T4. Le cycle T2 permet essentiellement les
changements de direction de bus pour les oprations de lecture. Des tats Wait sont
rajouts entre T3 et T4 tant que le signal READY est 0 .
La rgularit des accs au bus est due l'indpendance entre BIU et EU. Le
processeur utilise 3 cycles pour son organisation interne; ainsi le bus n'est pas
constamment utilis par le 8086. Les priodes situes entre deux cycles d'accs au bus
sont appeles inactives ou idle.

R. GRISEL

12

Cycle d accs au bus systme


T1

T2

T3

Tw

T4

T1

Ready=0

ALE

ADR

ADR/STA

ADR/DATA

RD/WR

R. GRISEL

13

Modes de fonctionnement du 8086


Mode minimum :
le 8086 gnre lui mme les 3 bus, donnes, adresses et
contrle. Le bus de contrle est un bus simplifi convenant un
environnement monoprocesseur. Ce mode ne permet pas l'utilisation de
co-processeurs ou de processeurs spcialiss. Il n'est pas adapt des
architectures multiprocesseurs.
Mode maximum :
le 8086 gnre les signaux d'tat. Le contrleur de bus dcode
ces signaux pour gnrer un bus de contrle compatible avec les
spcifications multibus. Les signaux S0, S1 et S2 sont utiliss pour
identifier le type d'accs. S3 et S4 indiquent quel registre segment est
utilis pour la gnration de l'adresse physique. S5 est l'image du bit
dinterruption, S6 est toujours 0 et S7 est un bit rserv.
R. GRISEL

14

Mode maximum / segment

R. GRISEL

S4

S3

Registre de segment concern

ES (Extra segment)

SS (Stack segment)

CS (Code segment) ou transfert avec les entres-sorties, ou


lecture d'un vecteur d'interruption.

DS (Data segment)

15

Mode maximum / bus de contrle


Action du microprocesseur

Sortie du 8288
correspondante

/S2

/S1

/S0

Acquittement d'interruption masquable

/INTA

Lecture d'une donne entres-sorties

/IORC

Ecriture d'une donne entres-sorties

Lecture d'une donne mmoire


Ecriture d'une donne mmoire

Arrt par une instruction HLT

/IOWC
aucune
/MRDC

Lecture d'instruction

/MRDC
/MWTC
aucune

inactif

R. GRISEL

16

Mode maximum / file d instruction

QS1

QS0

Etat inchang. Aucun octet n'est lu dans la file d'attente.

Dcodage du premier octet d'une instruction dans la file d'attente.

File d'attente vide, suite un saut dans le programme,


ou au dcodage de tous les octets s'y trouvant, avant
que l'unit d'interface bus ne lise les instructions
suivantes.

Dcodage de l'octet suivant d'une instruction (autre que le premier).

Etat de la file d'attente ou action de l'unit d'excution.

R. GRISEL

17

Organisation logique de la mmoire


La mmoire est organise en 512 K-mots de 16 bits, rangs avec
l'octet de poids fort l'adresse la plus haute de la manire suivante.

FFFFFH

Octet de
poids fort
Octet de
poids faible

Mot de 16 bits
XXXXXH adresse du mot

00000H

R. GRISEL

18

Organisation physique de la mmoire


Elle est divise physiquement en deux bancs de 512 K-octets : la
mmoire paire (ou faible) et la mmoire impaire (ou fort).
Mmoire "impaire"

Mmoire "paire"

Y+1

X+1

/BHE

A19 - A1

D15 - D8

D7 - D0

A0

R. GRISEL

19

Accs la mmoire
Pour un accs par octet un seul des bancs est valid et pour un
accs par mot, les deux bancs sont utiliss simultanment. Un seul accs ou
successivement deux accs suivant que l'adresse du mot est paire ou
impaire. Les bits A0 et BHE sont utiliss pour de telles oprations.

/BHE A0

Donne slectionne.

Le mot de 16 bits (adresse paire).

L'octet sur le bus D8-D15 (adresse impaire).

L'octet sur le bus D0-D7 (adresse paire).

aucune.

R. GRISEL

20

Accs 16 bits une adresse paire


Mmoire "impaire"

Mmoire "paire"

Y+1

X+1

/BHE=0

A19 - A1

R. GRISEL

D15 - D8

D7 - D0

A0=0

21

Accs 16 bits une adresse impaire


PREMIER TEMPS
Mmoire "impaire"

Mmoire "paire"

Y+1
Y

X+1

D15 - D8

A19 - A1

A0 =1

D7 - D0

/BHE=0

R. GRISEL

22

Accs 16 bits une adresse impaire


DEUXIEME TEMPS
Mmoire "impaire"

Mmoire "paire"

Y+1
Y

X+1

D15 - D8

A19 - A1

A0 =0

D7 - D0

/BHE=1

R. GRISEL

23

Les mcanismes d adressages


0

FFFFFH
64 Koctets

Mmoire
1 Moctets

64 Koctets

ES

Mot de 8 bits
Dplacement

Mot de 16 bits
Dplacement

octet fort
octet faible

64 Koctets

DS
SS

64 Koctets

CS

00000H

R. GRISEL

24

Remarque

L'accs au 32 K-mots d'entres-sorties n'est


rfrenc dans aucun segment. Les adresses
physiques sont celles spcifies directement par le
programmeur.

R. GRISEL

25

Calcul de l'adresse
L'tablissement de l'adresse physique sur 20 bits est obtenu par la
formule suivante :
Adresse = 16 X registre de segment + dplacement
19 18 17 16 15

0 0 0 0

Dplacement dans le segment


4 3 2 1 0

19

19

0
Adresse physique

R. GRISEL

26

Exemple numrique :
registre de segment = A400H et dplacement 1010H. L'adresse physique sera
gale A5010.

+
=

R. GRISEL

Dplacement
Segment

27

Les modes d adressages


Le code excutable d'un programme est toujours points par le
contenu du registre IP par rapport au contenu du registre CS (CS:IP).
Les donnes stockes en pile de sauvegarde sont toujours
pointes par le contenu du registre SP par rapport au contenu du registre SS
(SS:SP).
Les positions mmoires reprsentant des donnes sont pointes
par une adresse effective AE par rapport au contenu d'un segment qui
dpend de la composition de ladresse effective.
Les donnes manipuler peuvent tre dans des registres,
dans la mmoire, dans la pile ou spcifies immdiatement dans
linstruction (modes dadressage des donnes).

R. GRISEL

28

Les modes d adressages


1) Adressage des registres
Concerne tout transfert ou toute opration, entre deux registres de
mme taille, ou sur un registre.
MOV SI , CX (CX) vers (SI) (16 bits)
ADD DH,AL Transfert de (DH) + (AL) vers (DH) (8 bits)
2) Adressage de la mmoire
Il y a 24 possibilits en tout. C'est ce qui permet le calcul du dplacement
dans le segment (encore nomm AE) et le segment concern par dfaut par
le mode d'adressage.
Adressage direct
Le dplacement est donn directement par le programme , et se fait dans le
segment DS ( par dfaut ) .
Dplacement = mot de 16 bits .
Soit le registre de segment DS = 1200H et le dplacement = 0081H (=
VARIABLE). l'instruction :
MOV BP , VARIABLE
ralise le transfert de VARIABLE (dans le segment DS) vers ( BP ).
R. GRISEL

29

Adressage immdiat
La donne oprande d'une opration avec un registre ou une mmoire est
directement donne par le programme. Cette donne peut tre un octet ou un
mot, le registre ou la mmoire destinataire tant de la mme taille .
MOV WORD PTR[SI],1
ralise le chargement de (( SI ) dans le segment DS ) par 0001H.
( l'expression WORD PTR ou BYTE PTR indique la taille de
l'emplacement mmoire considr, quand elle n'est pas implicitement connue
, comme dans cet exemple ).
Les registres segments ne peuvent pas tre chargs par adressage
immdiat .

R. GRISEL

30

Adressage bas ( registre de base : BX et BP )


L'adresse est dtermine par :
base BX : le contenu de BX, auquel est ventuellement ajout un
dcalage sur 8 ou 16 bits sign, reprsente le dplacement dans le segment
DS ( par dfaut ) .
base BP : le contenu de BP, auquel est ajout ( toujours ) un
dcalage sur 8 bits ou 16 bits sign, reprsente le dplacement dans le
segment SS ( par dfaut ) .
d'o les cinq possibilits :
dplacement = ( BX )
dplacement = ( BX ) + octet de dcalage
dplacement = ( BX ) + mot de dcalage
dplacement = ( BP ) + octet de dcalage
dplacement = ( BP ) + mot de dcalage
MOV ES , TABLE [BP]
ralise le transfert de ((BP) + TABLE) vers (ES) dans le segment SS.

R. GRISEL

31

Les modes dadressages avec index


Adressage index (registre d'index : SI et DI)
Le contenu du registre d'index ( SI ou DI ) , auquel est
ventuellement ajout un dcalage sur 8 ou 16 bits sign , reprsente le
dplacement dans le segment DS ( par dfaut ), d'o les six possibilits
suivantes :
dplacement = ( SI )
dplacement = ( SI ) + octet de dcalage
dplacement = ( SI ) + mot de dcalage
dplacement = ( DI )
dplacement = ( DI ) + octet de dcalage
dplacement = ( DI ) + mot de dcalage
MOV VECTEUR[SI] , AL
ralise le transfert de (AL) vers ((SI) + VECTEUR dans le segment DS).

R. GRISEL

32

Adressage bas index


Le dplacement est dtermin par la somme du contenu du registre BX ou BP et dun
des registres dindex SI ou DI, auquel est ventuellement ajout un dcalage sur 8 ou 16 bits
sign. DS et SS sont pris par dfaut.
Base BX : la somme des contenus du registre BX et d'un des registres d'index (SI ou
DI), laquelle est ventuellement ajout un dcalage sur 8 ou 16 bits sign, reprsente le
dplacement dans le segment DS ( par dfaut ) .
Base BP : la somme des contenus du registre BP et d'un des registres d'index (SI ou
DI), laquelle est ventuellement ajout un dcalage sur 8 ou 16 bits sign, reprsente le
dplacement dans le segment SS (par dfaut) .
D'o 12 les possibilits suivantes :
dplacement = ( BX ) + ( SI ),

dplacement = ( BX ) + ( SI ) + octet de dcalage

dplacement = ( BX ) + ( SI ) + mot de dcalage, dplacement = ( BX ) + ( DI )


dplacement = ( BX ) + ( DI ) + octet de dcalage, dplacement = ( BX ) + ( DI ) + mot de dcalage
dplacement = ( BP ) + ( SI ),

dplacement = ( BP ) + ( SI ) + octet de dcalage

dplacement = ( BP ) + ( SI ) + mot de dcalage, dplacement = ( BP ) + ( DI )


dplacement = ( BP ) + ( DI ) + octet de dcalage, dplacement = ( BP ) + ( DI ) +mot de dcalage
XCH SP , TABLE[BP][SI]
ralise le transfert de (SP) vers ((BP)+(SI) + TABLE dans le segment SS), et le transfert de
((BP)+(SI) + TABLE dans le segment SS) vers (SP).

R. GRISEL

33

REMARQUE : Dans tout ce qui prcde, les segments concerns sont ceux par dfaut . Le
programmeur peut rfrencer les dplacements d'autre segments en les citant explicitement
dans les instructions. Les codages de ces dernires occupent alors un octet supplmentaire .
Exemple :
MOV AX , [BX] ralise (AX) <-- ((BX) dans le segment DS )
Le segment DS est concern par dfaut .
Alors que :
MOV AX , ES:[BX] ralise (AX) <-- ((BX) dans le segment ES )
Le segment ES est cit explicitement .
Les contenus des registres de segments ( CS , DS , SS , ES ) peuvent tre
transfrs dans un registre de travail, ou en mmoire adresse par l'un des modes dcrits.
L'inverse n'est possible que sur DS, SS et ES. CS ne peut tre modifi que par un saut inter
segment du programme. Le tableau suivant donne une rcapitulation des modes d'adressage
cits.

R. GRISEL

34

Les modes d adressages


Type
d'adressage

Obtention du dplacement
dans le segment

Segment concern
par dfaut

Direct

donn directement par le programme

DS

Bas

(BX)
(BX) + dcalage (octet ou mot)
(BP) + dcalage (octet ou mot)

DS
DS
SS

Index

(SI)
(SI) + dcalage (octet ou mot)
(DI)
(DI) + dcalage (octet ou mot)

DS
DS
DS
DS

(BX) + (SI)
(BX) + (SI) + dcalage (octet ou mot)
(BX) + (DI)
Bas index (BX) + (DI) + dcalage (octet ou mot)
(BP) + (SI)
(BP) + (SI) + dcalage (octet ou mot)
(BP) + (DI)
(BP) + (DI) + dcalage (octet ou mot)

DS
DS
DS
DS
SS
SS
SS
SS

R. GRISEL

35

L adressage des entres-sorties


Les entres sorties sont situes dans un espace d'adressage
indpendant de la mmoire. Iles ne font l'objet d'aucune segmentation. Deux
possibilits sont utilises.
Adressage direct :
l'adresse du port est donne directement par le programme. On
n'accde qu'aux 256 premiers octets, ou aux 128 premiers mots d'entres
sorties.
IN AX , 0A8H
OUT 0A8H , AL
Adressage par registre :
l'adresse du port est contenue dans le registre DX. On accde alors
aux 64 Ko, 32 K-mots, d'entres sorties .
OUT DX , AL
IN AX , DX
R. GRISEL

36

FFFFFH
RESERVE
UTILISE

FFFFCH
FFFFBH
FFFF0H
FFFEFH

FFFFH
LIBRE

LIBRE
80H
7FH
RESERVE

UTILISE

14H
13H
0H

Mmoire

RESERVE
LIBRE

100H
FFH
F8H
F7H
0H

I/O

R. GRISEL

37

Ladressage des sauts de programme

Les instructions du programme sont pointes par le pointeur d'instruction IP dans le


segment CS .
Deux catgories de saut sont distinguer :
- saut l'intrieur du mme segment , dit intra-segment : CS n'est pas
modifi .
- saut l'extrieur du segment , dit inter-segment : CS est modifi.

R. GRISEL

38

L adressage des sauts de programme


Saut intra-segment :
Saut conditionnel : L'adressage est dit relatif au pointeur d'instruction : cela
consiste ajouter au pointeur d'instruction IP un nombre de 8 bits , dont le
signe est tendu sur 16 bits. Ce nombre est le dplacement dans le
programme ( pas dans le segment ). Ce genre est limit :
- 127 octets en avant ,
- 128 octets en arrire .
Exemple :
- JBE INF_EGAL
- JNA NON_SUP
- JE EQUAL
Saut inconditionnel : Le saut peut aussi tre inconditionnel. Dans ce cas,
l'adressage est soit relatif, soit indirect. Dans le cas du relatif, le nombre
ajout au pointeur d'instruction est un octet, ou un mot, qui permet alors de
couvrir tout le segment.

R. GRISEL

39

15

15

Pointeur d'instruction IP

8 7
Extension de signe

15

Pointeur d'instruction IP

15

Dplacement dans
le programme
0

15

0
Dplacement dans le programme
0

15
Nouveau pointeur d'instruction IP

Nouveau pointeur d'instruction IP

JMP NEAR-LABEL
( +32767 -32768 octets )

JMP SHORT NEAR-LABEL


( +127 -128 octets )

Pour lindirect, le pointeur d'instruction est charg par un nombre de 16 bits.


Ce nombre est soit le contenu de l'un des registres de travail 16 bits, soit le
contenu d'un mot mmoire adress par l'un des modes d'adressage dcrit
prcdemment.
JMP AX
JMP TABLE[BX]

R. GRISEL

40

L adressage des sauts de programme (2)


Saut inter-segment :
Ce saut est exclusivement inconditionnel. L'adressage doit fournir les
valeurs charger dans le pointeur d'instruction IP et dans le registre de
segment CS. Il peut tre direct ou indirect.
Adressage direct
Le dplacement (destin IP) et le segment (destin CS) sont
donns directement par le programme .
- JMP addr; addr sur 4 octets.
- JMP FAR_LABEL
Adressage indirect
Le dplacement et les segments sont les contenus de deux mots
mmoires conscutifs . L'adressage se fait par l'un des modes dcrits pour
l'adressage de la mmoire.
- JMP DWORD PTR [BP][DI]

R. GRISEL

41

La pile
La pile est implante dans l'espace mmoire . Elle est pointe par le registre
SP dans le segment SS exclusivement .
Les donnes empiler ou dpiler sont uniquement des mots . La
provenance ou la destination est un registre ou un emplacement mmoire
adress par l'un des modes dcrit prcdemment . La pile se remplie par
adresses dcroissantes et se vide par adresses croissantes. L'instruction
suivante : PUSH TABLE[DI], ralise :
(SP) <-- (SP)-2 , ((SP) dans le seg SS )<-- ((DI)+TABLE dans le seg DS)
POP TABLE[DI] (SP = SP + 2), ralise lopration de rcupration
La pile sera traite avec plus de dtails dans le chapitre rserv la
" PROGRAMMATION DU 8086".

R. GRISEL

42

Les sous-programmes
Les sous programmes
Les possibilits d'adressage des sous programmes sont les
mmes que celles des sauts inconditionnels intra-segments ou intersegments .
Lors de l'criture d'un sous programme, le programmeur doit tre
attentif au point suivant :
- sous programme intra-segment : le pointeur d'instruction IP est
plac dans la pile avant le saut. A la fin du sous programme l'instruction
RET restaure IP .
- sous programme inter segment : le pointeur d'instruction IP, puis
le registre de segment CS, sont placs dans la pile avant le saut . A la fin du
sous programme, l'instruction RET, diffrente de la prcdente bien
qu'ayant le mme nom, restaure IP et CS .
Le programmeur doit dclarer un sous programme inter segment
ou intra segment, pour que l'assembleur puisse coder correctement
l'instruction RET. (Voir chapitre Pragrammation du 8086).

R. GRISEL

43

Systmes multiprocesseurs
Lecture d'un registre
smaphore par le
processeur 1
Prise du bus par le processeur 2
non

bit smaphore
=0?
oui

Lecture du mme
registre d'tat

Mise un du bit
smaphore

Accession la
ressource

non

bit smaphore
=0?
oui
Mise un du bit
smaphore

Accession la
ressource

R. GRISEL

44

Instructions du 8086
Transfert de donnes
- MOV
- POP
- OUT
Instructions arithmtiques
- ADD
- DIV
- MUL
Instructions logiques
- OR
- AND
- DEC
Dcalages et rotations
- ROL
- RCL
- SAL

R. GRISEL

Instructions de branchement
- JMP
- CALL
- JCXZ
Manipulations de caractres
- REP MOVS
- REP MOVSB
- REP MOVSW
Instructions de commande
- INT N
- STI
- CLI
Remarque
Un ou plusieurs indicateurs
dtat peuvent tre affects par
lexcution de ces instructions.
45

Vous aimerez peut-être aussi