A-Préliminaires B - Présentation de CPU 8086 C - Registres de CPU 8086 Icroprocesseur (CPU) 8086

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 34

Architecture étudiée : Microprocesseur (CPU) 8086

A- Préliminaires
B- Présentation de CPU 8086
C- Registres de CPU 8086
B-1- Les registres généraux
B-2- Les registres d'adressage
B-3- Les registres de segment
B-4- Le registre d'état
D- Gestion de la mémoire par CPU 8086
1
Préliminaires

Types de données fondamentaux

2
Préliminaires
Représentation et stockage en mémoire

3
Microprocesseur 8086

L'architecture de 8086 est little-endian.

Le microprocesseur 8086 se présente sous la


forme d'un boîtier contenant des circuits
intégrés qui dispose de sorties pour se
connecter à un environnement externe.

Comme tout CPU le 8086 dispose d'un certain


nombre de registres.

4
Représentations interne d’un 8086

5
Microprocesseur 8086

L'unité d'interface de bus (BIU) recherche les


instructions en mémoire et les range dans une file
d'attente.

L'unité d'exécution (EU) exécute les instructions


contenues dans la file d'attente.

Les deux unités fonctionnent simuiltanément.

6
Registres du CPU 8086

Un registre est un composant de mémoire


interne au microprocesseur dont sa capacité
est calibrée sur une taille des instructions.

Le rôle du registre est de stocker des adresses


ou des résultats intermédiaires des calculs en
cours.

Les commandes de l'assembleur manipulent les


registres. Pour les contrôler et les utiliser
chaque registre dispose d’un nom.

7
Registres du CPU 8086

Le 8086 comprend 3 groupes de 4 registres de 16 bits,


un registre d'état de 9 bits et un compteur programme
de 16 bits non accessible par l'utilisateur.

8
Registres : Les registres généraux :
Groupe de données:
AX : Registre accumulateur
BX : Registre d'adresses de base
CX : Registre compteur
DX : Registre de données

Ces registres sont destinés au traitement des valeurs. Ils


permettent d’effectuer des additions, des
multiplications, des calculs logiques,

9
Utilités des registres généraux
Si nous manipulons des nombres codés sur 16 bits (1 mot
mémoire), nous utilisons 4 registres généraux:

AX sert à effectuer des calculs arithmétiques.


BX sert à effectuer des calculs arithmétiques ou bien des
calculs sur les adresses.
CX utilisé généralement comme compteur dans des boucles.
DX sert à stocker des données destinées à des fonctions.

Il s'agit là de l'utilisation de base de ces registres, mais dans


la pratique ils peuvent être utilisés à d'autres fins.
Utilités des registres généraux

Si nous manipulons des nombres codés sur 8 bits (1


octet), nous utilisons les 4 registres généraux en
mode 8 bits pour en produire 8 registres AH, AL,
BH, BL, CH, CL, DH et DL avec comme convention,
H est mis pour "High" et L pour "Low" :

Exemples:
AH contient l'octet de poids fort du registre AX.

BH contient l'octet de poids fort du registre BX.


Les registres d'adressage ( d'offset )
Ces registres de 16 bits permettent l'adressage d'un
opérande à l'intérieur d'un segment de 64 ko (2 16
positions mémoires).
Il forment 2 groupes:
- Registres d'index : SI et DI
- Registres pointeurs : SP et BP
Registres d'index

Dans les instructions de mouvements de chaînes


d'octets, on utilise les registres SI et DI:

SI : indexe les caractères de la chaîne émettrice.


DI : indexe les caractères de la chaîne réceptrice.
Registres pointeurs

Une pile est une zone mémoire qui permet de conserver de manière
temporaire des données (par exemple, l’état des registres lors d’un
appel de procédure). Elle est organisée comme une pile d’assiettes.
On pose et on retire les assiettes toujours sur le haut de la pile. On dit
que c’est une pile LIFO (Last IN, First Out).
Empiler une donnée : sauvegarder une donnée sur (le sommet) de la pile
Dépiler une donnée : retirer une donnée (du sommet) de la pile
Nous utilisons 2 registres pointeurs:

SP (Stack Pointer) pointe sur le sommet de la pile et se met à jour


automatiquement par les instructions d'empilement et de dépilement.

BP (Base Pointer) pointe la base de la région de la pile contenant les


données accessibles (variables locales, paramètres,...) à l'intérieur
d'une procédure.

14
Registres de segment
Une instruction dans le CPU est composée de
plusieurs segments. Un segment qui
désigne le code du programme, un segment
qui désigne les données, un segment qui
désigne l’organisation des appels, ….. Une
instruction contient donc tous ses
segments, mais sous forme d’adresse
pointant vers la mémoire. Pour accéder à sa
mémoire centrale, le 80x86 dispose de
registres de segment suivants:
Registres de segment

CS (Code Segment) pointe sur la base du segment qui


contient le code (les instructions que doit exécuter le
processeur).

DS (Data Segment) pointe sur la base du segment contenant


les données (variables, tableaux ...).

SS (Stack Segment) pointe sur la base du segment qui


contient la pile gérée par les registres SP et BP.

ES (Extra Segment) pointe sur la base d'un segment


supplémentaire qui est généralement utilisé pour compléter le
segment de données.

16
Registres de segment

17
Le registre IP

Le  registre  IP  :  pointeur  d’instruction  (compteur  de 


programme). Il contient l'adresse de l'emplacement 
mémoire  où  se  situe  la  prochaine  instruction  à 
exécuter.  Autrement  dit,  il  doit  indiquer  au 
processeur  la  prochaine  instruction  à  exécuter.  Le 
registre  IP  est  constamment  modifié  après 
l'exécution  de  chaque  instruction  afin  qu'il  pointe 
sur l'instruction suivante.

  18
Le registre Flag
Le registre d'état (Flag) : indique l’état de CPU

C'est un registre 16 bits, chaque bit s'appelle un
flag (ou un indicateur) et peut prendre la valeur 1 ou 0.

Il  sert  à  contenir  l'état  de  certaines  opérations 


effectuées par le processeur. Par exemple, quand le 
résultat  d'une  opération  est  trop  grand  pour  être 
contenu  dans  le  registre  cible,  un  bit  spécifique  du 
registre  d'état (le bit OF) est mis  à 1 pour indiquer le 
débordement. 

19
Le registre Flag

20
CARRY Flag : ce flag est positionné à « 1 »
lorsque on a un débordement (retenue).

21
PARITY Flag : si le résultat de l'opération contient
un nombre pair de 1 alors PF=1 sinon PF=0.

AUXILLIARY Flag : ce flag est à « 1 » lorsqu'un


débordement a lieu de demi-mot de 8 bits ou 16
bits.

ZERO Flag : ce flag est à « 1 » lorsque tous les


bits d’un mot sont à « 0 », c à d si le résultat
d'une opération est égale à 0 (soustraction,
comparaison…) alors ZF=1 sinon ZF=0.

22
SIGN Flag : SF est positionné à 1 si le bit de
poids fort du résultat d'une addition ou
soustraction est 1 ; sinon SF=0. SF est
utile lorsque l'on manipule des entiers
signés, car le bit de poids fort donne alors
le signe du résultat. Exemples (sur 8 bits):

23
OVERFLOW Flag: ce flag est à « 1 »
lorsqu'on a un débordement signé.

24
Direction Flag : pour auto incrémenter ou auto
décrémenter le SI et le DI. Ce flag est utilisé par
quelques instructions pour traiter les chaînes de
données, lorsque ce drapeau est placé à 0, la chaîne
est traitée octet par octet en incrémentant, lorsque ce
drapeau est placé à 1, la chaîne est traitée octet par
octet en décrémentant. Autrement dit DF indique le
sens de progression des registres d'index SI et DI lors
des instructions de traitements de chaînes. DF=1
adresses décroissantes, DF=0 adresses croissantes

TRACE Flag : ce bit est à « 1 » signifie que l’exécution


est en mode pas à pas (STEP BY STEP).

25
Interrupt Flag: pour masquer les interruptions venant
de l'extérieur, ce bit est mis à 0, dans le cas
contraire le microprocesseur reconnaît
l'interruption de l'extérieur.

Interruption : un événement extérieur qui demande


l'attention de l'ordinateur, par exemple la pression
d'une touche du clavier. La machine doit pouvoir
réagir immédiatement, sans attendre que le
programme en cours d'exécution se termine. Pour
cela, elle interrompt ce dernier pendant un bref
instant, le temps de traiter l'événement survenu puis
rend le contrôle au programme interrompu.

26
Gestion de la mémoire par CPU 8086

Votre PC est conçu pour gérer 1 Mo (soit


2^20 octets) de mémoire vive en mode réel.
Il faut donc 20 bits au minimum pour
adresser toute la mémoire. Or en mode réel
les bus d'adresses n'ont que 16 bits. Ils
permettent donc d'adresser 2^16 = 65536
octets = 64 Ko, ce qui est insuffisant !

27
L'espace mémoire est divisé en segments. Un
segment est une zone mémoire de 64 ko definie par
son adresse de départ ( doit être un multiple de 16).

Dans une telle adresse les 4 bits de poids faible sont


à 0.

Ainsi,on peut représenter l'adresse d'unsegment en


utilisant seulement ses 16 bits de poids fort (pour
désiger une case mémoire dans un segment, il
suffit une valeur sur 16 bits).

28
Pour adresser une case mémoire, on utilise
deux nombres. Le premier est appelé
adresse de segment, le second adresse
d'offset.

29
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 (elle
correspond à la valeur envoyée réellement
sur le bus d'adresse ).

30
Correspondance entre adresse logique et adresse physique

Ainsi : Adresse Physique= 16 x segment + offset

31
A un instant donné, le CPU 8086 a accès à 4 segments
dont les adresses sont stockées dans les registres de
segment:

32
Le registre CS est associé au registre IP.
Ainsi, la prochanie instruction à exécuter a l'adresse
logique CS:IP

33
On vous donne la mémoire accessible par le 8086 à un instant

On suppose que les


contenus des registres
après un RESET sont:
IP=0000H
CS=FFFFH
DS=0000H
ES=0000H
SS=0000H

Donner l'adresse logique


de l'instruction à
exécuter. Déduire son
adresse physique.

34

Vous aimerez peut-être aussi