Coursmicrop PDF
Coursmicrop PDF
Coursmicrop PDF
3 Les mémoires 11
3.1 Mémoires ROM et RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Schéma fonctionnel d’une mémoire . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Interfaçage microprocesseur/mémoire . . . . . . . . . . . . . . . . . . . . . 12
3.4 Chronogrammes de lecture/écriture en mémoire . . . . . . . . . . . . . . . 13
3.5 Connection de plusieurs boı̂tiers mémoire . . . . . . . . . . . . . . . . . . . 14
3.6 Décodage d’adresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.7 Classification des mémoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7 Les interruptions 71
7.1 Définition d’une interruption . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.2 Prise en charge d’une interruption par le microprocesseur . . . . . . . . . . 72
7.3 Adresses des sous-programmes d’interruptions . . . . . . . . . . . . . . . . 73
7.4 Les interruptions du 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.5 Le contrôleur programmable d’interruptions 8259 . . . . . . . . . . . . . . 75
horloge registres
L’élément de base d’un calculateur est constitué par l’unité centrale de traitement
(UCT, CPU : Central Processing Unit). 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 com-
mandes) à tous les autres éléments du calculateur afin d’exécuter un programme.
La mémoire centrale contient :
• le programme à exécuter : suite d’instructions élémentaires ;
• les données à traiter.
4 Chapitre 2 - Architecture et fonctionnement d’un microprocesseur
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.
Représentation :
adresse des cases
mémoire
(généralement
notée en
hexadécimal)
12H 0003H
3EH 0000H
Une case mémoire peut être lue ou écrite par le microprocesseur (cas des mémoires
vives) ou bien seulement lue (cas des mémoires mortes).
2.3 - Circulation de l’information dans un calculateur 5
périphériques
microprocesseur mémoire E/S
BUS
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èlle, c’est-à-dire en faisant circuler n bits
simultanément.
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, ...
Le bus peut être décomposé en trois bus distincts :
bus de commande
alimentation
horloge n bits
bus d'adresses
reset
p bits
microprocesseur bus de données
signaux de
commande du
microprocesseur bus de commande
Exemple :
case mémoire 1, case mémoire 2
ADDITIONNER
opération opérandes
2.5 - Fonctionnement d’un microprocesseur 7
Rangement en mémoire :
opérande p
instruction n
opérande 2 0002H
opérande 1 0001H
code opératoire
de l'addition 3EH 0000H
Pour exécuter les instructions dans l’ordre établi par le programme, le microprocesseur
doit savoir à chaque instant l’adresse de la prochaine instruction à exécuter. Le micropro-
cesseur utilise un registre contenant cette information. Ce registre est appelé pointeur
d’instruction (IP : Instruction Pointer) ou compteur d’instructions ou compteur
ordinal.
Exemple :
pointeur
opérande p
d'instruction
3A2BH instruction n 3A2BH
adresse de la
prochaine
instruction à
exécuter opérande 2 0002H
opérande 1 0001H
instruction 1 0000H
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémenté de façon à
pointer vers l’instruction suivante :
pointeur
d'instruction
3A2DH instruction n+1 3A2DH
opérande p 3A2CH
S Z AC P/O N C
soustraction
signe zéro retenue parité/ retenue
auxiliaire dépassement (carry)
Les indicateurs d’état sont activés lorsqu’une certaine condition est remplie, exemple : le
flag Z est mis à 1 lorsque la dernière opération a donné un résultat nul, le flag C est mis
à un lorsque le résultat d’une addition possède une retenue, ...
Les indicateurs d’état sont utilisés par les instructions de saut conditionnels : en fonction
de l’état d’un (ou plusieurs) flags, le programme se poursuit de manière différente.
Toutes ces étapes (lecture de l’instruction, décodage, exécution) sont synchronisées par
un séquenceur qui assure le bon déroulement des opérations :
mémoire
horloge
bus d'adresse
pointeur
d'instruction
bus de commande : "lire la mémoire"
séquenceur
registre
d'instruction
bus de données
décodeur
micro-code
exécution
2.5 - Fonctionnement d’un microprocesseur 9
cycle d'instruction
période d'horloge
(microcycle)
T1 T2 T3
recherche de instruction
décodage exécution
l'instruction suivante
Chaque instruction est caractérisée par le nombre de périodes d’horloge (ou microcycles)
qu’elle utilise (donnée fournie par le fabricant du microprocesseur).
Exemple : horloge à 5 MHz, période T = 1/f = 0, 2 µs. Si l’instruction s’exécute en 3
microcycles, la durée d’exécution de l’instruction est : 3 × 0, 2 = 0, 6 µs.
L’horloge est constituée par un oscillateur à quartz dont les circuits peuvent être internes
ou externes au microprocesseur.
Structure complète d’un microprocesseur simple : pour fonctionner, un microprocesseur
nécessite donc au minimum les éléments suivants :
registres
Unité pointeur d'instruction
Arithmétique
et Logique registre d'instruction
(UAL) accumulateur
indicateurs d'état
séquenceur décodeur
d'instructions
horloge
quartz
10 Chapitre 2 - Architecture et fonctionnement d’un microprocesseur
3
Chapitre 3
Les mémoires
A0 D0
A1 D1
n lignes A2 p lignes de données
D2
d'adresses (le plus souvent, p = 8)
RAM
ou Dp-1
An-1
ROM
actifs à l'état bas
signal de lecture : RD ou OE
signal d'écriture (RAM) : WR
validation de boîtier : CS
(chip select)
D7 D7
An-1
RD RD
commandes
WR WR
CS
A0
A1
adresses A2
An-1
microprocesseur bus
mémoire
D0 D0 A0
D1 8 D1 A1
données A2
D7 D7
An-1
RD RD
commandes
WR WR
CS
A0
A1
adresses A2
n
An-1
3.4 - Chronogrammes de lecture/écriture en mémoire 13
horloge
bus
adresse sur le bus (0 ou 1)
d'adresses
commande
de lecture
donnée
temps d'accès stable
bus de donnée
valeurs non significatives
données sur le bus
Remarque : 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 ) :
signal
de lecture
microprocesseur mémoire
demande
de temps
d'attente
14 Chapitre 3 - Les mémoires
horloge
bus
adresse sur le bus
d'adresses
commande
de lecture écriture autorisée
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.
Exemple : 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 :
3.5 - Connection de plusieurs boı̂tiers mémoire 15
signaux
D0
D1 de selection
de boîtier bus de
données
D7 8 D0-D7
RD
WR
Dans un même boı̂tier, une case mémoire est désignée par les bits d’adresses A0 à A12 :
A12 A11 ... A1 A0 A12 A11 ... A1 A0
0 0 ... 0 0 à 1 1 ... 1 1
0000H 1FFFH
Pour atteindre la mémoire no 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 :
A15 A14 A13 A12 ... A0 A15 A14 A13 A12 ... A0
0 0 1 0 ... 0 à 0 0 1 1 ... 1
2000H 3FFFH
De même, pour la mémoire no 2, on doit avoir A13 = 0, A14 = 1 et A15 = 0 d’où la plage
d’adresses occupée cette mémoire :
A15 A14 A13 A12 ... A0 A15 A14 A13 A12 ... A0
0 1 0 0 ... 0 à 0 1 0 1 ... 1
4000H 5FFFH
Pour la mémoire no 3, on doit avoir A13 = 0, A14 = 0 et A15 = 1 d’où la plage d’adresses
occupée cette mémoire :
A15 A14 A13 A12 ... A0 A15 A14 A13 A12 ... A0
1 0 0 0 ... 0 à 1 0 0 1 ... 1
8000H 9FFFH
On en déduit la cartographie ou mapping de la mémoire visible par le microprocesseur :
16 Chapitre 3 - Les mémoires
FFFFH
9FFFH
mémoire no 3 mémoire totale
8000H adressable par
le microprocesseur
mémoire
réelle
5FFFH
implantée
mémoire no 2
4000H
3FFFH
mémoire no 1
2000H
0000H
A0 à A12 mémoire no 0
1
microprocesseur 2
D0 à D7
3
A15 A14 A13 CS 4
CS 5
CS 6
CS 7
A Y0 CS
B Y1 CS
C Y2
Y3 CS
Y4 CS
Y5
Y6
Y7
décodeur 3 vers 8
(ex: 74138)
3.7 - Classification des mémoires 17
C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
0 0 0 0 1 1 1 1 1 1 1
0 0 1 1 0 1 1 1 1 1 1
0 1 0 1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1 1 1 1
1 0 0 1 1 1 1 0 1 1 1
1 0 1 1 1 1 1 1 0 1 1
1 1 0 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 0
FFFFH
o
mémoire n 7
E000H
DFFFH
mémoire no 6
C000H
BFFFH
mémoire no 5
A000H
9FFFH
mémoire no 4
8000H
7FFFH
mémoire no 3
6000H
5FFFH
mémoire no 2
4000H
3FFFH
mémoire no 1
2000H
1FFFH
mémoire no 0
0000H
mémoires à semiconducteurs
Mémoires mortes :
• 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.
• EPROM : Erasable PROM, appelée aussi UVPROM. ROM programmable électri-
quement avec un programmateur et effaçable par exposition à un rayonnement ultra-
violet pendant 30 minutes. Famille 27nnn, exemple : 2764 (8 Ko), 27256 (32 Ko).
Avantage : reprogrammable par l’utilisateur.
• EEPROM : Electrically Erasable PROM. ROM programmable et effaçable électri-
quement. Lecture à vitesse normale (≤ 100 ns). Ecriture (= 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. In-
convénient : coût élevé.
Mémoires vives :
• SRAM : Static Random Access Memory. Mémoire statique à accès aléatoire, à base
de bascules à semiconducteurs à deux états (bascules RS). Famille 62nnn, exemple :
62128 (16 Ko). Avantage : très rapide, simple d’utilisation. Inconvénient : compliqué
à réaliser.
• 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).
Chapitre 4
RD
INTA
DEN
HOLD
DMA DT/R
HLDA
S0 signaux
d'état
S7
4,77 MHz
CLK
quartz
8284 READY
14,318 MHz
8086
RESET
générateur
d'horloge
3
4.3 - Description et utilisation des signaux du 8086 21
RESET : entrée de remise à zéro du microprocesseur. Lorsque cette entrée est mise à
l’état haut pendant au moins 4 périodes d’horloge, le microprocesseur est réinitialisé : il
va exécuter l’instruction se trouvant à l’adresse FFFF0H (adresse de bootstrap). Le signal
de RESET est fourni par le générateur d’horloge.
A16/S3 à A19/S6 : 4 bits de poids fort du bus d’adresses, multiplexés avec 4 bits
d’état.
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 :
1 cycle de bus
T1 T2 T3 T4 T1 T2 T3 T4
CLK
ALE
lecture
RD
écriture
WR
Le démultiplexage des signaux AD0 à AD15 (ou A16/S3 à A19/S6) se fait en mémorisant
l’adresse lorsque celle-ci est présente sur le bus A/D, à l’aide d’un verrou (latch), en-
semble de bascules D. La commande de mémorisation de l’adresse est générée par le
microprocesseur : c’est le signal ALE, Address Latch Enable.
Circuit de démultiplexage A/D :
LATCH
ALE
bus d'adresses
8086
H Q
D A0 - A19
x 20
bus de données
20
AD0 - AD15 D0 - D15
A16/S3 - A19/S6 S3 -S6
Fonctionnement :
• si ALE = 1, le verrou est transparent (Q = D) ;
• si ALE = 0, mémorisation de la dernière valeur de D sur les sorties Q ;
• les signaux de lecture (RD) ou d’écriture (WR) ne sont générés par le microproces-
seur que lorsque les données sont présentes sur le bus A/D.
4.3 - Description et utilisation des signaux du 8086 23
AD0 - AD7 D0 Q0
A0 - A7
ou D1 Q1
ou
AD8 - AD15 8282 A8 - A15
ou ou
A16/S3 - A19/S6 A16 - A19
D7 Q7
ALE STROBE
OE
T1 T2 T3 T4
CLK
ALE
DEN
écriture
DT/R
lecture
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.
24 Chapitre 4 - Le microprocesseur Intel 8086
A0 B0
A1 B1
8286
AD0 - AD7 D0 - D7
ou ou
AD8 - AD15 D8 - D15
commande
du sens de A7 x8 B7
transfert lignes de
DIR données
DT/R bufferisées
DEN EN
validation
du transfert
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.
A1 - A19 bus d'adresses
A1 A0 D0 D0
A2 A1 D1 D1
banque
paire D7 D7
A19 A18
A0 CS
A1 A0 D0 D8
A2
A1 D1 D9
banque
impaire D7 D15
A19 A18
BHE CS
D0 - D15
bus de données
4.3 - Description et utilisation des signaux du 8086 25
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 :
BHE A0 octets transférés
0 0 les deux octets (mot complet)
0 1 octet fort (adresse impaire)
1 0 octet faible (adresse paire)
1 1 aucun octet
Remarque : le 8086 ne peut lire une donnée sur 16 bits en une seule fois, uniquement si
l’octet de poids fort de cette donnée est rangé à une adresse impaire et l’octet de poids
faible à une adresse paire (alignement sur les adresses paires), sinon la lecture de cette
donnée doit se faire en deux opérations successives, d’où une augmentation du temps
d’exécution du transfert dû à un mauvais alignement des données.
Réalisation des deux banques avec plusieurs boı̂tiers mémoire :
A1 A0 D0 D0
A2 A1 D1 D1
64 K x 8
D7 D7
A16 A15
A17 Y0 CS
A
A18 B Y1 banque
A19 C Y2
paire
A1 A0 D0 D0
Y3
74138 Y4
A0 Y5 A2
A1 D1 D1
Y6
EN Y7 64 K x 8
D7 D7
A16 A15
CS
A1 A0 D0 D8
A2 A1 D1 D9
64 K x 8
D7 D15
A16 A15
A17
A Y0 CS
A18 B Y1 banque
A19 C Y2 impaire
D0 D8
Y3 A1 A0
74138 Y4
BHE Y5 A2 A1 D1 D9
Y6
EN Y7 64 K x 8
D7 D15
A16 A15
CS
s
26 Chapitre 4 - Le microprocesseur Intel 8086
AD15
adresses
8086 8282 A15
WR ALE D Q
A8
RD DEN STR
M/IO DT/R
8282 A7
D Q
A0
BUS SYSTEME
STR
D15
A B
8286 D8
EN
données
DIR
D7
A B
8286 D0
EN
DIR
commandes
M/IO
RD
WR
8 bits 8 bits
AH AL = AX
16 bits
registres BH BL = BX
16 bits
généraux CH CL = CX DS
DH DL = DX SS registres
SI CS de segments
pointeurs DI ES
et index SP IP pointeur d'instruction
BP
registres 1
temporaires 2
file d'attente
3 des instructions
4 (6 octets)
5
6
commandes
de l'unité
UAL
d'exécution
indicateurs
AX = (AH,AL) ;
BX = (BH,BL) ;
CX = (CH,CL) ;
DX = (DH,DL).
Ils peuvent être également considérés comme 8 registres sur 8 bits. Ils servent à conte-
nir temporairement des données. Ce sont des registres généraux mais ils peuvent
être utilisés pour des opérations particulières. Exemple : AX = accumulateur, CX
= compteur.
• Registres de pointeurs et d’index : 4 registres sur 16 bits.
Pointeurs :
SP : Stack Pointer, pointeur de pile (la pile est une zone de sauvegarde de
données en cours d’exécution d’un programme) ;
BP : Base Pointer, pointeur de base, utilisé pour adresser des données sur
la pile.
Index :
SI : Source Index ;
DI : Destination Index.
Ils sont utilisés pour les transferts de chaı̂nes d’octets entre deux zones
mémoire.
Les pointeurs et les index contiennent des adresses de cases mémoire.
• Pointeur d’instruction et indicateurs (flags) : 2 registres sur 16 bits.
Pointeur d’instruction : IP, contient l’adresse de la prochaine instruction à
exécuter.
Flags :
O D I T S Z A P C
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CF : indicateur de retenue (carry) ;
PF : indicateur de parité ;
AF : indicateur de retenue auxiliaire ;
ZF : indicateur de zéro ;
SF : indicateur de signe ;
TF : indicateur d’exécution pas à pas (trap) ;
IF : indicateur d’autorisation d’interruption ;
DF : indicateur de décrémentation ;
OF : indicateur de dépassement (overflow).
• Registres de segments : 4 registres sur 16 bits.
CS : Code Segment, registre de segment de code ;
4.5 - Gestion de la mémoire par le 8086 29
1 Mo FFFFFH
case
un segment mémoire
(64 Ko) offset
adresse
multiple
de 16
0 00000H
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.
30 Chapitre 4 - Le microprocesseur Intel 8086
16 bits 4 bits
segment 0000
20 bits
+ offset
16 bits
adresse physique
20 bits
Ainsi, l’adresse physique se calcule par l’expression :
adresse physique = 16 × segment + offset
car le fait d’injecter 4 zéros en poids faible du segment revient à effectuer un décalage de
4 positions vers la gauche, c’est à dire une multiplication par 24 = 16.
A un instant donné, le 8086 a accès à 4 segments dont les adresses se trouvent dans les
registres de segment CS, DS, SS et ES. Le segment de code contient les instructions du
programme, le segment de données contient les données manipulées par le programme, le
segment de pile contient la pile de sauvegarde et le segment supplémentaire peut aussi
contenir des données.
Le registre CS est associé au pointeur d’instruction IP, ainsi la prochaine instruction à
exécuter se trouve à l’adresse logique CS : IP.
1 Mo FFFFFH
instruction
à exécuter
segment
de code CS : IP
offset = IP
CS : 0000H
0 00000H
4.5 - Gestion de la mémoire par le 8086 31
1 Mo FFFFFH
extra
segment ES : DI
offset = DI
ES : 0000H
segment
de pile SS : SP
offset = SP
SS : 0000H
segment
de données DS : SI
offset = SI
DS : 0000H
segment
de code CS : IP
offset = IP
CS : 0000H
0 00000H
Remarque : les segments ne sont pas nécessairement distincts les uns des autres, ils
peuvent se chevaucher ou se recouvrir complètement.
1 Mo FFFFFH 1 Mo FFFFFH
segment
segment
de pile
de code,
SS : 0000H
segment de données
de données et de pile CS : 0000H
DS : 0000H DS : 0000H
segment SS : 0000H
de code
CS : 0000H
0 00000H 0 00000H
La programmation en assembleur du
microprocesseur 8086
5.1 Généralités
Chaque microprocesseur reconnait un ensemble d’instructions appelé jeu d’instructions
(Instruction Set) fixé par le constructeur. Pour les microprocesseurs classiques, le nombre
d’instructions reconnues varie entre 75 et 150 (microprocesseurs CISC : Complex Instruc-
tion Set Computer). Il existe aussi des microprocesseurs dont le nombre d’instructions est
très réduit (microprocesseurs RISC : Reduced Instruction Set Computer) : entre 10 et
30 instructions, permettant d’améliorer le temps d’exécution des programmes.
Une instruction est définie par son code opératoire, valeur numérique binaire difficile à
manipuler par l’être humain. On utilise donc une notation symbolique pour représenter
les instructions : les mnémoniques. Un programme constitué de mnémoniques est appelé
programme en assembleur.
Les instructions peuvent être classées en groupes :
• instructions de transfert de données ;
• instructions arithmétiques ;
• instructions logiques ;
• instructions de branchement ...
1 Mo FFFFFH
0 00000H
1 Mo FFFFFH
mov bl, es : 1200H
BL
extra
segment ES : 1200H
offset = 1200H
ES : 0000H
0 00000H
5.2 - Les instructions de transfert 35
mov byte ptr 1100H , 65H mov word ptr 1100H , 65H
1101H 00H
2 octets
1100H 65H 1 octet 1100H 65H
Remarque : les microprocesseurs Intel rangent l’octet de poids faible d’une donnée sur
plusieurs octets à l’adresse la plus basse (format Little Endian).
Modes d’adressage évolués :
• adressage basé : l’offset est contenu dans un registre de base BX ou BP.
Exemples :
mov al,[bx] : transfère la donnée dont l’offset est contenu dans le registre de
base BX vers le registre AL. Le segment associé par défaut au registre BX est
le segment de données : on dit que l’adressage est basé sur DS ;
mov al,[bp] : le segment par défaut associé au registre de base BP est le
segment de pile. Dans ce cas, l’adressage est basé sur SS.
1 Mo FFFFFH 1 Mo FFFFFH
mov al, bx mov al, bp
AL AL
segment segment
de données DS : BX SS : BP
offset = BX de pile offset = BP
DS : 0000H SS : 0000H
0 00000H 0 00000H
• adressage indexé : semblable à l’adressage basé, sauf que l’offset est contenu dans
un registre d’index SI ou DI, associés par défaut au segment de données.
Exemples :
mov al,[si] : charge le registre AL avec le contenu de la case mémoire dont
l’offset est contenu dans SI ;
36 Chapitre 5 - La programmation en assembleur du microprocesseur 8086
Remarque : une valeur constante peut éventuellement être ajoutée aux registres de base
ou d’index pour obtenir l’offset. Exemple :
mov [si+100H],ax
qui peut aussi s’écrire
mov [si][100H],ax
ou encore
mov 100H[si],ax
mov si,0
mov word ptr table[si],1234H
mov si,2
mov word ptr table[si],5678H
Dans cet exemple, table représente l’offset du premier élément du tableau et le registre
SI joue le rôle d’indice de tableau :
56H
DS : table SI 78H
12H
DS : table 0 34H
• adressage basé et indexé : l’offset est obtenu en faisant la somme d’un registre
de base, d’un registre d’index et d’une valeur constante. Exemple :
mov ah,[bx+si+100H]
Ce mode d’adressage permet l’adressage de structures de données complexes : ma-
trices, enregistrements, ... Exemple :
mov bx,10
mov si,15
mov byte ptr matrice[bx][si],12H
mov al,10010110B AL = 1 0 0 1 0 1 1 0
mov bl,11001101B → BL = 1 1 0 0 1 1 0 1
and al, bl AL = 1 0 0 0 0 1 0 0
5.4 - Les instructions logiques 39
Application : masquage de bits pour mettre à zéro certains bits dans un mot.
Exemple : masquage des bits 0, 1, 6 et 7 dans un octet :
7 6 5 4 3 2 1 0
0 1 0 1 0 1 1 1
0 0 1 1 1 1 0 0 ← masque
0 0 0 1 0 1 0 0
OU logique : OR opérande1,opérande2
L’opération effectuée est : opérande1 ← opérande1 OU opérande2.
Application : mise à 1 d’un ou plusieurs bits dans un mot.
Exemple : dans le mot 10110001B on veut mettre à 1 les bits 1 et 3 sans modifier les
autres bits.
7 6 5 4 3 2 1 0
1 0 1 1 0 0 0 1
0 0 0 0 1 0 1 0 ← masque
1 0 1 1 1 0 1 1
Les instructions correspondantes peuvent s’écrire :
mov ah,10110001B
or ah,00001010B
Dans les rotations, les bits déplacés dans un sens sont réinjectés de l’autre côté du mot.
Décalage logique vers la droite (Shift Right) : SHR opérande,n
Cette instruction décale l’opérande de n positions vers la droite.
Exemple :
mov al,11001011B
shr al,1
avant
1 1 0 0 1 0 1 1
après CF
0 1 1 0 0 1 0 1 1
→ entrée d’un 0 à la place du bit de poids fort ; le bit sortant passe à travers l’indicateur
de retenue CF.
Remarque : si le nombre de bits à décaler est supérieur à 1, ce nombre doit être placé
dans le registre CL ou CX.
Exemple : décalage de AL de trois positions vers la droite :
mov cl,3
shr al,cl
Décalage logique vers la gauche (Shift Left) : SHL opérande,n
Cette instruction décale l’opérande de n positions vers la droite.
Exemple :
mov al,11001011B
shl al,1
avant
1 1 0 0 1 0 1 1
CF après
1 1 0 0 1 0 1 1 0
→ entrée d’un 0 à la place du bit de poids faible ; le bit sortant passe à travers l’indicateur
de retenue CF.
Même remarque que précédemment si le nombre de positions à décaler est supérieur à 1.
Décalage arithmétique vers la droite : SAR opérande,n
Ce décalage conserve le bit de signe bien que celui-ci soit décalé.
Exemple :
mov al,11001011B
sar al,1
avant
1 1 0 0 1 0 1 1
après CF
1 1 1 0 0 1 0 1 1
après CF
1 1 1 0 0 1 0 1 1
→ réinjection du bit sortant qui est copié dans l’indicateur de retenue CF.
Rotation à gauche (Rotate Left) : ROL opérande,n
Cette instruction décale l’opérande de n positions vers la gauche et réinjecte par la droite
les bits sortant.
Exemple :
mov al,11001011B
rol al,1
s
42 Chapitre 5 - La programmation en assembleur du microprocesseur 8086
avant
1 1 0 0 1 0 1 1
CF après
1 1 0 0 1 0 1 1 1
→ réinjection du bit sortant qui est copié dans l’indicateur de retenue CF.
Rotation à droite avec passage par l’indicateur de retenue (Rotate Right through
Carry) : RCR opérande,n
Cette instruction décale l’opérande de n positions vers la droite en passant par l’indicateur
de retenue CF.
Exemple :
mov al,11001011B
rcr al,1
avant
valeur 1 1 0 0 1 0 1 1
précédente
de CF après CF
x 1 1 0 0 1 0 1 1
→ le bit sortant par la droite est copié dans l’indicateur de retenue CF et la valeur
précédente de CF est réinjectée par la gauche.
Rotation à gauche avec passage par l’indicateur de retenue (Rotate Left through
Carry) : RCL opérande,n
Cette instruction décale l’opérande de n positions vers la gauche en passant par l’indicateur
de retenue CF.
Exemple :
mov al,11001011B
rcl al,1
avant
1 1 0 0 1 0 1 1 valeur
précédente
CF après de CF
1 1 0 0 1 0 1 1 x
→ le bit sortant par la gauche est copié dans l’indicateur de retenue CF et la valeur
précédente de CF est réinjectée par la droite.
Remarque : il existe un autre type de saut conditionnel, les sauts arithmétiques. Ils
suivent en général l’instruction de comparaison : CMP opérande1,opérande2
condition nombres signés nombres non signés
= JEQ label JEQ label
> JG label JA label
< JL label JB label
= JNE label JNE label
Exemple :
cmp ax,bx
jg superieur
jl inferieur
superieur : ...
.
.
.
inferieur : ...
début
N1 + N2 mov al,[1100H]
add al,[1101H]
js negatif
résultat oui jz nul
>0
mov [1102H],al
non jmp fin
negatif : mov [1103H],al
résultat oui ranger le résultat
à l'offset 1103H jmp fin
=0
ranger le résultat
nul : mov [1104H],al
non à l'offset 1104H fin : hlt
ranger le résultat
à l'offset 1102H
fin
programme valeur de IP
principal après l'appel
sous- au sous-programme
valeur de IP programme
avant l'appel 2000H
LL
au sous-programme
CA
valeur de IP 1000H
au retour du 1002H
sous-programme
RE
T
2100H valeur de IP
à la fin du
sous-programme
Avant de charger IP avec l’adresse du sous-programme, l’adresse de retour au programme
principal, c’est-à-dire le contenu de IP, est sauvegardée dans une zone mémoire particulière
appelée pile. Lors de l’exécution de l’instruction RET, cette adresse est récupérée à partir
de la pile et rechargée dans IP, ainsi le programme appelant peut se poursuivre.
Fonctionnement de la pile : la pile est une zone mémoire fonctionnant en mode LIFO
(Last In First Out : dernier entré, premier sorti). Deux opérations sont possibles sur la
pile :
• empiler une donnée : placer la donnée au sommet de la pile ;
• dépiler une donnée : lire la donnée se trouvant au sommet de la pile.
46 Chapitre 5 - La programmation en assembleur du microprocesseur 8086
Le sommet de la pile est repéré par un registre appelé pointeur de pile (SP : Stack
Pointer) qui contient l’adresse de la dernière donnée empilée.
La pile est définie dans le segment de pile dont l’adresse de départ est contenue dans
le registre SS.
1 Mo FFFFFH
sommet
sens de de la pile
segment de pile
croissance SS : SP
de la pile
SS : 0000H
sens de
croissance segment de code
du programme CS : 0000H
0 00000H
1 Mo FFFFFH
adresse de SS : FFFFH
retour au segment de pile
sous-programme
SS : SP décrémentation
(2 octets) SS : SP de SP de 2 unités
SS : 0000H
0 00000H
La pile peut également également servir à sauvegarder le contenu de registres qui ne sont
pas automatiquement sauvegardés lors de l’appel à un sous programme :
où opérande est un registre ou une donnée sur 2 octets (on ne peut empiler que des mots
de 16 bits).
Exemple :
3
5.5 - Les instructions de branchement 47
• programme principal :
mov ax,200
push ax ; empilage du premier paramètre
mov ax,300
push ax ; empilage du deuxième paramètre
call somme ; appel de la procédure somme
• procédure somme :
somme proc
push bp ; sauvegarde de BP
mov bp,sp ; faire pointer BP sur le sommet de la pile
mov ax,[bp+4] ; récupération du deuxième paramètre
add ax,[bp+6] ; addition au premier paramètre
pop bp ; restauration de l’ancienne valeur de BP
ret 4 ; retour et dépilage des paramètres
somme endp
L’instruction ret 4 permet de retourner au programme principal et d’incrémenter le
pointeur de pile de 4 unités pour dépiler les paramètres afin de remettre la pile dans son
état initial.
Etat de la pile :
avant CALL après CALL après POP BP et RET 4
SS : FFFFH SS : FFFFH SS : FFFFH
segment de pile segment de pile segment de pile
2 octets SS : SP SS : SP
(sommet 2 octets paramètre 1 (200) SS : BP+6
de la pile) 2 octets paramètre 2 (300) SS : BP+4
2 octets adresse de retour retour de la pile
2 octets ancienne valeur de BP SS : SP à son état initial
= SS : BP
6.1 Définitions
Une interface d’entrées/sorties est un circuit intégré permettant au microprocesseur de
communiquer avec l’environnement extérieur (périphériques) : clavier, écran, imprimante,
modem, disques, processus industriel, ...
Les interfaces d’E/S sont connectées au microprocesseur à travers les bus d’adresses, de
données et de commandes.
données
adresses
commandes
D0 - Dn
lignes de
données
A0 - Ap circuit
microprocesseur
lignes d'E/S
périphériques
d'adresses
(p = 1 ou 2, lignes
en général) d'E/S
commandes RD
de lecture/
écriture WR
signal de
CS
selection
de boîtier
00000H
Conséquences :
– l’espace d’adressage des mémoires diminue ;
– l’adressage des ports d’E/S se fait avec une adresse de même longueur (même
nombre de bits) que pour les cases mémoires ;
– toutes les instructions employées avec des cases mémoires peuvent être ap-
pliquées aux ports d’E/S : les mêmes instructions permettent de lire et écrire
dans la mémoire et les ports d’E/S, tous les modes d’adressage étant valables
pour les E/S.
• adressage indépendant : le microprocesseur considère deux espaces distincts :
– l’espace d’adressage des mémoires ;
– l’espace d’adressage des ports d’E/S.
C’est le cas du microprocesseur 8086 :
FFFFFH
circuits
1 Mo mémoire
FFFFH
64 Ko circuits
d'E/S
00000H 0000H
espace mémoire espace E/S
Conséquences :
– contrairement à l’adressage cartographique, l’espace mémoire total adressable
n’est pas diminué ;
– l’adressage des port d’E/S peut se faire avec une adresse plus courte (nombre
de bits inférieur) que pour les circuits mémoires ;
– les instructions utilisées pour l’accès à la mémoire ne sont plus utilisables pour
l’accès aux ports d’E/S : ceux-ci disposent d’instructions spécifiques ;
– une même adresse peut désigner soit une case mémoire, soit un port d’E/S : le
microprocesseur doit donc fournir un signal permettant de différencier l’adres-
sage de la mémoire de l’adressage des ports d’E/S.
Remarque : l’adressage indépendant des ports d’E/S n’est possible que pour les micro-
processeurs possédant un signal permettant de différencier l’adressage de la mémoire de
l’adressage des ports d’E/S ainsi que les instructions spécifiques pour l’accès aux ports
d’E/S. Par contre, l’adressage cartographique est possible pour tous les microprocesseurs.
Ce signal est utilisé pour valider le décodage d’adresse dans les deux espaces :
décodeur 3 vers 8
bus d'adresses
A Y0
B Y1
C Y2 signaux de
74138 Y3 validation
Y4 des circuits
validation
mémoire
G2B Y5
G2A Y6
M/IO
G1 Y7
bus d'adresses
A Y0
B Y1
C Y2 signaux de
74138 Y3 validation
Y4 des circuits
validation
d'E/S
G2B Y5
G2A Y6
+5 V G1 Y7
Les instructions de lecture et d’écriture d’un port d’E/S sont respectivement les instruc-
tions IN et OUT. Elles placent la ligne M/IO à 0 alors que l’instruction MOV place
celle-ci à 1.
Lecture d’un port d’E/S :
• si l’adresse du port d’E/S est sur un octet :
IN AL,adresse : lecture d’un port sur 8 bits ;
IN AX,adresse : lecture d’un port sur 16 bits.
• si l’adresse du port d’E/S est sur deux octets :
IN AL,DX : lecture d’un port sur 8 bits ;
IN AX,DX : lecture d’un port sur 16 bits.
où le registre DX contient l’adresse du port d’E/S à lire.
Ecriture d’un port d’E/S :
• si l’adresse du port d’E/S est sur un octet :
OUT adresse,AL : écriture d’un port sur 8 bits ;
OUT adresse,AX : écriture d’un port sur 16 bits.
• si l’adresse du port d’E/S est sur deux octets :
OUT DX,AL : écriture d’un port sur 8 bits ;
OUT DX,AX : écriture d’un port sur 16 bits.
où le registre DX contient l’adresse du port d’E/S à écrire.
Exemples :
• lecture d’un port d’E/S sur 8 bits à l’adresse 300H :
mov dx,300H
in al,dx
• écriture de la valeur 1234H dans le port d’E/S sur 16 bits à l’adresse 49H :
mov ax,1234H
out 49H,ax
adresses
commandes
Le 8255 est une interface parallèle programmable : elle peut être configurée en entrée
et/ou en sortie par programme.
Brochage du 8255 :
PA3 1 40 PA4
PA2 2 39 PA5
PA1 3 38 PA6
PA0 4 37 PA7
RD 5 36 WR
CS 6 8255 35 RESET
GND 7 34 D0
A1 8 33 D1
A0 9 32 D2
PC7 10 31 D3
PC6 11 30 D4
PC5 12 29 D5
PC4 13 28 D6
PC0 14 27 D7
PC1 15 26 VCC
PC2 16 25 PB7
PC3 17 24 PB6
PB0 18 23 PB5
PB1 19 22 PB4
PB2 20 21 PB3
Schéma fonctionnel :
alimentation
VCC GND
RD 8
port A
WR (PA0 - PA7)
groupe A
lignes de A0
contrôle A1 8255 4 port C
haut
RESET (PC4 - PC7)
CS
4 port C
bas
groupe B
D0 - D7 (PC0 - PC3)
bus de
données 8 port B
(PB0 - PB7)
D7 D6 D5 D4 D3 D2 D1 D0
drapeau
1 = actif
Groupe A Groupe B
sélection de port C bas
mode : 1 = entrée
00 = mode 0 0 = sortie
01 = mode 1 port B
1x = mode 2 1 = entrée
port A 0 = sortie
1 = entrée
0 = sortie sélection de
mode :
port C haut 0 = mode 0
1 = entrée 1 = mode 1
0 = sortie
Connexion du 8255 sur les bus du 8086 : le bus de données du 8255 est sur 8 bits
alors que celui du microprocesseur 8086 est sur 16 bits. On peut donc connecter le bus de
données du 8255 sur les lignes de données de poids faible du 8086 (D0 - D7) ou sur celles
de poids fort (D8 - D15).
Une donnée est envoyée (ou reçue) par le microprocesseur 8086 :
• sur la partie faible du bus de données lorsque l’adresse à écrire (ou à lire) est paire :
validation par A0 ;
• sur la partie haute lorsque l’adresse est impaire : validation par BHE.
Ainsi l’un de ces deux signaux A0 ou BHE doit être utilisé pour sélectionner le 8255 :
D0 - D7 D0
.
ou . 8255
D8 - D15 .
D7
M/IO
validation RD RD
décodeur WR WR
A3 - A15 d'adresses
CS
A0 ou BHE
A1 A0
A2 A1
Conséquence : les adresses des registres du 8255 se trouvent à des adresses paires (valida-
tion par A0) ou impaires (validation par BHE).
D0
.
D0 - D7 . 8255
.
D7
A8 A Y0
RD RD
A9 B Y1
WR WR
A10 C Y2
74138 Y3
CS
Y4 A0
validation
G2B Y5 A1 A0
M/IO G2A Y6 A2 A1
+5 V G1 Y7
transmetteur
8 bidirectionnel
D0 - D7 A B
8286
8 D0
DT/R DIR .
.
EN . PA
D7
8
D8 - D15 A B 8255
8286
DIR
BHE
EN
PB
M/IO
validation
décodeur
A2- A15 d'adresses
CS
A1 A1 PC
A0 A0
RD RD
WR WR
K0 0
PA0
1
D0
. K1 0
8086 D0 - D7 .. 8255 PA1
1
D7 K2 0
PA2
1
adresse
de base PB0
= 300H
LED
données
adresses
commandes
Exemple : transmission du caractère ’E’ (code ASCII 45H = 01000101B) sous forme série
selon la norme RS232 :
+9 à +15 V
LSB MSB
-9 à -15 V
1 0 1 0 0 0 1 0
horloge
• 8251 (Intel) ;
• 6850 (Motorola).
Connexion de deux équipements par une liaison série RS232 : les équipements
qui peuvent être connectés à travers une liaison série RS232 sont de deux types :
Pour connecter ces équipements, on utilise des connecteurs normalisés DB9 ou DB25 :
1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 11 12 13
6 7 8 9 14 15 16 17 18 19 20 21 22 23 24 25
Seuls les 2 signaux TxD et RxD servent à transmettre les données. Les autres signaux
sont des signaux de contrôle de l’échange de données.
TxD TxD
RxD RxD
RTS RTS
DTE CTS CTS DCE
(ordinateur) DTR DTR (modem)
DSR DSR
DCD DCD
RI RI
GND GND
DTR
RTS DTE
TxD donnée
DSR
DCD DCE
CTS
DTE DTE
microprocesseur
microprocesseur
interface série
interface série
DCE ligne téléphonique DCE
modem modem
Le modem transforme les signaux numériques produits par l’interface série en si-
gnaux analogiques acceptés par la ligne téléphonique et inversement (modulations
numériques FSK, PSK, ...)
• liaison série directe entre deux DTE :
– liaison simple à 3 fils : rebouclage (strapping) des signaux de contrôle :
TxD TxD
RxD RxD
RTS RTS
CTS CTS
DTR DTR
DSR DSR
DCD DCD
RI RI
DTE 1 GND GND DTE 2
Ce câblage ne permet pas le contrôle matériel du flux entre les deux DTE.
– liaison complète : câble Null Modem :
TxD TxD
RxD RxD
RTS RTS
CTS CTS
DTR DTR
DSR DSR
DCD DCD
RI RI
DTE 1 GND GND DTE 2
Ce câblage simule la présence d’un modem (DCE) en croisant les signaux de
contrôle et permet le contrôle matériel du flux.
Brochage du 8250 :
D0 1 40 VCC
D1 2 39 RI
D2 3 38 DCD
D3 4 37 DSR
D4 5 36 CTS
D5 6 8250 35 MR
D6 7 34 OUT1
D7 8 33 DTR
RCLK 9 32 RTS
SIN 10 31 OUT2
SOUT 11 30 INTRPT
CS0 12 29 NC
CS1 13 28 A0
CS2 14 27 A1
BAUDOUT 15 26 A2
XTAL1 16 25 ADS
XTAL2 17 24 CSOUT
DOSTR 18 23 DDIS
DOSTR 19 22 DISTR
GND 20 21 DISTR
Schéma fonctionnel :
interface
microprocesseur UART
D0 - D7
ou D0 - D7 XTAL1 1.8432 MHz
D8 - D15 diviseur ou
d'horloge 2.4576 MHz
RESET MR et XTAL2 ou
générateur 3.072 MHz
RD DISTR de baud
WR DOSTR contrôle RCLK
DISTR et état de BAUDOUT
ligne adaptateur
DOSTR RS232/TTL
M/IO récepteur
validation SIN 1489 RxD
+5 V CS0
décodeur émetteur
A4 - A15 d'adresses CS1 SOUT 1488 TxD
CS2 adaptateur
A0
TTL/RS232 modem
ou
A3 interface modem
BHE A2
A2 A1 RTS 1488 RTS ligne
A1 téléphonique
A0 contrôle DTR 1488 DTR
ADS modem OUT1
OUT2
demande
INTRPT
d'interruption
CTS 1489 CTS
commandes DDIS DSR DSR
état 1489
d'amplificateurs
de bus CSOUT modem DCD 1489 DCD
RI 1489 RI
+5 V VCC GND GND
8250
Accès aux registres du 8250 : le 8250 possède 11 registres. Comme il n’y a que 3 bits
d’adresses (A0, A1 et A2), plusieurs registres doivent se partager la même adresse :
DLAB A2 A1 A0 registre
0 0 0 0 RBR : Receiver Buffer Register, registre de réception
(accessible seulement en lecture)
0 0 0 0 THR : Transmitter Holding Register, registre
d’émission (accessible seulement en écriture)
1 0 0 0 DLL : Divisor Latch LSB, octet de poids faible du di-
viseur d’horloge
1 0 0 1 DLM : Divisor Latch MSB, octet de poids fort du divi-
seur d’horloge
0 0 0 1 IER : Interrupt Enable Register, registre d’autorisation
des interruptions
X 0 1 0 IIR : Interrupt Identification Register, registre d’iden-
tification des interruptions
X 0 1 1 LCR : Line Control Register, registre de contrôle de
ligne
X 1 0 0 MCR : Modem Control Register, registre de contrôle
modem
X 1 0 1 LSR : Line Status Register, registre d’état de la ligne
X 1 1 0 MSR : Modem Status Register, registre d’état du mo-
dem
X 1 1 1 SCR : Scratch Register, registre à usage général
En fonction de l’état de DLAB (Divisor Latch Access Bit = bit de poids fort du registre
LCR), on a accès soit au registre d’émission/réception, soit au diviseur d’horloge, soit au
masque d’interruptions.
Structure des registres :
• Line Control Register (LCR) :
bits 0 et 1 : longueur du mot transmis, bit 1 bit 0
0 0 → 5 bits
0 1 → 6 bits
1 0 → 7 bits
1 1 → 8 bits
bit 2 : nombre de bits de stop, 0 → 1 bit de stop,
1 → 1.5 bits de stop si 5 bits sont
transmis, 2 bits de stop sinon ;
bit 3 : autorisation de parité, 0 → pas de parité,
1 → parité générée et vérifiée ;
bit 4 : sélection de parité, 0 → parité impaire,
1 → parité paire ;
bit 5 : forçage de parité, 0 → parité non forcée
1 → parité fixe ;
fréquence d horloge(quartz)
vitesse (bit/s) =
16 × (DLM, DLL)
Les interruptions
périphérique
microprocesseur interface
Il y a deux méthodes possibles pour recevoir les données provenant des périphériques :
• scrutation périodique (ou polling) : le programme principal contient des ins-
tructions qui lisent cycliquement l’état des ports d’E/S.
Avantage : facilité de programmation.
Inconvénients :
– perte de temps s’il y a de nombreux périphériques à interroger ;
– de nouvelles données ne sont pas toujours présentes ;
– des données peuvent être perdues si elles changent rapidement.
• interruption : lorsqu’une donnée apparaı̂t sur un périphérique, le circuit d’E/S le
signale au microprocesseur pour que celui-ci effectue la lecture de la donnée : c’est
une demande d’interruption (IRQ : Interrupt Request) :
demande
périphérique
d'interruption
microprocesseur interface
Avantage : le microprocesseur effectue une lecture des ports d’E/S seulement lors-
qu’une donnée est disponible, ce qui permet de gagner du temps et d’éviter de perdre
des données.
• port série : demande d’interruption lors de l’arrivée d’un caractère sur la ligne de
transmission.
demande
périphérique
d'interruption
microprocesseur interface
interruption
acceptée
• après l’exécution de l’ISR, les registres sont restaurés à partir de la pile et le micro-
proceseur reprend l’exécution du programme qu’il avait abandonné :
programme
sous-programme
principal
de service
de l'interruption
e
ice d
arrivée de serv uption
err
la demande l'int
d'interruption reto
ur a
prin u prog
cipa ra
l (IR mme
ET )
sous-programme
d'interruption no j
sous-programme
d'interruption no i
mémoire centrale
Lorsque les adresses des sous-programmes d’interruptions sont gérées de cette manière,
on dit que les interruptions sont vectorisées.
Avantage de la vectorisation des interruptions : l’emplacement d’une ISR peut être n’im-
porte où dans la mémoire, il suffit de spécifier le vecteur d’interruption correspondant.
3FFH
type FFH : libre
3FCH
interruptions
libres : disponibles
pour l'utilisateur
103H
type 40H : libre
100H
FCH type 3FH :
FFH réservé par Microsoft interruptions
réservées par
Microsoft dans
un PC : utilisées
par MS-DOS,
83H type 20H : Windows, ...
80H réservé par Microsoft
7FH type 1FH :
7CH réservé par Intel
interruptions
réservées par
Intel
17H type 05H :
14H réservé par Intel
13H type 04H :
10H overflow
0FH type 03H :
0CH instruction int sur 1 octet
0BH type 02H : CS 2 octets
08H NMI IP 2 octets
07H type 01H :
04H pas à pas
03H type 00H :
00H division par zéro
Schéma fonctionnel :
+5 V
D0 - D7 VCC
ou D0 - D7 IR0
D8 - D15 IR1
RD RD IR2
M/IO 8259 entrées de
validation WR WR IR3
demandes
décodeur IR4
A2 - A15 d'adresses d'interruptions
IR5
CS IR6
A0
ou IR7
A1 A0
BHE
CAS0 mise en
INTR INT
CAS1 cascade
INTA INTA
CAS2 de plusieurs
GND SP/EN 8259
Transfert de données :
Général
MOV Déplacement d’un octet ou d’un mot
PUSH Ecriture d’un mot au sommet de la pile
POP Lecture d’un mot au sommet de la pile
XCHG Echange d’octets ou de mots
XLAT ou Traduction d’un octet à l’aide d’une table
XLATB
Entrées/Sorties
IN Lecture d’un port d’E/S
OUT Ecriture d’un port d’E/S
Transfert d’adresses
LEA Chargement d’une adresse effective
LDS Chargement d’un pointeur utilisant DS
LES Chargement d’un pointeur utilisant ES
Transfert des flags
LAHF Transfert des 5 flags bas dans AH
SAHF Transfert de AH dans les 5 flags bas
PUSHF Sauvegarde des flags sur la pile
POPF Restauration des flags à partir de la pile
Instructions arithmétiques :
Addition
ADD Addition d’octets ou de mots
ADC Addition d’octets ou de mots avec retenue
INC Incrémentation de 1 d’un octet ou d’un mot
AAA Ajustement ASCII de l’addition
DAA Ajustement décimal de l’addition
Soustraction
SUB Soustraction d’octets ou de mots
SBB Soustraction d’octets ou de mots avec retenue
DEC Décrémentation de 1 d’un octet ou d’un mot
NEG Complémentation à 2 d’un octet ou d’un mot (change-
ment de signe)
CMP Comparaison d’octets ou de mots
AAS Ajustement ASCII de la soustraction
DAS Ajustement décimal de la soustraction
Multiplication
MUL Multiplication non signée d’octets ou de mots
IMUL Multiplication signée d’octets ou de mots
AAM Ajustement ASCII de la multiplication
Division
DIV Division non signée d’octets ou de mots
IDIV Division signée d’octets ou de mots
AAD Ajustement ASCII de la division
CBW Conversion d’octet en mot
CWD Conversion de mot en double mot
Instructions logiques :
Logique
NOT Complément à 1 d’un octet ou d’un mot
AND ET logique de deux octets ou de deux mots
OR OU logique de deux octets ou de deux mots
XOR OU exclusif logique de deux octets ou de deux mots
TEST Comparaison, à l’aide d’un ET, d’octets ou de mots
Décalages
SHL/SAL Décalage à gauche arithmétique ou logique (octet ou
mot)
SHR Décalage logique à droite d’un octet ou d’un mot
SAR Décalage arithmétique à droite d’un octet ou d’un mot
Rotations
ROL Rotation à gauche d’un octet ou d’un mot)
ROR Rotation à droite d’un octet ou d’un mot
RCL Rotation à gauche incluant CF (octet ou mot)
RCR Rotation à droite incluant CF (octet ou mot)
Préfixes
REP Répétition tant que CX n’est pas nul
REPE ou REPZ Répétition tant qu’il y a égalité et que CX n’est pas nul
REPNE ou Répétition tant qu’il n’y a pas égalité et que CX n’est
REPNZ pas nul
Instructions
MOVS ou Déplacement de blocs d’octets ou de mots
MOVSB/MOVSW
CMPS ou Comparaison de blocs d’octets ou de mots
CMPSB/CMPSW
SCAS ou Exploration d’un bloc d’octets ou de mots
SCASB/SCASW
LODS ou Tranfert d’un octet ou d’un mot dans AL ou AX
LODSB/LODSW
STOS ou Chargement d’un bloc d’octets ou de mots par AL ou
STOSB/STOSW AX
Instructions de branchements :
Branchements inconditionnels
CALL Appel de procédure
RET Retour d’une procédure
JMP Saut inconditionnel
Contrôles d’itérations
LOOP Bouclage tant que CX = 0
LOOPE ou Bouclage tant que CX = 0 et ZF = 1 (égalité)
LOOPZ
LOOPNE ou Bouclage tant que CX = 0 et ZF = 0 (inégalité)
LOOPNZ
JCXZ Saut si CX est nul
Interruptions
INT Interruption logicielle
INTO Interruption si OF = 1 (overflow)
IRET Retour d’une interruption
Sauts conditionnels
JA ou JNBE (1) Saut si « supérieur » (si CF + ZF = 0)
JAE ou JNB (1) Saut si « supérieur ou égal » (si CF = 0)
JB ou JNAE (1) Saut si « inférieur » (si CF = 1)
JBE ou JNA (1) Saut si « inférieur ou égal » (si CF + ZF = 1)
JC Saut en cas de retenue (si CF = 1)
JE ou JZ Saut si « égal » ou « nul » (si ZF = 1)
JG ou JNLE (2) Saut si « plus grand » (si (SF ⊕ OF) + ZF = 0)
JGE ou JNL (2) Saut si « plus grand ou égal » (si SF ⊕ OF = 0)
JL ou JNGE (2) Saut si « plus petit » (si SF ⊕ OF = 1)
JLE ou JNG (2) Saut si « plus petit ou égal » (si (SF ⊕ OF) + ZF = 1)
JNC Saut si « pas de retenue » (si CF = 0)
JNE ou JNZ Saut si « non égal » ou « non nul » (si (ZF = 0)
JNO Saut si « pas de dépassement » (si OF = 0)
JNP ou JPO Saut si « parité impaire » (si PF = 0)
JNS Saut si « signe positif » (si SF = 0)
JO Saut si « dépassement » (si OF = 1)
JP ou JPE Saut si « parité paire » (si PF = 1)
JS Saut si « signe négatif » (si SF = 1)
(1)
concerne des nombres non signés.
(2)
concerne des nombres signés.