Vous êtes sur la page 1sur 192

Université Mohamed Premier

Faculté des Sciences et Techniques – Al Hoceima

Master Systèmes Embarqués & Robotique

MICROPROCESSEUR

Élaboré par: M. Nabil BENAYA

2017-2018
Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs
III. Les mémoires
IV. Le microprocesseur Intel 8086
V. La pile et ses utilisations
VI. Les interruptions
VII. Les interfaces d’entrées/sorties
VIII. Initiation à la programmation
Conclusion
Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs
III. Les mémoires
IV. Le microprocesseur Intel 8086
V. La pile et ses utilisations
VI. Les interruptions
VII. Les interfaces d’entrées/sorties
VIII. Initiation à la programmation
Conclusion
Microprocesseur - Historique et évolution..

Les microprocesseurs hier, aujourd’hui et …demain ?

ƒ Au niveau technologique (commutateur):


Tubes à vide (1904) → transistor (années 20-30)
semi-conducteur/65nm → nanotechnologies (1 à 0.1nm)

En 1904, l'invention du tube à vide électronique permit la


construction du premier élément indispensable à la fabrication
d'un ordinateur. D'abord utilisé comme amplificateurs, ces tubes
en 1940 virent leur fonction de commutateur symboliser le codage
binaire. Les données étaient introduites à l'aide de cartes perforées
et les différentes parties du système étaient connectées
manuellement à l'aide de câbles. Leur programmation était très
lente : il fallait parfois plusieurs jours pour seulement 5 minutes de
fonctionnement.
Microprocesseur - Historique et évolution..

Les microprocesseurs hier, aujourd’hui et …demain ?

ƒ Au niveau de la mémoire:
1 Ko (en 1970) → quelques GO (230)
Une faune variée: mémoire externe(flash),
mémoire centrale(RAM), mémoire cache (de
plusieurs niveaux différents)

ƒ cache de premier niveau (L1) dans les processeurs (cache de


données souvent séparé du cache d'instructions);
ƒ cache de second niveau (L2) dans certains processeurs (peut se
situer hors de la puce) ;
ƒ cache de troisième niveau (L3) rarement (sur la carte mère).
Microprocesseur - Historique et évolution..

Les microprocesseurs hier, aujourd’hui et …demain ?

ƒ Au niveau de l’architecture:
Du modèle Von Neumann → architectures plus
parallèles (pipeline?, super scalaire?, multi cœur?)

Modèle Von Neumann (programmes et données en mémoire)


vers des structures plus parallèles. Le modèle de Von Neumann
décompose l’ordinateur en 4 parties distinctes:
L’unité arithmétique et logique;
L’unité de contrôle;
La mémoire;
Les entrée-sortie.
Ceci est le modèle utilisé pour les PC par exemple, il existe pour les
calculs plus important des modèle d'architecture parallèle.
Microprocesseur - Historique et évolution..

L'histoire des microprocesseurs est intimement liée à celle


de la technologie des semi-conducteurs dont voici les
principales étapes :

- 1947 Invention du transistor


- 1958 TEXAS INSTRUMENTS produit le ler circuit intégré (CI)
- 1961 Mise au point des technologies bipolaires TTL et ECL
- 1964 Intégration à petite échelle (SSI de 1 à 10 transistors)
- 1965 Intégration à moyenne échelle (MSI de 10 à 500 transistors)
- 1970 Mise au point de la technologie MOS
- 1971 Intégration à grande échelle (LSI de 500 à 20 000 transistors)
- 1985 Intégration à très grande échelle (VLSI plus de 20 000
transistors)
Microprocesseur - Historique et évolution..
Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs

II. Généralités sur les microprocesseurs


1. Structure d’un système à microprocesseur
2. Architecture d’un microprocesseur
III. Les mémoires
IV. Le microprocesseur Intel 8086
V. La pile et ses utilisations
VI. Les interruptions
VII. Les interfaces d’entrées/sorties
VIII. Initiation à la programmation
Conclusion
Généralités - Structure d’un système à microprocesseur
Structure d’un calculateur

L’élément de base d’un calculateur est constitué par l’unité centrale de


traitement (UCT, CPU : Central Processing Unit).
Généralités - Structure d’un système à microprocesseur
Structure d’un calculateur

L’UCT est constituée :


• d’une unité arithmétique et logique (UAL, ALU : Arithmetic and
Logic Unit) : c’est l’organe de calcul du calculateur ;
• de registres : zones de stockage des données de travail de
l’UAL(opérandes, résultats intermédiaires) ;
• d’une unité de contrôle (UC, CU : Control Unit) : elle envoie les
ordres (ou commandes) à tous les autres éléments du calculateur afin
d’exécuter un programme.
Généralités - Structure d’un système à microprocesseur
Structure d’un calculateur

La mémoire centrale contient :


• le programme à exécuter : suite d’instructions élémentaires ;
• les données à traiter.

L’unité d’entrées/sorties (E/S) est un intermédiaire entre le calculateur et


le monde extérieur.
Généralités - Structure d’un système à microprocesseur
Structure d’un calculateur

L’unité de transfert est le support matériel de la circulation des


données. Les échanges d’ordres et de données dans le calculateur sont
synchronisés par une horloge qui délivre des impulsions (signal
d’horloge) à des intervalles de temps fixes.
Généralités - Structure d’un système à microprocesseur
Structure d’un calculateur

Microprocesseur ???

Un microprocesseur consiste en une unité centrale de traitement


(UAL + registres + unité de contrôle) entièrement contenue dans un seul
circuit intégré. Un calculateur construit autour d’un microprocesseur est
un microcalculateur ou un microordinateur.

Remarque:
Un circuit intégré qui inclut une UCT, de la mémoire et des
périphériques est un microcontrôleur.
Généralités - Structure d’un système à microprocesseur
Organisation de la mémoire centrale

La mémoire peut être vue comme un ensemble de cellules ou


cases contenant chacune une information : une instruction ou une
donnée. Chaque case mémoire est repérée par un numéro d’ordre
unique : son adresse.
Généralités - Structure d’un système à microprocesseur
Organisation de la mémoire centrale

Q: Combien faut-il de fils pour composer l’adresse en binaire?


R: 4 fils car 16=24 . C’est le bus d’adresse.

Un ensemble de 4 fils généralement


partagé entre plusieurs dispositifs
Généralités - Structure d’un système à microprocesseur
Organisation de la mémoire centrale

Q : Où peut on récupérer la donnée existante dans la case désignée par


l'adresse ?
R : sur 8 fils s'appelant le bus de données.
Généralités - Structure d’un système à microprocesseur
Circulation de l’information dans un calculateur

La réalisation matérielle des ordinateurs est généralement basée


sur l’architecture de Von Neumann :

Le microprocesseur échange des informations avec la mémoire et


l’unité d’E/S, sous forme de mots binaires, au moyen d’un ensemble
de connexions appelé bus. Un bus permet de transférer des données
sous forme parallèle, c’est-à-dire en faisant circuler n bits
simultanément.
Généralités - Structure d’un système à microprocesseur
Circulation de l’information dans un calculateur

Les microprocesseurs peuvent être classés selon la longueur


maximale des mots binaires qu’ils peuvent échanger avec la mémoire
et les E/S : microprocesseurs 8 bits, 16 bits, 32 bits, ...

Remarque : Les bus de données et de commande sont bidirectionnels, le


bus d’adresse est unidirectionnel; seul le microprocesseur peut délivrer des
adresses.
Généralités - Structure d’un système à microprocesseur
Circulation de l’information dans un calculateur

ƒ Bus d’adresses permet au microprocesseur de spécifier


l’adresse de la case mémoire à lire ou à écrire ;

ƒ Bus de données permet les transferts entre le microprocesseur


et la mémoire ou les E/S ;

ƒ Bus de commande transmet les ordres de lecture et d’écriture


de la mémoire et des E/S.
Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

Un microprocesseur se présente sous la forme d’un circuit intégré


muni d’un nombre généralement important de broches.

• Intel 8085, 8086, Zilog Z80 : 40 broches, DIP (Dual In-line


Package) ;

• Motorola 68000 : 64 broches, DIP ;

• Intel 80386 : 196 broches, PGA (Pin Grid Array).

Technologies de fabrication : NMOS, PMOS, CMOS.


Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

On peut représenter un microprocesseur par son schéma fonctionnel :


Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

On peut représenter un microprocesseur par son schéma fonctionnel :


Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

Unité Arithmétique et Logique:


C'est un circuit combinatoire. Il réalise les opérations arithmétiques et
logiques.
Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

Unité de Contrôle:
Elle gère toutes les opérations qui concourent à la réalisation d'une
instruction.
Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

Unité de Contrôle:
Ex: L'instruction "Lire la case d'adresse 12" est exécutée par l’UC de la manière suivante :
1.Placer 12 sur le bus d'adresse
2.Attendre la donnée de la mémoire
3.Lire la donnée du bus de données
4.Charger la valeur lue dans le registre demandé.

Chacune de ces opérations s'appelle une micro-instruction.


Généralités - Architecture d’un microprocesseur
Description matérielle d’un microprocesseur

Registres:
Ce sont des mémoires internes. Indispensables au fonctionnement
du microprocesseur, ils permettent notamment le stockage des
opérandes, des résultats, des pointeurs d'adresse, ...
Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs

III. Les mémoires


1. Types de mémoires
2. Schéma fonctionnel d’une mémoire
3. Interfaçage microprocesseur/mémoire
4. Connexion avec plusieurs boîtiers mémoire
5. Classification des mémoires
IV. Le microprocesseur Intel 8086
……
Conclusion
Généralités – ROM & RAM

Types de mémoires

Deux types de mémoires :

Mémoires vives (RAM : Random Access Memory) ou mémoires

volatiles.

¤ Elles perdent leur contenu en cas de coupure d’alimentation.

¤ Elles sont utilisées pour stocker temporairement des données et

des programmes.

¤ Elles peuvent être lues et écrites par le microprocesseur ;


Généralités – ROM & RAM
Types de mémoires

Deux types de mémoires :


Mémoires mortes (ROM : Read Only Memory) ou mémoires non
volatiles.
¤ Elles conservent leur contenu en cas de coupure d’alimentation.
¤ Elles ne peuvent être que lues par le microprocesseur (pas de
possibilité d’écriture).
¤ On les utilise pour stocker des données et des programmes de
manière définitive.

Rq: Les mémoires sont caractérisées par leur capacité : nombre total
de cases mémoire contenues dans un même boîtier.
Généralités – Schéma fonctionnel

Le nombre de lignes d’adresses dépend de la capacité de la


mémoire : n lignes d’adresses permettent d’adresser 2n cases mémoire.
8 bits d’adresses permettent d’adresser 256 octets.

Exemple : mémoire RAM 6264, 13 broches d’adresses (A0 à A12)


213 = 8192 = 8 Ko.
Généralités – Interfaçage
Interfaçage microprocesseur/mémoire
Généralités – Interfaçage
Interfaçage microprocesseur/mémoire

Représentation condensée (plus pratique)


Généralités – Interfaçage
Lecture/Écriture en mémoire

Une caractéristique importante des mémoires est leur temps


d’accès : c’est le temps qui s’écoule entre l’instant où l’adresse de la
case mémoire est présentée sur le bus d’adresses et celui où la
mémoire place la donnée demandée sur le bus de données.
Généralités – Interfaçage
Lecture/Écriture en mémoire

Le temps d’accès varie entre 50 ns (mémoires rapides) et 300 ns


(mémoires lentes).
Généralités – Interfaçage
Lecture/Écriture en mémoire

Si le temps d’accès d’une mémoire est supérieur à une période


d’horloge (mémoire lente), le microprocesseur peut accorder à la
mémoire un temps supplémentaire (une ou plusieurs périodes
d’horloge), à la demande de celle-ci. Ce temps supplémentaire
est appelé temps d’attente (wait time : TW)
Généralités – Interfaçage
Lecture/Écriture en mémoire

Opérations pour écrire :


– Charger dans le RAM (Registre d’adresse Mémoire) l’adresse du mot ou se fera
l’écriture.
– Placer dans le RIM (Registre d’information mémoire) l’information à écrire.
– Lancer la commande d’écriture pour transférer le contenu du RIM dans la
mémoire .
Généralités – Connexion de plusieurs mémoires

Les boîtiers mémoire possèdent une broche notée CS : Chip Select.

Lorsque cette broche est active (état bas), le circuit peut être lu ou écrit.

Lorsqu’elle est inactive( état haut), le circuit est exclu du service : ses
broches de données D0 à D7 passent à l’état de haute impédance : tout
se passe comme si la mémoire était déconnectée du bus de données du
microprocesseur, d’où la possibilité de connecter plusieurs boîtiers
mémoire sur un même bus : un seul signal CS doit être actif à un
instant donné pour éviter les conflits entre les différents boîtiers.
Généralités – Connexion de plusieurs mémoires
Connexion de trois boîtiers mémoire d’une capacité de 8 Ko
chacun (13 lignes d’adresses) sur un bus d’adresse de 16 bits :
Généralités – Connexion de plusieurs mémoires

Dans un même boîtier, une case mémoire est désignée par les bits
d’adresses A0 à A12 :
Généralités – Connexion de plusieurs mémoires

Pour atteindre la mémoire n° 1, il faut mettre à 1 le bit A13 et à 0 les bits


A14 et A15. La plage d’adresses occupée par cette mémoire est donc :
Généralités – Connexion de plusieurs mémoires

De même, pour la mémoire n°2, on doit avoir A13 = 0, A14 = 1 et A15 = 0


d’où la plage d’adresses occupée cette mémoire :
Généralités – Connexion de plusieurs mémoires

Pour la mémoire n° 3, on doit avoir A13 = 0, A14 = 0 et A15 = 1 d’où la


plage d’adresses occupée cette mémoire :
Généralités – Connexion de plusieurs mémoires
On en déduit la cartographie ou mapping de la mémoire visible
par le microprocesseur :
Généralités – Décodage d’adresses

Les trois bits A13, A14 et A15 utilisés précédemment fournissent


en fait 8 combinaisons, de 000 à 111, d’où la possibilité de connecter
jusqu’à 8 boîtiers mémoire de 8 Ko sur le bus.

La mémoire totale implantée devient donc de 8 × 8 Ko = 64 Ko :


valeur maximale possible avec 16 bits d’adresses.

Solution: Utilisation d’un circuit de décodage d’adresses.


Généralités – Décodage d’adresses

Décodeur 3 vers 8:
Généralités – Décodage d’adresses

Décodeur 3 vers 8:

Table de vérité du décodeur


Mapping de la mémoire
Généralités – classification des mémoires

Jusqu’à la fin des années 1970 mémoires à tores magnétiques,


lentes et de faibles capacités.

Actuellement Que des mémoires à semi-conducteurs.


Généralités – classification des mémoires

• ROM : Read Only Memory.


Mémoire à lecture seule, sans écriture. Son contenu est
programmé une fois pour toutes par le constructeur.
Avantage : faible coût.
Inconvénient : nécessite une production en très grande quantité.

• PROM: Programmable Read Only Memory.


ROM programmable une seule fois par l’utilisateur (ROM OTP :
One Time Programming) en faisant sauter des fusibles.
Nécessite un programmateur spécialisé : application d’une
tension de programmation (21 ou 25 V) pendant 20 ms.
Généralités – classification des mémoires

• EPROM : Erasable PROM, appelée aussi UVPROM.


ROM programmable électriquement avec un programmateur et
effaçable par exposition à un rayonnement ultraviolet pendant
30 minutes.
Famille 27nnn, exemple : 2764 (8 Ko), 27256 (32 Ko).
Avantage : reprogrammable par l’utilisateur.
Généralités – classification des mémoires

• EEPROM : Electrically Erasable PROM.


ROM programmable et effaçable électriquement.
Lecture à vitesse normale (≤ 100 ns).
Écriture (= effacement) très lente (≈ 10 ms).

Application : les EEPROM contiennent des données qui peuvent


être modifiées de temps en temps, exemple : paramètres de
configuration des ordinateurs.

Avantage : programmation sans extraction de la carte et sans


programmateur.
Inconvénient : coût élevé.
Généralités – classification des mémoires

• SRAM : Static Random Access Memory.


Mémoire statique à accès aléatoire, à base de bascules à semi-
conducteurs à deux états (bascules RS).
Famille 62nnn, exemple : 62128 (16 Ko).

Avantage : très rapide, simple d’utilisation.


Inconvénient : compliqué à réaliser.
Généralités – classification des mémoires

• DRAM : Dynamic RAM.


Basée sur la charge de condensateurs : condensateur chargé = 1,
condensateur déchargé = 0.

Avantage : intégration élevée, faible coût.


Inconvénient : nécessite un rafraîchissement périodique à cause
du courant de fuite des condensateurs.

Application : réalisation de la mémoire vive des ordinateurs


(barettes mémoire SIMM : Single In-line Memory module).
Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs
III. Les mémoires

IV. Le microprocesseur Intel 8086


1. Caractéristiques du 8086
2. Architecture interne du 8086
3. Organisation de l’espace mémoire
4. Les registres du 8086
5. Les modes d’adressage
6. Les instructions de la famille 8086
V. La pile et ses utilisations
……
Conclusion
µP 8086 – Caractéristiques
- Microprocesseur 16 bits.
- Capacité d'adressage de 1 Mo
- Capacité d'adressage étendue (24 modes).
- 14 registres internes de 16 bits
- Bus d’adresses et de données sont multiplexés.
- Espace mémoires des E/S est séparé du reste de la mémoire.
- Totalement compatible avec le microprocesseur 8088.
- Opérations sur des bits, des octets, des mots et des chaînes de
caractères.
- Arithmétique signée ou non signée.
- Arithmétique binaire ou BCD, sur 8 ou 16 bits.
µP 8086 – Architecture interne

Le microprocesseur Intel
8086 est un microprocesseur
16 bits, apparu en 1978.

C’est le premier
microprocesseur de la
famille Intel 80x86 (8086,
80186, 80286, 80386, 80486,
Pentium, ...).

Il se présente sous la
forme d’un boîtier DIP
(Dual In-line Package) à 40
broches.
µP 8086 – Architecture interne
Représentation fonctionnelle
µP 8086 – Architecture interne (Signaux)

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.

RESET : entrée de remise à zéro du microprocesseur. Lorsque cette


entrée est mise `a l’état haut pendant au moins 4 périodes d’horloge,
le microprocesseur est réinitialisé : il va exécuter l’instruction se
trouvant `a 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.
µP 8086 – Architecture interne (Signaux)

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. Ce mode permet de réaliser des systèmes
multiprocesseurs.

NMI et INTR : entrées de demande d’interruption. INTR :


interruption normale, NMI (Non Maskable Interrupt) : interruption
prioritaire.
µP 8086 – Architecture interne (Signaux)

INTA : Interrupt Acknowledge, indique que le microprocesseur


accepte l’interruption.

HOLD et 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.
µP 8086 – Architecture interne (Signaux)
AD0 à AD15 : 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`u 220 = 1 Mo d’espace mémoire


adressable par le 8086.
µP 8086 – Architecture interne (Signaux)

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).

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 :
• DT/R = 1 : données émises par le microprocesseur (écriture) ;
• DT/R = 0 : données reçues par le microprocesseur (lecture).
µP 8086 – Architecture interne (Signaux)

Les signaux DEN et DT/R sont utilisés pour la commande de


tampons de bus (buffers) permettant d’amplifier le courant fourni
par le microprocesseur sur le bus de données.

Exemples de tampons de bus : circuits transmetteurs bidirectionnels 8286 ou


74245.
µP 8086 – Architecture interne (Signaux)
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 Kmots 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.
µP 8086 – Architecture interne (Signaux)

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 :
µP 8086 – Architecture interne
Représentation interne

Registres généraux
Registres de segments

Registres d’adressage

Registre temporaire Pointeur d’instruction

Registre d’état
µP 8086 – Architecture interne
Représentation interne

Le 8086 se compose de deux unités de traitement séparées : l'unité


d'interface de bus (BIU) et l'unité d'exécution (EU)

L'unité d'exécution comporte l'UAL, les registres généraux (AX, BX,


CX, DX), les registres d'adressage (SP, BP, SI, DI), le registre d'état
(Flags) et le décodeur d'instructions.

L'unité d'interface de bus comporte une file d'attente d'instructions


gérée en FIFO, les registres de segments (CS, DS, SS, ES) et le pointeur
d'instruction (IP).
µP 8086 – Architecture interne
Représentation interne

La première machine: L'EU ( Execution Unit, unité d'exécution) lit


les codes opération dans une file d'attente et les exécute. La file
d'attente est alimentée par le BIU (Bus Interface Unit, unité d'interface
de bus) qui constitue la deuxième machine.

Le travail principal de l'UIB, est de chercher les instructions en


mémoire et de les mettre dans la file d'attente.
µP 8086 – Architecture interne
Représentation interne

Le travail du BIU est rompu dans deux cas particuliers:

ƒ Le premier cas est celui où l'UE, exécute une instruction


nécessitant un accès mémoire. Elle demande alors à l'IUB de lire
ou d'écrire une valeur en mémoire.

ƒ Le second cas est celui où l'UE rencontre un déroutement de


programme (jmp / call ...). Le contenu de la file d'attente n'est
plus à jour et l'UE doit demander une réinitialisation à partir de
l'adresse de branchement.
µP 8086 – Architecture interne
Fonctions de l’EU & BIU:

Fonctions:
ƒ Extraire les codes des instructions à partir de la file d'attente et les
exécutent.
ƒ Fournir les adresses des opérandes au BIU en nommant le segment
concerné et en fournissant le déplacement dans ce segment.
ƒ Recevoir et fournir les opérandes au BIU.
µP 8086 – Architecture interne
Fonctions de l’EU & BIU:

Fonctions:
ƒ Chercher les instructions à exécuter de la mémoire et les stocke
dans la file d'attente FIFO.
ƒ Calculer les adresses physiques sur 20 bits.
ƒ Réaliser le transfert des données avec la mémoire.
µP 8086 – Organisation de l’espace mémoire

L’espace mémoire adressable par le 8086 est de:


220 = 1 048 576 octets = 1 Mo (20 bits d’adresses).

Cet espace 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. 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.
µP 8086 – Organisation de l’espace mémoire

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.
µP 8086 – Organisation de l’espace 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.
µP 8086 – Organisation de l’espace mémoire
L’adresse physique se calcule par l’expression :

adresse physique = 16 × segment + offset


µP 8086 – Organisation de l’espace mémoire

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.
µP 8086 – Organisation de l’espace mémoire

Les segments ne sont pas nécessairement distincts les uns des autres,
ils peuvent se chevaucher ou se recouvrir complètement.
µP 8086 – Registres du µP 8086

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


ƒ Les registres de calcul
ƒ Les registres d'adressage
ƒ Les registres de segmentation
ƒ Les registres de contrôle
µP 8086 – Registres généraux ou de calcul
Ce sont les registres AX, BX, CX et DX. Ils sont utilisables dans tout
type de traitement (calcul,stockage temporaire, ...).
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.
µP 8086 – Registres généraux ou de calcul
Le registre AX:
Appelé registre accumulateur. C'est le registre le plus utilisé
implicitement par les instructions du 8086. Il peut être vu sous forme
de deux registres indépendants de taille 8 bits : AL et AH

Le registre BX:
Il est appelé registre de base. Il est utilisé aussi bien pour le calcul
que pour l'adressage. Comme AX, le registre BX est constitué de deux
registres 8 bits : BL et BH.
BX = BH : BL
µP 8086 – Registres généraux ou de calcul

Le registre CX:
C'est le registre compteur. Il est souvent employé d'une manière
implicite par certaines instructions comme compteur (instructions de
boucle, traitement des chaîne des caractères, ...).
CX = CH : CL

Le registre DX:
Appelé registre de donnée, il est utilisé implicitement par certaines
instructions pour stocker des opérandes ou des résultats.
DX = DH : DL
µP 8086 – Registres d’adressage

Quatre Registres de pointeurs et d’index de taille 16 bits :


SI, DI, SP et BP

Registres d’index:
Les registres SI (Source Index) et DI (Destination Index).
Appelés index de source et index de destination respectivement.
Ils sont souvent utilisés dans la gestion des tableaux et des chaînes
de caractères dans la zone mémoire réservée aux données.
µP 8086 – Registres d’adressage

Quatre Registres de pointeurs et d’index de taille 16 bits :


SI, DI, SP et BP
Registres de pointeurs:
Les registres SP (Stack Pointer) et BP (Base Pointer). SP et BP
s'appellent pointeur de pile et pointeur de base respectivement. Ils
servent à la gestion de la pile.
ƒ Registre SP pointe sur le sommet de la pile (la pile est une zone
de sauvegarde de données en cours d’exécution d’un programme).
ƒ Registre BP permet de manipuler les données existantes dans la
pile (paramètres de fonction,variables locales, ...), ainsi, adresser
des données sur la pile.
µP 8086 – Registres de segmentation

Du moment que le 8086 a une architecture 16 bits, les adresses qu'il


gère dans un programme sont aussi exprimées sur 16 bits. Elles
s'appellent les adresses logiques. Ces adresses permettent d'accéder
aux données et aux instructions stockées dans la mémoire principale.

Exemple:
L'instruction : MOV AL,[1000h]
signifie : Charger le registre AL par le contenu de l'octet d'adresse
1000h (1000h est une adresse logique exprimée sur 16 bits).
µP 8086 – Registres de segmentation

L'adresse logique permet d'accéder uniquement à un espace de 216=


64 Ko, alors que le 8086 peut adresser jusqu'à 1 Mo de mémoire (20
lignes d'adresse).
Les registres de segmentation ont été spécialement créés pour étendre
l'adresse logique à 20 bits.
µP 8086 – Registres de segmentation
Le 8086 dispose de 4 registres de segmentation : DS, CS, SS et ES.
Chacun est associé à une zone spécifique de la mémoire. En effet,
lorsqu'un programme est chargé, il réserve plusieurs zones mémoire
généralement indépendantes :
ƒ Une zone réservée aux données (octets, mots, tableaux, ...)
ƒ Une zone réservée aux instructions (le code du programme)
ƒ Une zone réservée à la pile
µP 8086 – Registres de segmentation
Registre de segment de données DS (Data Segment):

Il permet d'accéder à la zone de données. L'adresse réelle d'une

donnée est appelé adresse physique. Elle est exprimée sur 20 bits et

c'est elle qui est effectivement mise sur le bus d'adresse pour accéder à

la donnée. Dans un programme, la donnée sera désignée par une

adresse logique sur 16 bits et par une valeur de segment inscrite dans

le registre DS.

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

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


µP 8086 – Registres de segmentation
L'adresse physique est définie par la formule ci-dessous :

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

Remarques:

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

son déplacement dans ce segment.

ƒ Une adresse physique a deux représentations :

o Représentation sur 20 bits.

o Représentation Segment:Offset (la plus répandue).


µP 8086 – Registres de segmentation

Registre de segment de code CS (Code Segment):

La zone réservée aux instructions du programme est associé au

registre de segmentation CS. Afin que le microprocesseur puisse lire

un instruction dans la mémoire, il doit fournir son adresse logique

(contenue dans le registre IP) et son segment dans CS.


µP 8086 – Registres de segmentation

Registre de segment de pile SS (Stack Segment):

La pile est une zone mémoire gérée en LIFO (Last In, First out). Elle

est utilisée d'une part par le processeur pour sauvegarder l'état du

système lors d'un appel à un sous-programme ou à une interruption, et

d'autre part par le programmeur pour passer des paramètres à un

sous-programme ou stocker temporairement des données, ...


µP 8086 – Registres de segmentation

Registre de segment de pile SS (Stack Segment):

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

segment SS. Le pointeur de pile SP contient l'adresse logique du

sommet de la pile. Pour calculer son adresse physique, la formule

utilisée est :

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


µP 8086 – Registres de segmentation

Registre ES (Extra Segment):

Il est utilisé implicitement par certaines instructions (manipulation

des chaînes de caractères, ...). Il permet l'accès à n'importe quelle

donnée dans la mémoire.


µP 8086 – Registres de contrôle

Les registres de contrôle sont susceptibles de modifier le

comportement du microprocesseur et informent le programmeur de

l'état de celui-ci.

ƒ Registre d'état SR (ou Flags)

ƒ Registre pointeur d'instructions IP (Instruction Pointer)


µP 8086 – Registres de contrôle

Registre d'état SR (ou Flags):

C'est un registre constitué d'un ensemble de bits portant le nom

drapeau (flag).

Ces drapeaux sont divisés en deux catégories :


ƒ Indicateurs d'état
ƒ Indicateurs de contrôle
µP 8086 – Registres de contrôle

Indicateurs d’état:

Les indicateurs d'état sont mis à jour après chaque instruction. Leur

valeur indique la nature du résultat obtenu :


µP 8086 – Registres de contrôle

Indicateurs de contrôle:

Les indicateurs de contrôle permettent de modifier le comportement

du microprocesseur. Ils sont positionnés par le programmeur.


µP 8086 – Registres de contrôle

Les registres de contrôle sont susceptibles de modifier le

comportement du microprocesseur et informent le programmeur de

l'état de celui-ci.

ƒ Registre d'état SR (ou Flags)

ƒ Registre pointeur d'instructions IP (Instruction Pointer)


µP 8086 – Registres de contrôle

Registre pointeur d'instructions IP (Instruction Pointer):

IP est un compteur qui contient en permanence l'adresse de la

prochaine instruction que le microprocesseur va exécuter. Il est

automatiquement mis à jour par le microprocesseur après chaque

instruction. IP contient uniquement l'adresse logique de l'instruction, le

segment se trouve dans le registre CS :

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


µP 8086 – Modes d’adressage
Une instruction peut exiger 0, 1 ou plusieurs opérandes.
Exemples:
ƒ 0 opérande : CLS (effacer l'écran en Basic)
ƒ 1 opérande : sin, cos, log, ...
ƒ 2 opérandes : addition, soustraction, ...
L'opérande peut être fourni de diverses manières :
ƒ En donnant immédiatement sa valeur : log(12) (12 est un opérande donné
en immédiat).
ƒ En fournissant son adresse : log(a) (a est une variable stockée à une
adresse dans la mémoire de l'ordinateur).
µP 8086 – Modes d’adressage
L'opérande peut être fourni de diverses manières :

ƒ En spécifiant l'index de l'opérande dans un tableau : log(A[i]) (A est un


tableau et i l'index de l'opérande dans ce tableau).

Afin d'étudier des exemples sur les différents modes d'adressage,


nous allons donner la syntaxe de l'instruction de transfert MOV :
MOV destination, source

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


inchangée.
µP 8086 – Modes d’adressage
Mode Registre :

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

Mode Immédiat :

Un opérande est donné en immédiat s'il constitue lui même la valeur.

Remarque:

Ce type de transfert est interdit avec les registres de segmentation (DS, CS, SS, ES).
µP 8086 – Modes d’adressage
Mode direct :

Un opérande est donné en mode direct s'il est désigné par son adresse

logique dans la mémoire.

Exemple1:

MOV [1200h] , 5Ah


La valeur 5Ah sera stockée à l'adresse logique 1200h. Pour calculer
l'adresse réelle de la case(l'adresse physique), il faut connaître la valeur
stockée dans le registre de segmentation DS.

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

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


µP 8086 – Modes d’adressage
Mode direct :

Un opérande est donné en mode direct s'il est désigné par son adresse

logique dans la mémoire.

Exemple2:

MOV [1200h] , 4D59h


4D59h est une donnée sur 16 bits, elle occupera les deux octets
d'adresse logique 1200h et 1201h. Si DS = 720h, la répercussion de cette
instruction sur la mémoire sera :

convention Little Endian dans


le rangement en mémoire
Représentation Segment:Offset de
l'adresse physique 08400h.
µP 8086 – Modes d’adressage
Mode indirect :

On a très souvent besoin de manipuler des tableaux ou des chaînes de

caractères. Pour accéder à un élément d'un tableau d'octets, il faut

connaître l'adresse de base du tableau (ici 1202h) et l'indice i de

l'élément dans le tableau.

Pour lire le 4ème élément du tableau (indice i=3) en mode direct, on


doit calculer son adresse :
1202h + 3 = 1205h
µP 8086 – Modes d’adressage

Mode indirect :

Du moment que le traitement des tableaux fait souvent appel aux

boucles, on ne peut adopter le mode direct comme mode d'adressage.

Le mode le plus adapté est le mode indirect où l'on manipule des

pointeurs plutôt que des adresses explicites.

ƒ Mode indirect basé

ƒ Mode indirect indexé

ƒ Mode indirect basé-indexé


µP 8086 – Modes d’adressage
Mode indirect basé :

L'adresse logique de l'opérande est fournie par BX ou BP avec

éventuellement un déplacement constant sur 8 ou 16 bits. Les registres

de segment utilisés pour le calcul de l'adresse physique sont : DS pour

BX et SS pour BP.

BX sera utilisé comme pointeur sur une donnée dans le segment de

données (registre DS), alors que BP sera employé pour accéder aux

informations stockées dans la pile (registre SS).

Rq: On note un opérande fourni en adressage indirect basé par [BX] ou [BP].
µP 8086 – Modes d’adressage
Mode indirect basé :

Exemple 1:

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

MOV [BX],0768h

•L'adresse logique : 1342h

•L'adresse physique : 1342h + (10h×1072h) = 11A62h

Ici, la donnée 0768h sera stocké à l'adresse pointée par BX (11A62h).

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


µP 8086 – Modes d’adressage
Mode indirect basé :

Exemple 2:
Soit : BP = F415h ; SS = 0784h ; AX = 76E4h
MOV [BP]7Ah,AL
Autre écriture : MOV [BP + 7Ah],AL

La valeur 7Ah est un déplacement constant sur 8 bits. Ce déplacement

est ajouté au contenu de BP pour former l'adresse logique.


•L'adresse logique : F415h + 7Ah = F48Fh
•L'adresse physique : F48Fh + (10h×0784h) = 16CCFh
L'octet d'adresse 16CCFh recevra la valeur E4h (contenu de AL). Cet
octet appartient évidemment à la pile (registre SS).
µP 8086 – Modes d’adressage

Mode indirect indexé :

L'adresse logique est fournie par l'un des registres d'index SI ou DI

avec éventuellement un déplacement constant sur 8 ou 16 bits.

SI et DI sont des pointeurs utilisés dans la zone des données. Le

registre de segment employé est DS.


µP 8086 – Modes d’adressage
Mode indirect indexé :

Exemple 1:

Soit SI = 24ABh ; DI = C140h ; DS = A1BAh

MOV [SI+1000h],142Bh

•L'adresse logique : 24ABh + 1000h = 34ABh

•L'adresse physique : 34ABh + A1BA0h = A504Bh (ou bien

A1BA:34AB)

Résultat de l'instruction :
µP 8086 – Modes d’adressage
Mode indirect indexé :

Exemple 2:

Soit le programme suivant :


MOV AX,A1BAh
MOV DS,AX
MOV DI,C140h
MOV AX,1412h
MOV [DI],AX

Dans la dernière instruction où l'adressage indirect indexé est employé:


•L'adresse logique : C140h
•L'adresse physique : A1BA0h + C140h = ADCE0h
Résultat de l'instruction :
µP 8086 – Modes d’adressage
Mode indirect basé-indexé :

Dans ce mode, les modes indexé et basé sont combinés. L'adresse

logique est donnée par BX/BP et SI/DI.

Quatre cas sont possibles :

Avec le registre BX (et le registre de segmentation DS) :

ƒ BX + SI + déplacement éventuel sur 8 ou 16 bits

ƒ BX + DI + déplacement éventuel sur 8 ou 16 bits

Avec le registre BP (et le registre de segmentation SS) :

ƒ BP + SI + déplacement éventuel sur 8 ou 16 bits

ƒ BP + DI + déplacement éventuel sur 8 ou 16 bits


µP 8086 – Modes d’adressage
Mode indirect basé-indexé :

Exemple:

Soit : SS = 1240h ; BP = 42A8h ; SI = 4010h

MOV [BP+SI],12h

Autre écriture : MOV [BP][SI],12h

•L'adresse logique : BP + SI = 82B8h

•L'adresse physique : 10h×SS + 82B8h = 1A6B8h

L'octet d'adresse 1A6B8h sera chargé par la valeur 12h.


µP 8086 – Les instructions de la famille INTEL 80x86

On peut classer les instructions du 8086 en 5 catégories :

1. Instructions de transfert

2. Instructions arithmétiques

3. Instructions logiques

4. Instructions de manipulation de bits

5. Instructions de branchement
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts – Notion d’Étiquette :

Quand on écrit un programme en langage assembleur, on peut

désigner certaines instructions par des étiquettes (labels). Une étiquette

joue le rôle de référence lorsqu'on désire effectuer un saut à

l'instruction marquée. Une étiquette peut être n'importe quel texte

suivi de deux points (:). Elle est mise juste avant l'instruction à

marquer.
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts – Notion d’Étiquette :

Exemple :

DEBUT: MOV AX, 1000h

MOV DS, AX

TestRS: MOV AH, 01

INT 21H

XOR AH, AH

MOV BL, 0AH

Suite1: DIV BL

JZ TestRS
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts :

Ils sont également appelés des branchements, ils permettent de

poursuivre l'exécution du programme à un point spécifique du

programme avec ou sans condition préalable.

Les appels aux sous-programmes sont des sauts particuliers où l'appel

peut être exécuté de plusieurs endroits du programme. Le retour

s'effectue à l'instruction se trouvant juste après l'appel.

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


ƒ Les sauts inconditionnels

ƒ Les sauts conditionnels


µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts inconditionnels :

Ces sauts ont lieu après l'exécution d'une instruction de saut sans

respect préalable d'une quelconque condition.


L'instruction JMP:

Syntaxe : JMP Étiquette

Dès que le microprocesseur rencontre cette instruction, il continue

l'exécution à l'instruction indiquée par Étiquette.

L'exécution se poursuit normalement et aucune mémorisation de

l'endroit d'appel n'est faite.


µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts inconditionnels :


L'instruction JMP:
Exemple
MOV CH,AL
MOV CL,4
SHR AL,CL
JMP Suite
MOV AL,CH
Suite: AND AL,0FH
XOR DX,DX

Dans cet exemple, l'instruction MOV AL,CH sera ignorée. L'instruction

exécuté après SHR AL,CL sera AND AL,0Fh.


µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts inconditionnels :


L'instruction JMP:
Exemple
MOV CH,AL…
JMP Suite
MOV AL,CH
Suite: AND AL,0FH…

Remarque: Une étiquette représente l'adresse de l'instruction qu'elle désigne.


Si l'instruction AND AL,0Fh est située à l'adresse 1200h, cette valeur sera
affectée à l'étiquette Suite.
Lorsque le microprocesseur exécute l'instruction JMP Suite, il charge le
pointeur d'instructions IP par l'adresse stockée dans Suite, soit dans notre cas
IP←1200h. Ceci provoque immédiatement la poursuite du programme à
l'adresse 1200h.
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts inconditionnels :


L'instruction CALL:

Syntaxe : CALL Étiquette


Cette instruction permet d'appeler un sous-programme.
Un sous-programme est une suite d'instructions qui effectuent un
traitement donné. Les sous-programmes permettent d'améliorer la
lisibilité et évitent surtout les répétitions lorsqu'on désire effectuer un
même traitement à plusieurs endroits du programme.
Un sous-programme doit être terminé par l'instruction de retour RET
et sa première instruction désignée par une étiquette qui servira de
référence d'appel.
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts inconditionnels :


L'instruction CALL:
En rencontrant l'instruction CALL, le microprocesseur suit le même
comportement que pour JMP à la différence qu'il mémorise l'endroit d'appel
pour y retourner à la fin du sous-programme.

MOV DL,41h
CALL Affich; Premier appel au sous-programme Affich
1er Retour
XOR BL,BL; instruction exécutée après le premier appel
ADD DL,05h
CALL Affich; Deuxième appel au sous-programme Affich
2ème Retour
OR AL,0Fh; instruction exécutée après le deuxième appel
.....
Affich: MOV AH,2; Début du sous-programme
INT 21H
RET; Fin du sous-programme (instruction de retour)
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts conditionnels :

Les sauts conditionnels ont lieu si une condition est vérifiée. Ils

dépendent en réalité des différents drapeaux du registre d'état (CF, ZF,

PF, ...).

Avant d'effectuer un saut conditionnel, il faut positionner les

drapeaux pour traduire la condition à vérifier. Dans la plupart des cas,

les sauts conditionnels sont précédés par deux instructions de

comparaison : CMP ou TEST. Ces deux instructions n'ont AUCUNE

influence sur les opérandes qu'on compare. Leur seul rôle est de

positionner les drapeaux en fonction du résultat de la comparaison.


µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts conditionnels :

L'instruction CMP:

Syntaxe : CMP destination,source

destination et source restent inchangés. CMP réalise une soustraction

entre les deux opérandes : destination – source

En fonction du résultat de cette opération, les drapeaux du registre

d'état sont positionnés.


Exemple: CMP AL,50h
Si AL = 50h, la soustraction donnera un résultat nul. Par conséquent, ZF sera
mis à 1.Ainsi, en examinant ZF après cette instruction, on peut vérifier si
AL=50h ou non.
µP 8086 – Les instructions de la famille INTEL 80x86

Les sauts conditionnels :

L'instruction TEST:
Syntaxe : TEST destination,source
destination et source restent inchangés. TEST effectue un ET logique
entre les deux opérandes :destination AND source.
Les drapeaux sont positionnés en fonction du résultat de cette
opération.
Exemple: TEST BL,BL
•Si BL = 00h, le ET donnera un résultat nul. Par conséquent, ZF sera mis à 1.
•Si BL est différent de 00, le résultat du ET sera non nul, donc ZF sera mis à 0.
Donc, pour vérifier si BL est nul ou non, il suffit de tester l'état de ZF juste après
cette instruction.
µP 8086 – Les instructions de la famille INTEL 80x86

Remarques :

ƒ Tous les successeurs du 8086 (80286, 80386, 80486, Pentium) sont

compatibles avec son jeu d'instruction. Ainsi, tous les programmes

écrits pour le 8086 peuvent être exécutés sur un PC équipé d'un

microprocesseur Pentium sans le moindre problème.

ƒ Le 80386 et ses successeurs ont une architecture 32 bits. Les registres

ont gardé leur même nomination avec l’ajout du préfixe E (Extended)

pour indiquer leur taille de 32 bits : EAX,EBX, ESI, EDI, EBP, ...

Les instructions ont été aussi étendus sur les opérations 32 bits.
µP 8086 – Les instructions de la famille INTEL 80x86

Sur un Pentium, toutes les opérations suivantes sont possibles :

• Sur 32 bits :MOV EAX,EBX

• Sur 16 bits :MOV AX,BX (AX et BX sont les 16 bits de poids

faible de EAX et EBX)

• Sur 8 bits :MOV AL,BL

Cependant, le 80386 et ses successeurs ne peuvent fonctionner en 32

bits que sous un mode appelé mode protégé.


Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs
III. Les mémoires
IV. Le microprocesseur Intel 8086

V. La pile et ses utilisations


1. Structure de la pile
2. Accès à la pile
3. Utilisation de la pile
VI. Les interruptions
VII. Les interfaces d’entrées/sorties
VIII. Initiation à la programmation
Conclusion
µP 8086 – La pile et ses utilisations
Structure de la pile:

La pile est une zone mémoire gérée en LIFO (Last In, First Out), c'est

à dire : le dernier élément entré sera le premier sorti. On peut assimiler

une pile à un tube vertical dans lequel on mettra des pièces de

monnaie. La seule pièce qu'on peut retirer est la dernière pièce empilée,

celle qui existe au sommet.

Le sommet de la pile représente la dernière donnée empilée. Afin de

le repérer dans la mémoire,le registre SP (avec SS comme registre de

segment) y pointe en permanence.


µP 8086 – La pile et ses utilisations
Structure de la pile:

Affecter (imprudemment) une autre valeur à SP au cours du

programme signifie la perte l'adresse du sommet de la pile donc de

toutes les données qui y existaient, ce qui se solde, dans la plupart des

cas, par un blocage du système.


µP 8086 – Accès à la pile

Vu la structure de la pile, les deux opérations permises sont :

ƒ Empiler une donnée (instruction PUSH)

ƒ Dépiler une donnée (instruction POP)

Pour le 8086, les données empilées et dépilées sont toujours sur 16 bits.
µP 8086 – Accès à la pile
Empilement:

L'empilement d'une donnée est réalisé par l'instruction :

PUSH donnée

Où donnée est un registre 16 bits ou un emplacement mémoire désigné par

adressage direct ou indirect.

L'empilement s'effectue en deux étapes :


• SP←SP – 2 : on fait reculer SP de deux cases (donnée sur 16 bits),
pour qu'il pointe sur le nouveau sommet susceptible de recevoir la
donnée à empiler.
• [SP]← donnée : le sommet de la pile reçoit la donnée.
µP 8086 – Accès à la pile
Empilement:

Exemple:

Soit AX = 1225h et soit l'instruction : PUSH AX


µP 8086 – Accès à la pile
Dépilement:
Le dépilement est l'opération qui permet de retirer le sommet de la
pile et le stocker dans une destination.
Il est réalisé par l'instruction : POP destination
destination est un registre 16 bits ou un emplacement mémoire désigné par

adressage direct ou indirect.

Le dépilement engendre deux opérations :


• destination←[SP] : le sommet de la pile est copié dans
destination.
• SP← SP + 2 : la donnée du sommet étant retirée, on fait avancer
SP pour pointer sur la donnée suivante.
µP 8086 – Accès à la pile
Dépilement:

Exemple:

Considérons l'instruction : POP DX

Le registre DX est chargé par la valeur 5839h.


L'instruction POP ne détruit pas la donnée existante au sommet de la pile, elle
fait tout simplement avancer SP pour pointer sur la donnée suivante (le
nouveau sommet).
µP 8086 – Utilisation de la pile

Stockage temporaire:

L'une des utilisations les plus classiques de la pile est le stockage

temporaire des données. Ceci se manifeste notamment dans les cas

suivants :

ƒ Le manque de registres

ƒ La sauvegarde des registres dans un sous-programme


µP 8086 – Utilisation de la pile

Appels aux sous-programmes :


µP 8086 – Utilisation de la pile

Passage des paramètres à un sous-programme :


Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs
III. Les mémoires
IV. Le microprocesseur Intel 8086
V. La pile et ses utilisations

VI. Les interruptions


1. Introduction
2. Type d’interruption
3. Applications
VII. Les interfaces d’entrées/sorties
VIII. Initiation à la programmation
Conclusion
µP 8086 – Interruptions

Le microprocesseur analyse en permanence les signaux d'entrée :

ƒ Si (vol = 1)alors appeler la police

ƒ Si (ascenseur = 1)alors appeler la compagnie d'ascenseurs


(panne d'ascenseur)

ƒ Si (incendie = 1) alors appeler les pompiers


µP 8086 – Interruptions

Programme
Tant que (vol=0) et (incendie=0) et (ascenseur=0) faire { }
Au cas où :
Vol=1:appel de la police
Asc=1:appel de la compagnie d'ascenseurs
Feu=1:appel des pompiers
Recommencer

Inconvénient:

Si l'ascenseur se bloque et juste après une incendie se déclare, le


microprocesseur sera occupé par l'appel de la compagnie d'ascenseurs
alors qu'il est plus urgent d'appeler les pompiers. En conclusion, il faut
que la procédure de la panne d'ascenseur ou celle du vol soit
interrompue dès l'apparition d'une incendie pour traiter la procédure
du feu.
µP 8086 – Interruptions
Solution:
On peut glisser entre chaque deux instructions un test du signal
d'incendie. Mais cette solution ralentit l'exécution du programme et
prend de la place mémoire.
Une autre solution consiste à prévenir matériellement le
microprocesseur pour traiter la procédure de l'incendie.
En effet, le 8086 possède 3 entrées appelées entrées d'interruption
dont le rôle est d'aviser le microprocesseur matériellement des
événements extérieurs.
µP 8086 – Types d’interruptions

C’est quoi une interruption (définition)???

Une interruption est une demande non prévisible adressée au

microprocesseur. Elle provoque l'arrêt du programme en cours de

traitement pour exécuter en priorité un sous-programme spécifique

appelé sous-programme d'interruption ou traitant d'interruption.

A la fin de ce sous-programme, le microprocesseur reprend le

programme principal là où il a été interrompu.


µP 8086 – Types d’interruptions

Types et propriétés:

Il existe deux catégories d'interruptions :

ƒ Les interruptions matérielles

ƒ Les interruptions logicielles.


µP 8086 – Interruptions matérielles

Ce sont des interruptions d'origine externe. Elles sont déclenchées par

application d'un état haut sur INTR (Interrupt Request) ou NMI (No

Masquable Interrupt).

** NMI est dite interruption non masquable. Elle ne peut être

inhibée par programme. Elle est associée en général à des événements

catastrophiques (erreur système, erreur mémoire, ...)

** INTR est moins prioritaire que NMI et peut être masquée par

programme.
µP 8086 – Interruptions matérielles

Processus de l'interruption NMI

Lorsque le microprocesseur reçoit une demande d'interruption sur


NMI.
1. il termine l'instruction en cours d'exécution,
2. empile le registre d'état et les registres CS et IP,
3. met le drapeau IF (Interrupt Flag) à 0 (inhibition des
interruptions),
4. cherche l'adresse du sous-programme à exécuter dans la
table des vecteurs d'interruption,
5. exécute le sous-programme ...
6. remet le drapeau IF à 1 (autorisation des interruptions),
7. dépile IP, CS et le registre d'état et poursuit le programme
principal.
µP 8086 – Interruptions matérielles

Processus de l'interruption INTR

INTR est souvent associée à un circuit spécialisé appelé contrôleur


d'interruption 8259A :
µP 8086 – Interruptions matérielles
Processus de l'interruption INTR

Le 8259A reçoit 8 entrées IRQ0 à IRQ7 (Interrupt ReQuest). Dès que


l'une de ces entrées passe à l'état haut, le 8259A émet une demande
d'interruption sur INTR :

1. le 8086 termine l'instruction en cours,

2. envoie au 8259A sur INTA un signal "accusé de réception",

3. le 8259A place sur le bus de données le n° de l'interruption


excitée. Ce numéro est reçu alors par le 8086,

4. le 8086 cherche l'adresse du sous-programme associé à cette


interruption dans la table des vecteurs d'interruption,

la suite du processus est identique à celui de NMI ...


µP 8086 – Interruptions matérielles
Processus de l'interruption INTR

Le 8259A reçoit 8 entrées IRQ0 à IRQ7 (Interrupt ReQuest). Dès que


l'une de ces entrées passe à l'état haut, le 8259A émet une demande
d'interruption sur INTR :

1. le 8086 termine l'instruction en cours,

2. envoie au 8259A sur INTA un signal "accusé de réception",

Remarque:

L'interruption INTR peut être masquée par l'instruction CLI (CLear Interrupt
flag) qui met le drapeau IF à 0. Aucun appel sur INTR n'est alors pris en compte
jusqu'à la mise à 1 de IF par l'instruction STI (SeT Interrupt flag).
µP 8086 – Interruptions logicielles

Elles sont déclenchées par l'instruction INT n où n désigne le numéro


d'interruption.

Les sous-programmes associés aux interruptions logicielles sont en


général des routines du BIOS ou du DOS. Elles permettent au
programme d'accéder aux différents périphériques de l'ordinateur.

Exemple:

Interruption 10h : interruption BIOS (gestion de l'affichage)

Interruption 21h : interruption DOS (gestion des périphériques, des


fichiers, ...)
µP 8086 – Table des vecteurs d'interruption
Cette table contient l'adresse des sous-programmes (SP) de toutes les
interruptions du microprocesseur (256 au total) et commence à partir de
00000. L'adresse d'un sous-programme d'interruption prend 4 octets :

2 octets pour son segment et 2 octets pour son offset.


µP 8086 – Table des vecteurs d'interruption
Pour une interruption logicielle n l'adresse du sous-programme
associé se trouve à 4n (offset du SP) et 4n+2 (segment du SP).

Exemple:

L'adresse du SP associé à l'interruption 21h se trouve à 00084h


(offset du SP) et 00086h (segment du SP).

En supposant que le contenu de ces 4 octets est :


00084h 00085h 00086h 00087h
A0h 04h 45h 09h
Le sous-programme associé à l'interruption 21h se trouve alors à
l'adresse 0945h:04A0h
Attention :
Il est interdit de modifier directement le contenu de la table des vecteurs
d'interruption. Cette opération se fait à l'aide de la fonction 25h de
l'interruption 21h.
µP 8086 – Table des vecteurs d'interruption

Cas particulier de RESET:

Lorsque l'entrée RESET du microprocesseur est mise à l'état haut


(bouton RESET sur le boîtier de l'ordinateur), les registres sont
initialisés par les valeurs suivantes :

SR=0 - IP=0 - CS=FFFFh - DS=0 - ES=0 - SS=0

La première instruction exécutée par le microprocesseur au


démarrage se trouve donc à l'adresse FFFFh:0000h. Cette adresse fait
partie de la zone du BIOS en ROM.
µP 8086 – Application d'interruption
Les interruptions jouent un rôle extrêmement important dans la
gestion des périphériques.

Un ordinateur communique à travers son port série avec un modem.


Celui-ci reçoit via une ligne téléphonique des octets provenant d'un
autre ordinateur. Les octets reçus doivent être rangés dans un buffer
(zone mémoire tampon) pour être traités après.
µP 8086 – Application d'interruption

Il existe deux méthodes pour gérer cette tâche :

ƒ Méthode par scrutation

ƒ Méthode par interruption


µP 8086 – Application d'interruption

Méthode par scrutation:

Cette méthode consiste à lire en permanence le port série pour voir


si un caractère est arrivé.
Lire le port série.
S'il y a un caractère→le stocker dans le buffer
Recommencer

La boucle doit se répéter jusqu'à la fin de la communication.

Constat: Cette méthode est inefficace parce que le microprocesseur passe tout
son temps à attendre l'arrivée d'un caractère alors qu'il devrait s'occuper
d'autres tâches.
µP 8086 – Application d'interruption
Méthode par interruption:

La méthode par interruption fonctionne de la manière suivante :


Le contrôleur du port série est associé à une entrée de
demande d'interruption, soit IRQ5.

Dès qu'un caractère est reçu, le contrôleur envoie une


demande via IRQ5 au 8259A.
µP 8086 – Application d'interruption
Méthode par interruption:

La méthode par interruption fonctionne de la manière suivante :


Le 8259A à son tour demande une interruption sur INTR.

Le microprocesseur arrête le programme en cours pour


exécuter le sous-programme associé à IRQ5.

Le microprocesseur lit le caractère reçu et le met dans le


buffer.
µP 8086 – Application d'interruption

Méthode par interruption:

Le numéro d'interruption associé à une ligne IRQn est n+8. Par


conséquent, l'emplacement de l'adresse du sous-programme
correspondant dans la table des vecteurs d'interruption est 4(n+8) et
4(n+8)+2.

Dans notre cas (IRQ5), l'adresse du sous-programme d'interruption


doit être stocké à 52h (offset du SP) et 54h (segment du SP).
µP 8086 – Application d'interruption

Méthode par interruption:

Supposons que notre SP d'interruption se trouve à F000h:EF6Fh, le


programme principal devra commencer par :

1. Inhiber les interruptions (CLI)


2. Mettre EF6Fh à l'adresse 00052h et F000h à l'adresse
00054h
(ceci doit être fait à l'aide la fonction 25h de l'interruption
21h)

3. Autoriser les interruptions (STI)


4. Suite du programme ...
µP 8086 – Application d'interruption
Méthode par interruption:

Le SP d'interruption à l'adresse F000h:EF6Fh :

• Lire le caractère reçu sur le port série


2. Mettre le caractère dans le buffer
3. Retour (instruction IRET)

Cette méthode permet un gain substantiel en vitesse et en


performance. La plupart des périphériques sont gérés de cette
manière.
µP 8086 – Entrées/Sorties

Le microprocesseur doit échanger des données avec l'environnement


extérieur. Cet échange se fait à l'aide des périphériques.

Le flux d'information peut exister dans les deux sens : de l'extérieur vers le
microprocesseur (clavier, liaison série, réseau, disque, ...) ou du
microprocesseur vers l'extérieur (imprimante,écran, disque, traceur, ...)

Ces échanges d'information sont appelés les entrées/sorties : E/S


(input/output : I/O en anglais).
µP 8086 – Entrées/Sorties

Aujourd'hui, il existe un nombre important de périphériques de


natures très diverses. Le microprocesseur est incapable de
communiquer avec tous ces périphériques soit parce qu'ils nécessitent
un protocole de communication très particulier, soit encore parce que
la nature des signaux électriques transitant sur les lignes d'E/S du
périphérique sont incompatibles avec ceux du microprocesseur.

Circuit d'interface ou contrôleur


µP 8086 – Entrées/Sorties

Le circuit d’interface se charge de piloter le périphérique en lui envoyant


tous les signaux électriques nécessaires à son fonctionnement et en recevant de
celui-ci les données utiles tout en obéissant au protocole de communication
imposé.

Du côté du microprocesseur le circuit d'interface


occupe un certain espace dans une zone appelée zone
d'entrée/sortie. Pour le 8086 cette zone est
indépendante de la mémoire centrale et a une taille de
64 Ko.
µP 8086 – Entrées/Sorties
Communication entre le microprocesseur et un circuit d'interface

Tous les circuits d'interface comportent un ou plusieurs registres internes. Ces


registres travaillent en lecture ou en écriture et à chaque registre est affectée une
adresse dans la zone d'entrée/sortie.

Trois type de registres:

ƒ Reçoivent des informations de commande du microprocesseur (mode


de fonctionnement, sens et mode de transfert, ...);

ƒ Contiennent des informations d'état du circuit d'interface (erreurs de


transmission, réception de données, ...);

ƒ Tampon recevant l'information à transférer du microprocesseur au


périphérique ou arrivant du périphérique vers le microprocesseur, ...
µP 8086 – Entrées/Sorties
Accès aux registres d'un circuit d'interface

Chaque registre interne est associé à une adresse d'E/S. Pour y accéder, il
existe deux instructions IN et OUT :

IN AL,DX; met dans AL le contenu de l'adresse d'E/S


pointé par DX

OUT DX,AL; transfère le contenu de AL vers l'adresse


d'E/S pointée par DX

Il faut évidemment que DX soit chargé au préalable par l'adresse d‘E/S :

MOV DX,adr. d'E/S.

Rq: AL et DX sont les seuls registres autorisés dans les opérations d'E/S.
µP 8086 – Entrées/Sorties
Circuit d'interface série

La gestion des ports série est prise en charge par à un circuit appelé
l'UART 8250 (UniversalAsynchronous Receiver Transmitter).

RBR (Receiver BuffeR) ou registre de réception; Il se situe à


l'adresse d'E/S : 3F8h (Adresse de base car les adresses de tous les autres
registres de l'UART sont calculées par rapport à cette adresse en ajoutant un

décalage).

LCR (Line Control Register) ou registre de contrôle de la


transmission se trouve à l'adresse 3F8h + 3 = 3FBh. Le dernier registre
est situé à 3FFh.
µP 8086 – Entrées/Sorties
Circuit d'interface série

L'UART occupe donc l'espace d'E/S : 3F8h – 3FFh.

Le caractère reçu sur le port série est mis par l'UART dans le registre
de réception RBR.

On peut lire le contenu du registre RBR par les instructions suivantes :

MOV DX,3F8h ; adresse d'E/S du RBR

IN AL,DX; charger AL par le contenu du RBR


µP 8086 – Entrées/Sorties
Circuit d'interface série

Pour configurer la transmission via le port série, On met le mot de


configuration dans le registre LCR :

MOV AL,mot de config.

MOV DX,3FBh ; adresse du LCR

OUT DX,AL; chargement dans le LCR


µP 8086 – Entrées/Sorties
Circuit d'interface parallèle

Le 8255 est un circuit d’interface programmable de 24 bits d’entrée/sortie


organisés sous forme de2 ports de 8 bits : A et B, et de deux ports de 4 bits Csup
et Cinf (constituant le port C).Chaque port est programmable en entrée et en
sortie.
µP 8086 – Entrées/Sorties
Circuit d'interface parallèle

Le 8255 est un circuit d’interface programmable de 24 bits d’entrée/sortie


organisés sous forme de2 ports de 8 bits : A et B, et de deux ports de 4 bits Csup
et Cinf (constituant le port C).Chaque port est programmable en entrée et en
sortie.
µP 8086 – Entrées/Sorties
Connexion du 8255 au microprocesseur
µP 8086 – Entrées/Sorties
Programmation du 8255

Afin de configurer le sens et le mode de fonctionnement des


registres, on écrit un mot de commande dans le registre RC.

Le 8255 dispose de 3 modes de fonctionnement :


ƒ Mode 0 : E/S de base
ƒ Mode 1 : E/S échantillonées
ƒ Mode 2 : Bus bidirectionnel
µP 8086 – Entrées/Sorties
Exemple:
Pour configurer le port A en sortie et les ports B et C en entrée, le mot de
commande est :10001011 soit 8B en hexadécimal.

En supposant que l’adresse de base du 8255 est 100h, le programme ci-


dessous permet de transférer la donnée présente sur le port B au port A :
MOV AL,8Bh ;mot de commande
MOV DX,103h ;adresse du registre de contrôle
OUT DX,AL ;écriture du mot de commande dans RC
MOV DX,101h ;adresse du port B
IN AL,DX ;lecture du contenu du port B dans AL
MOV DX,100h ;adresse du port A
OUT DX,AL ;transfert du contenu de AL au port A
Microprocesseur - Plan

Introduction (Rappel: systèmes de numération & codage)


I. Historique et évolution des ordinateurs
II. Généralités sur les microprocesseurs
III. Les mémoires
IV. Le microprocesseur Intel 8086
V. La pile et ses utilisations
VI. Les interruptions
VII. Les interfaces d’entrées/sorties

VIII. Initiation à la programmation


1. Programmation système & accès aux ressources matérielles
2. Structure d’un programme en Assembleur 80x86
3. Compilation d’un programme en Assembleur 80x86

Conclusion
µP 8086 – Initiation à la programmation

Écrire un programme avec un langage évolué tel que Pascal, C,

Fortran, ... revient à traiter les données selon des algorithmes en

général indépendants du système. Le programme écrit reste

transparent vis-à-vis du matériel et ne requière aucune connaissance

sur la façon avec laquelle les données parviennent au processeur ni

comment celui-ci les traite ou les range dans la mémoire.

Programmation plus répandu notamment pour sa commodité et


sa transparence.
µP 8086 – Initiation à la programmation

Limite et même parfois inefficacité quand il est question de


tâches critiques nécessitant une grande vitesse d'exécution ou un
accès direct au matériel.

La seule solution est le recours à la programmation système qui

s’intéresse aux différents échanges qui se produisent à l’intérieur et en

particulier avec la mémoire et les périphériques (clavier, écran ...).

Ce type de programmation quoique pénible et fastidieux, s’avère

parfois indispensable pour générer un code exécutable rapide et

exploiter les ressources du système d’une manière optimale.


µP 8086 – Initiation à la programmation

Structure d’un programme en Assembleur 80x86

Un programme en Assembleur se compose en général de 3 parties

définissant les différents segments :

1. le segment de code (pointé par CS),

2. le segment de données (pointé par DS),

3. le segment de pile (pointé par SS).


µP 8086 – Initiation à la programmation

Déclaration des segments:

La déclaration d’un segment se fait selon la syntaxe suivante :

Nom_Segment SEGMENT PARA; Début du segment

<<*** Instructions ou données appartenant au segment ***>>

Nom_Segment ENDS; Fin du segment

Exemple: Déclaration d’un segment de code


MonCode SEGMENT PARA
MOV AX,1200h
ADD AX,[5E00h]
MOV AX,4C00h
INT 21h
MonCode ENDS
µP 8086 – Initiation à la programmation

Déclaration du segment des données:

Le segment de données est réservé aux données que le programme

utilise pendant son exécution.

Ces données sont représentées sous forme d’octets, de mots, de

tableaux ou de chaînes de caractères et peuvent être traités comme des

constantes ou des variables. Chaque donnée est stockée en mémoire

sous forme hexadécimale.


µP 8086 – Initiation à la programmation

Déclaration du segment des données:

Les variables peuvent recevoir une valeur initiale attribuée par le


programme comme elles peuvent rester sans initialisation et c’est
pendant l’exécution qu’elles reçoivent des valeurs.

La syntaxe de définition des données au sein du segment de données


dépend de leur nature :
ƒ Définition d’un octet
ƒ Définition d’un mot
ƒ Définition d’un tableau d’octets
ƒ Définition d’un tableau de mots
ƒ Définition d’une chaîne de caractères
µP 8086 – Initiation à la programmation

Définition d’un octet:

Nombre DB 18h

Label Valeur initiale

Les valeurs initiales peuvent être exprimées en décimal, en


hexadécimal (h) ou en binaire (b). Le compilateur se charge de faire la
conversion.

Octet sans lui affecter de valeur initiale:


Nombre DB ?
µP 8086 – Initiation à la programmation

Définition d’un mot (16 bits):

Nombre DW 3C0Fh

Label Valeur initiale

Définition d’un tableau d’octets:

Tab DB 15h,5Ah,21h,7Ch,82h
Pour définir un tableau de 10 octets sans initialisation, on écrit :

Tab DB 10 DUP (?)

Avec valeur identique (2Ah) , on écrit :


Tab DB 10 DUP (2Ah)
µP 8086 – Initiation à la programmation
Définition d’un tableau de mot:

TabM DW 15EEh, 5A00h, 12FFh, 8B00h

Si l’adresse pointée par le label TabM est 1200h, le contenu de la


mémoire sera:

Définition d’une chaîne de caractère:


MaChn DB 'Ceci est un exemple’
Chn2 DB 'FIN',0Dh,0Ah

Rq: Une chaîne de caractères est stockée sous forme d’octets représentant le code

ASCII de chaque caractère.


µP 8086 – Initiation à la programmation
Définition d’une chaîne de caractère:
Chn2 DB 'FIN',0Dh,0Ah

Chaînes de caractères contenant des caractères spéciaux (caractères non


imprimables mais qui ont une signification particulière pour l’ordinateur).
Ces caractères sont représentés par leur code ASCII dans la définition de la
chaîne.
La chaîne de caractère "FIN" est suivie de deux caractères spéciaux de
code ASCII : 0Dh (retour chariot) et 0Ah (retour à la ligne).

Si le label Chn2 désigne l’adresse 8000h:


µP 8086 – Initiation à la programmation

Déclaration du segment de données:

La syntaxe est identique à celle du segment du code. Dans un segment

de données on regroupe toutes les données utilisées par le programme.

Les variables déclarées sont placées l'une après l'autre dans la mémoire.

Chacune prend l'espace mémoire nécessaire.


µP 8086 – Initiation à la programmation
Déclaration du segment de données:

Exemple:
Donnees SEGMENT PARA; Début du segment
Var1 DB 12h; 1 octet
Mot1 DW 15E4h; 2 octets (mot de 16 bits)
Table DB5 DUP(1Ch); 5 octets (taille du tableau)
Chaine DB 'Test',0A; 5 octets (longueur de la chaîne)
Donnees ENDS; Fin du segment

Si le premier octet du segment de données se trouve à l'offset 0000, le contenu


de la mémoire sera:
µP 8086 – Initiation à la programmation
Utilisation des données dans un programme:

Exercice:

Soient deux tables de 5 valeurs dont le début est désigné par les
labels XVect et YVect. La deuxième table n'est pas initialisé.
XVect DB 12h,3Ah,15h,4C,2Dh
YVect DB5 DUP (?)

Proposez un programme qui permet de copier dans la deuxième


table le contenu de la première
µP 8086 – Initiation à la programmation
Utilisation des données dans un programme:

Solution:
LEA SI,XVect ;Charger SI par l'adresse désignée par XVect
LEA DI,YVect ;Charger DI par l'adresse désignée par YVect
MOV AH,5
suite: MOV AL,[SI]
MOV [DI], AL
INC SI
INC DI
DEC AH
CMP AH,0
JNE suite
µP 8086 – Initiation à la programmation
Déclaration du segment de pile:

La pile est une zone mémoire qui doit être réservée pour le
programme (gestion des appel aux sous-programmes et aux
interruptions, ...), et pour d'autres usages généraux (sauvegarde de
données temporaires, passage de paramètres à une procédure, ...)

Dans le plupart des cas, la déclaration d'un segment de pile est


obligatoire surtout en présence de sous-programmes.
µP 8086 – Initiation à la programmation
Déclaration du segment de pile:

La taille de la pile varie selon les applications. Un programme


récursif aura besoin d'une pile de taille beaucoup plus importante
qu'un programme ordinaire.

La réservation d'une zone mémoire pour le segment de pile se fait par:


MaPile SEGMENT PARA STACK
DB 256 DUP (?)
MaPile ENDS

Ici, la taille de la pile est de 256 octets.

Vous aimerez peut-être aussi