Vous êtes sur la page 1sur 108

Architecture des ordinateurs

GTR 1999-2000

Emmanuel Viennet
IUT de Villetaneuse
Dpartement GTR
viennet@lipn.univ-paris13.fr

Licence
c
Copyright 1995-2001
par Emmanuel Viennet.
Ce document peut tre librement lu, stock, reproduit, diffus, traduit et cit par tous
moyens et sur tous supports aux conditions suivantes :
Tout lecteur ou utilisateur de ce document reconnat avoir pris connaissance de
ce quaucune garantie nest donne quant son contenu, tous points de vue,
notamment vracit, prcision et adquation pour toute utilisation ;
il nest procd aucune modification autre que cosmtique, changement de format
de reprsentation, traduction, correction dune erreur de syntaxe vidente, ou en
accord avec les clauses ci-dessous ;
le nom, le logo et les coordonnes de lauteur devront tre prservs sur toutes les
versions drives du document tous les endroits o ils apparaissent dans loriginal, les noms et logos dautres contributeurs ne pourront pas apparatre dans
une taille suprieure celle des auteurs prcdents, des commentaires ou additions
peuvent tres insrs condition dapparatre clairement comme tels ;
les traductions ou fragments doivent faire clairement rfrence une copie originale complte, si possible une copie facilement accessible ;
les traductions et les commentaires ou ajouts insrs doivent tre dats et leur(s)
auteur(s) doi(ven)t tre identifiable(s) (ventuellement au travers dun alias) ;
cette licence est prserve et sapplique lensemble du document et des modifications et ajouts ventuels (sauf en cas de citation courte), quelquen soit le format
de reprsentation ;
quel que soit le mode de stockage, reproduction ou diffusion, toute version imprime doit contenir une rfrence une version numrique librement accessible
au moment de la premire diffusion de la version imprime, toute personne ayant
accs une version numrise de ce document doit pouvoir en faire une copie numrise dans un format directement utilisable et si possible ditable, suivant les
standards publics, et publiquement documents en usage ;
La transmission de ce document un tiers se fait avec transmission de cette licence,
sans modification, et en particulier sans addition de clause ou contrainte nouvelle, explicite ou implicite, lie ou non cette transmission. En particulier, en cas dinclusion dans
une base de donnes ou une collection, le propritaire ou lexploitant de la base ou de la
collection sinterdit tout droit de regard li ce stockage et concernant lutilisation qui
pourrait tre faite du document aprs extraction de la base ou de la collection, seul ou en
relation avec dautres documents.
Toute incompatibilit des clauses ci-dessus avec des dispositions ou contraintes lE. Viennet - GTR - v1.2d

4
gales, contractuelles ou judiciaires implique une limitation correspondante : droit de lecture, utilisation ou redistribution verbatim ou modifie du document.
Adapt de la licence Licence LLDD v1, octobre 1997, Libre reproduction Copyright
c
Bernard
Lang [F1450324322014]
http://pauillac.inria.fr/~lang/licence/lldd.html

E. Viennet - GTR - v1.2d

Table des matires


Licence
1

Introduction larchitecture
1.1 Prsentation du sujet . . . . . . . . . . . . . . . . . . .
1.2 Reprsentation des donnes . . . . . . . . . . . . . . . .
1.2.1 Introduction . . . . . . . . . . . . . . . . . . . .
1.2.2 Changements de bases . . . . . . . . . . . . . .
1.2.3 Codification des nombres entiers . . . . . . . . .
1.2.4 Reprsentation des caractres . . . . . . . . . .
1.2.5 Reprsentation des nombres rels (norme IEEE)
1.3 Architecture de base dun ordinateur . . . . . . . . . . .
1.3.1 Principes de fonctionnement . . . . . . . . . . .
1.3.2 La mmoire principale (MP) . . . . . . . . . . .
1.3.3 Le processeur central . . . . . . . . . . . . . . .
1.3.4 Liaisons Processeur-Mmoire : les bus . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

9
9
9
9
10
12
13
14
17
17
18
20
23

Introduction au langage machine


2.1 Caractristiques du processeur tudi . . . . . . . . . .
2.2 Jeu dinstruction . . . . . . . . . . . . . . . . . . . . .
2.2.1 Types dinstructions . . . . . . . . . . . . . .
2.2.2 Codage des instructions et mode dadressage .
2.2.3 Temps dexcution . . . . . . . . . . . . . . .
2.2.4 Ecriture des instructions en langage symbolique
2.2.5 Utilisation du programme debug . . . . . . . .
2.3 Branchements . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Saut inconditionnel . . . . . . . . . . . . . . .
2.3.2 Indicateurs . . . . . . . . . . . . . . . . . . .
2.3.3 Sauts conditionnels . . . . . . . . . . . . . . .
2.4 Instructions Arithmtiques et logiques . . . . . . . . .
2.4.1 Instructions de dcalage et de rotation . . . . .
2.4.2 Instructions logiques . . . . . . . . . . . . . .
2.4.3 Correspondance avec le langage C . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

25
25
26
26
27
28
28
30
30
32
32
34
34
35
36
37

E. Viennet - GTR - v1.2d

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

6
3

TABLE DES MATIRES


Lassembleur 80x86
3.1 Lassembleur . . . . . . . . . . . . . . . . . . . .
3.1.1 Pourquoi lassembleur ? . . . . . . . . . .
3.1.2 De lcriture du programme son excution
3.1.3 Structure du programme source . . . . . .
3.1.4 Dclaration de variables . . . . . . . . . .
3.2 Segmentation de la mmoire . . . . . . . . . . . .
3.2.1 Segment de code et de donnes . . . . . .
3.2.2 Dclaration dun segment en assembleur .
3.3 Adressage indirect . . . . . . . . . . . . . . . . .
3.3.1 Exemple : parcours dun tableau . . . . . .
3.3.2 Spcification de la taille des donnes . . . .
3.4 La pile . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1 Notion de pile . . . . . . . . . . . . . . . .
3.4.2 Instructions PUSH et POP . . . . . . . . .
3.4.3 Registres SS et SP . . . . . . . . . . . . .
3.4.4 Dclaration dune pile . . . . . . . . . . .
3.5 Procdures . . . . . . . . . . . . . . . . . . . . . .
3.5.1 Notion de procdure . . . . . . . . . . . .
3.5.2 Instructions CALL et RET . . . . . . . . .
3.5.3 Dclaration dune procdure . . . . . . . .
3.5.4 Passage de paramtres . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Notions de compilation
4.1 Langages informatiques . . . . . . . . . . . . . . . . .
4.1.1 Interprteurs et compilateurs . . . . . . . . . .
4.1.2 Principaux langages . . . . . . . . . . . . . .
4.2 Compilation du langage C sur PC . . . . . . . . . . .
4.2.1 Traduction dun programme simple . . . . . .
4.2.2 Fonctions C et procdures . . . . . . . . . . .
4.3 Utilisation dassembleur dans les programmes C sur PC
Le systme dexploitation
5.1 Notions gnrales . . . . . . . . . . . . . . . . . . . .
5.2 Prsentation du BIOS . . . . . . . . . . . . . . . . . .
5.2.1 Les fonctions du BIOS . . . . . . . . . . . . .
5.2.2 Vecteurs dinterruptions . . . . . . . . . . . .
5.2.3 Appel systme : instruction INT n . . . . . . .
5.2.4 Traitants dinterruptions . . . . . . . . . . . .
5.2.5 Quelques fonctions du BIOS . . . . . . . . . .
5.3 Prsentation du DOS . . . . . . . . . . . . . . . . . .
5.3.1 Description de quelques fonctions du DOS . .
5.4 Modification dun vecteur dinterruption en langage C .

E. Viennet - GTR - v1.2d

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

39
39
39
40
40
40
43
43
44
44
46
47
47
47
47
48
48
51
51
51
52
52

.
.
.
.
.
.
.

55
55
55
56
56
57
59
61

.
.
.
.
.
.
.
.
.
.

63
63
64
64
65
65
66
66
66
66
67

TABLE DES MATIRES


5.4.1
5.4.2
6

Ecriture dun traitant dinterruption en C . . . . . . . . .


Installation dun traitant . . . . . . . . . . . . . . . . . .

Les interruptions
6.1 Prsentation . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Interruption matrielle sur PC . . . . . . . . . . . . . . .
6.2.1 Signaux dinterruption . . . . . . . . . . . . . . .
6.2.2 Indicateur IF . . . . . . . . . . . . . . . . . . . .
6.2.3 Contrleur dinterruptions . . . . . . . . . . . . .
6.2.4 Droulement dune interruption externe masquable
6.3 Exemple : gestion de lheure sur PC . . . . . . . . . . . .
6.4 Entres/Sorties par interruption . . . . . . . . . . . . . . .
6.4.1 Un exemple . . . . . . . . . . . . . . . . . . . . .
Les entres/sorties
7.1 Les bus du PC . . . . . . . . . . . . . . . . . . . . .
7.1.1 Bus local . . . . . . . . . . . . . . . . . . .
7.1.2 Bus dextension du PC . . . . . . . . . . . .
7.1.3 Bus local PCI . . . . . . . . . . . . . . . . .
7.2 Bus de priphriques . . . . . . . . . . . . . . . . .
7.2.1 Bus SCSI . . . . . . . . . . . . . . . . . . .
7.2.2 Bus PCMCIA . . . . . . . . . . . . . . . . .
7.3 Les entres/sorties sur PC . . . . . . . . . . . . . . .
7.3.1 Gnralits . . . . . . . . . . . . . . . . . .
7.3.2 Modes de transfert . . . . . . . . . . . . . .
7.4 Linterface dentres/sorties sries asynchrones . . .
7.4.1 Pourquoi une transmission srie ? . . . . . .
7.4.2 Principe de la transmission srie asynchrone .
7.4.3 Linterface dE/S sries 8250 . . . . . . . . .
7.4.4 Programmation de linterface en langage C .
7.4.5 Normes RS-232 et V24 . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Les priphriques
8.1 Terminaux interactifs . . . . . . . . . . . . . . . . . . . . . .
8.1.1 Claviers . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.2 Ecrans et affichage . . . . . . . . . . . . . . . . . . .
8.1.3 Mode alphanumrique et mode graphique . . . . . . .
8.2 Mmoires secondaires . . . . . . . . . . . . . . . . . . . . .
8.2.1 Lenregistrement magntique . . . . . . . . . . . . . .
8.2.2 Les disques durs . . . . . . . . . . . . . . . . . . . .
8.2.3 Lecteurs de CD-ROM . . . . . . . . . . . . . . . . .
8.2.4 Autres supports optiques : WORM, magnto-optiques
8.2.5 Bandes magntiques . . . . . . . . . . . . . . . . . .

E. Viennet - GTR - v1.2d

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

67
68

.
.
.
.
.
.
.
.
.

69
69
70
70
70
71
71
72
73
73

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

75
75
76
76
77
78
78
78
78
78
79
79
79
80
81
85
87

.
.
.
.
.
.
.
.
.
.

89
89
89
90
92
93
94
95
97
98
98

8
9

TABLE DES MATIRES


La mmoire
9.1 Mmoire vive . . . . . . . . . . . . . . . . . . .
9.1.1 Technologie des mmoires vives . . . . .
9.1.2 Modules de mmoire SIMM . . . . . . .
9.2 Les Mmoires mortes . . . . . . . . . . . . . . .
9.3 Mmoires caches . . . . . . . . . . . . . . . . .
9.3.1 Hierarchie mmoire . . . . . . . . . . .
9.3.2 Principe gnral des mmoires caches . .
9.3.3 Mmoires associatives . . . . . . . . . .
9.3.4 Efficacit dun cache : principe de localit
9.3.5 Autres aspects . . . . . . . . . . . . . .

10 Architectures actuelles
10.0.1 Microprocesseurs .
10.0.2 Micro-ordinateurs
10.0.3 Stations de travail .
10.0.4 Superordinateurs .
Index

E. Viennet - GTR - v1.2d

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

101
101
101
102
102
103
103
104
104
105
105

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

107
107
107
107
108
108

Partie 1
Introduction larchitecture
1.1

Prsentation du sujet

Le cours dArchitecture des Ordinateurs expose les principes de fonctionnement des ordinateurs. Il ne sagit pas ici dapprendre programmer, mais de comprendre, bas niveau, lorganisation de ces machines.
Nous nous appuierons sur ltude dtaille de larchitecture du PC, dont nous
tudierons le processeur et son langage machine, les fonctions de base de son systme dexploitation (BIOS), et ses mcanismes de communication avec lextrieur
(entres/sorties).
Nous aborderons aussi le fonctionnement de diffrents priphriques de lordinateur (cran, clavier, disques durs, CD-ROMs...), afin dapprendre les mettre
en uvre bon escient, puis nous conclurons ce cours par un panorama des diffrentes architectures actuelles (processeurs CISC et RISC, stations de travail etc.).

1.2

Reprsentation des donnes

1.2.1 Introduction
Les informations traites par un ordinateur peuvent tre de diffrents types
(texte, nombres, etc.) mais elles sont toujours reprsentes et manipules par lordinateur sous forme binaire. Toute information sera traite comme une suite de 0
et de 1. Lunit dinformation est le chiffre binaire (0 ou 1), que lon appelle bit
(pour binary digit, chiffre binaire).
Le codage dune information consiste tablir une correspondance entre la
reprsentation externe (habituelle) de linformation (le caractre A ou le nombre
36 par exemple), et sa reprsentation interne dans la machine, qui est une suite de
bits.
On utilise la reprsentation binaire car elle est simple, facile raliser techniquement laide de bistables (systme deux tats raliss laide de transistors,
E. Viennet - GTR - v1.2d

10

Partie 1. Introduction larchitecture

voir le cours dlectronique). Enfin, les oprations arithmtiques de base (addition, multiplication etc.) sont faciles exprimer en base 2 (noter que la table de
multiplication se rsume 0x0 = 0, 1x0 = 0 et 1x1 = 1).

1.2.2

Changements de bases

Avant daborder la reprsentation des diffrents types de donnes (caractres,


nombres naturels, nombres rels), il convient de se familiariser avec la reprsentation dun nombre dans une base quelconque (par la suite, nous utiliserons souvent
les bases 2, 8, 10 et 16).
Habituellement, on utilise la base 10 pour reprsenter les nombres, cest dire
que lon crit laide de 10 symboles distincts, les chiffres.
En base b, on utilise b chiffres. Notons ai la suite des chiffres utiliss pour
crire un nombre
x = an an1 ...a1 a0
a0 est le chiffre des units.
En dcimal, b = 10, ai {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ;
En binaire, b = 2, ai {0, 1} : 2 chiffres binaires, ou bits ;
En hexadcimal, b = 16, ai {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
(on utilise les 6 premires lettres comme des chiffres).
Reprsentation des nombres entiers
En base 10, on crit par exemple 1996 pour reprsenter le nombre
1996 = 1 103 + 9 102 + 9 101 + 6 100
Dans le cas gnral, en base b, le nombre reprsent par une suite de chiffres
an an1 ...a1 a0 est donn par :
an an1 ...a1 a0 =

n
X

ai b i

i=0

a0 est le chiffre de poids faible, et an le chiffre de poids fort.


Exemple en base 2 :
(101)2 = 1 22 + 0 21 + 1 20 = 4 + 0 + 1 = 5
La notation ( )b indique que le nombre est crit en base b.
Reprsentation des nombres fractionnaires
Les nombres fractionnaires sont ceux qui comportent des chiffres aprs la virgule.
E. Viennet - GTR - v1.2d

1.2

Reprsentation des donnes

11

Dans le systme dcimal, on crit par exemple :


12, 346 = 1 101 + 2 100 + 3 101 + 4 102 + 6 103
En gnral, en base b, on crit :
an an1 ...a1 a0 , a1 a2 ...ap = an bn +an1 bn1 +...+a0 b0 +a1 b1 +...+ap bp
Passage dune base quelconque la base 10
Il suffit dcrire le nombre comme ci-dessus et deffectuer les oprations en
dcimal.
Exemple en hexadcimal :
(AB)16 = 10 161 + 11 160 = 160 + 11 = (171)10
(en base 16, A reprsente 10, B 11, et F 15).
Passage de la base 10 vers une base quelconque
Nombres entiers On procde par divisions successives. On divise le nombre
par la base, puis le quotient obtenu par la base, et ainsi de suite jusqua obtention
dun quotient nul.
La suite des restes obtenus correspond aux chiffres dans la base vise, a0 a1 ...an .
Exemple : soit convertir (44)10 vers la base 2.
44 = 22 x 2 + 0
22 = 11 x 2 + 0
11 = 2 x 5 + 1
5=2x2+1
2=1x2+0
1=0x2+1

=
=
=
=
=
=

a0
a1
a2
a3
a4
a5

=0
=0
=1
=1
=0
=1

Donc (44)10 = (101100)2 .


Nombres fractionnaires On multiplie la partie fractionnaire par la base en rptant lopration sur la partie fractionnaire du produit jusqua ce quelle soit nulle
(ou que la prcision voulue soit atteinte).
Pour la partie entire, on procde par divisions comme pour un entier.
Exemple : conversion de (54, 25)10 en base 2
Partie entire : (54)10 = (110110)2 par divisions.
Partie fractionnaire :
0,25 x 2 = 0,50 = a1 = 0
0,50 x 2 = 1,00 = a2 = 1
0,00 x 2 = 0,00 = a3 = 0
E. Viennet - GTR - v1.2d

12

Partie 1. Introduction larchitecture

Cas des bases 2, 8 et 16


Ces bases correspondent des puissances de 2 (21 , 23 et 24 ), do des passages
de lune lautre trs simples. Les bases 8 et 16 sont pour cela trs utilises en
informatique, elles permettent de reprsenter rapidement et de manire compacte
des configurations binaires.
La base 8 est appele notation octale, et la base 16 notation hexadcimale.
Chaque chiffre en base 16 (24 ) reprsente un paquet de 4 bits conscutifs. Par
exemple :
(10011011)2 = (1001 1011)2 = (9B)16
De mme, chaque chiffre octal reprsente 3 bits.
On manipule souvent des nombres forms de 8 bits, nomms octets, qui sont
donc nots sur 2 chiffres hexadcimaux.
Oprations arithmtiques
Les oprations arithmtiques seffectuent en base quelconque b avec les mmes
mthodes quen base 10. Une retenue ou un report apparait lorsque lon atteint ou
dpasse la valeur b de la base.

1.2.3

Codification des nombres entiers

La reprsentation (ou codification) des nombres est ncessaire afin de les stocker et manipuler par un ordinateur. Le principal problme est la limitation de
la taille du codage : un nombre mathmatique peut prendre des valeurs arbitrairement grandes, tandis que le codage dans lordinateur doit seffectuer sur un
nombre de bits fix.
Entiers naturels
Les entiers naturels (positifs ou nuls) sont cods sur un nombre doctets fix
(un octet est un groupe de 8 bits). On rencontre habituellement des codages sur 1,
2 ou 4 octets, plus rarement sur 64 bits (8 octets, par exemple sur les processeurs
DEC Alpha).
Un codage sur n bits permet de reprsenter tous les nombres naturels compris
entre 0 et 2n 1. Par exemple sur 1 octet, on pourra coder les nombres de 0
255 = 28 1.
On reprsente le nombre en base 2 et on range les bits dans les cellules binaires
correspondant leur poids binaire, de la droite vers la gauche. Si ncessaire, on
complte gauche par des zros (bits de poids fort).
E. Viennet - GTR - v1.2d

1.2

Reprsentation des donnes

13

Entiers relatifs
Il faut ici coder le signe du nombre. On utilise le codage en complment
deux, qui permet deffectuer ensuite les oprations arithmtiques entre nombres
relatifs de la mme faon quentre nombres naturels.
1. Entiers positifs ou nuls : On reprsente le nombre en base 2 et on range
les bits comme pour les entiers naturels. Cependant, la cellule de poids fort
est toujours 0 : on utilise donc n 1 bits.
Le plus grand entier positif reprsentable sur n bits en relatif est donc 2n1
1.
2. Entiers ngatifs : Soit x un entier positif ou nul reprsent en base 2 sur
n 1 bits
x=

n2
X

i 2i , avec i {0, 1}

i=0

et soit
y=

n2
X

(1 i ) 2i + 1

i=0

On constate facilement que x + y = 2n1 , i


Or sur n bits, 2n1 est reprsent par n 1 zros, donc on x + y = 0
modulo 2n1 , ou encore y = x. y peut tre considr comme loppos de
x.
La reprsentation de x est obtenue par complmentation 2n1 de x. On
dit complment deux.
Pour obtenir le codage dun nombre x ngatif, on code en binaire sa valeur
absolue sur n 1 bits, puis on complmente (ou inverse) tous les bits et on
ajoute 1.
Exemple : soit coder la valeur -2 sur 8 bits. On exprime 2 en binaire, soit
00000010. Le complment 1 est 11111101. On ajoute 1 et on obtient le
rsultat : 1111 1110.
Remarques :
(a) le bit de poids fort dun nombre ngatif est toujours 1 ;
(b) sur n bits, le plus grand entier positif est 2n1 1 = 011 . . . 1 ;
(c) sur n bits, le plus petit entier ngatif est 2n1 .

1.2.4

Reprsentation des caractres

Les caractres sont des donnes non numriques : il ny a pas de sens additionner ou multiplier deux caractres. Par contre, il est souvent utile de comparer
deux caractres, par exemple pour les trier dans lordre alphabtique.
E. Viennet - GTR - v1.2d

Les caractres, appels symboles alphanumriques, incluent les lettres majuscules et minuscules, les symboles de ponctuation (& ~ , . ; # " - etc...),
et les chiffres.
Un texte, ou chane de caractres, sera reprsent comme une suite de caractres.
Le codage des caractres est fait par une table de correspondance indicant
la configuration binaire reprsentant chaque caractre. Les deux codes les plus
connus sont lEBCDIC (en voie de disparition) et le code ASCII (American Standard Code for Information Interchange).
Le code ASCII reprsente chaque caractre sur 7 bits (on parle parfois de code
ASCII tendu, utilisant 8 bits pour coder des caractres supplmentaires).
Notons que le code ASCII original, dfini pour les besoins de linformatique
en langue anglaise) ne permet la reprsentation des caractre accentus (, , , ,
...), et encore moins des caractres chinois ou arabes. Pour ces langues, dautres
codages existent, utilisant 16 bits par caractres.
La table page 16 donne le code ASCII. A chaque caractre est associ une
configuration de 8 chiffres binaires (1 octet), le chiffre de poids fort (le plus
gauche) tant toujours gal zero. La table indique aussi les valeurs en base 10
(dcimal) et 16 (hexadcimal) du nombre correspondant.
Plusieurs points importants propos du code ASCII :
Les codes compris entre 0 et 31 ne reprsentent pas des caractres, ils ne
sont pas affichables. Ces codes, souvent nomms caractres de contrles
sont utiliss pour indiquer des actions comme passer la ligne (CR, LF),
mettre un bip sonore (BEL), etc.
Les lettres se suivent dans lordre alphabtique (codes 65 90 pour les majuscules, 97 122 pour les minuscules), ce qui simplifie les comparaisons.
On passe des majuscules au minuscules en modifiant le 5ime bit, ce qui
revient ajouter 32 au code ASCII dcimal.
Les chiffres sont rangs dans lordre croissant (codes 48 57), et les 4 bits
de poids faibles dfinissent la valeur en binaire du chiffre.

1.2.5

Reprsentation des nombres rels (norme IEEE)

Soit codifier le nombre 3,25, qui scrit en base 2 (11, 01)2 .


On va normaliser la reprsentation en base 2 de telle sorte quelle scrive
sous la forme
1, ... x 2n
Dans notre exemple 11, 01 = 1, 101 x 21
La reprsentation IEEE code sparment le signe du nombre (ici +), lexposant
n (ici 1), et la mantisse (la suite de bits aprs la virgule), le tout sur 32 bits.
Le codage a la forme : seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm.

1.2

Reprsentation des donnes

15

Le signe est reprsent sur le bit de poids fort s, + est reprsent par 0 et par 1.
Lexposant est cod sur les 8 bits e. On code en binaire la valeur n + 127.
La mantisse est code sur les 23 bits de poids faibles m.
Remarques :
1. Les exposants 00000000 et 11111111 sont interdits :
lexposant 00000000 signifie que le nombre est dnormalis ;
lexposant 11111111 indique que lon na pas affaire un nombre (on
note cette configuration NaN, Not a Number, et on lutilise pour signaler
des erreurs de calculs, comme par exemple une division par 0).
2. Les plus petit exposant est donc -126, et le plus grand +127.
Annexe
Ce petit programme en langage C peut tre utilis pour afficher le codage dun
nombre flottant quelconque :
/* Affichage hexadecimal des 4 octets dun nombre flottant IEEE */
#include <stdio.h>
main() {
float x;
unsigned char *p = (unsigned char *)&x;
printf("Entrer un nombre flottant : \n");
scanf("%f", &x);
printf(" %f -> %x %x %x %x\n", x, *p, *(p+1), *(p+2), *(p+3) );
}

E. Viennet - GTR - v1.2d

16
Dcimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dcimal
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

Partie 1. Introduction larchitecture


Hexa
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
Hexa
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F

Binaire
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
00011000
00011001
00011010
00011011
00011100
00011101
00011110
00011111
Binaire
01000000
01000001
01000010
01000011
01000100
01000101
01000110
01000111
01001000
01001001
01001010
01001011
01001100
01001101
01001110
01001111
01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01011001
01011010
01011011
01011100
01011101
01011110
01011111

E. Viennet - GTR - v1.2d

Caractre
NUL
STX
ETX
EOT
ACK
BEL

LF

CR

NAK

Caractre
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_

Dcimal
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Dcimal
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

Hexa
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
Hexa
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F

Binaire
00100000
00100001
00100010
00100011
00100100
00100101
00100110
00100111
00101000
00101001
00101010
00101011
00101100
00101101
00101110
00101111
00110000
00110001
00110010
00110011
00110100
00110101
00110110
00110111
00111000
00111001
00111010
00111011
00111100
00111101
00111110
00111111
Binaire
01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111
01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
01111001
01111010
01111011
01111100
01111101
01111110
01111111

Caractre
ESPACE
!
"
#
$
%
&

(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
Caractre

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
|
~

1.3

Architecture de base dun ordinateur

1.3

17

Architecture de base dun ordinateur

Dans cette partie, nous dcrivons rapidement larchitecture de base dun ordinateur et
les principes de son fonctionnement.
Un ordinateur est une machine de traitement de linformation. Il est capable dacqurir de linformation, de la stocker, de la transformer en effectuant des traitements
quelconques, puis de la restituer sous une autre forme. Le mot informatique vient de la
contraction des mots information et automatique.
Nous appelons information tout ensemble de donnes. On distingue gnralement
diffrents types dinformations : textes, nombres, sons, images, etc., mais aussi les instructions composant un programme. Comme on la vu dans la premire partie, toute information est manipule sous forme binaire (ou numrique) par lordinateur.

1.3.1 Principes de fonctionnement


Les deux principaux constituants dun ordinateur sont la mmoire principale et le
processeur. La mmoire principale (MP en abrg) permet de stocker de linformation
(programmes et donnes), tandis que le processeur excute pas pas les instructions composant les programmes.

Notion de programme
Un programme est une suite dinstructions lmentaires, qui vont tre excutes dans
lordre par le processeur. Ces instructions correspondent des actions trs simples, comme
additionner deux nombres, lire ou crire une case mmoire, etc. Chaque instruction est
codifie en mmoire sur quelques octets.
Le processeur est capable dexcuter des programmes en langage machine, cest
dire composs dinstructions trs lmentaires suivant un codage prcis. Chaque type de
processeur est capable dexcuter un certain ensemble dinstructions, son jeu dinstructions.
Pour crire un programme en langage machine, il faut donc connatre les dtails du
fonctionnement du processeur qui va tre utilis.

Le processeur
Le processeur est un circuit lctronique complexe qui excute chaque instruction trs
rapidement, en quelques cycles dhorloges. Toute lactivit de lordinateur est cadence
par une horloge unique, de faon ce que tous les circuits lectroniques travaillent ensembles. La frquence de cette horloge sexprime en MHz (millions de battements par
seconde). Par exemple, un ordinateur PC Pentium 133 possde un processeur de type
Pentium et une horloge 133 MHz.
Pour chaque instruction, le processeur effectue schmatiquement les oprations suivantes :
1. lire en mmoire (MP) linstruction excuter ;
2. effectuer le traitement correspondant ;
E. Viennet - GTR - v1.2d

18

Partie 1. Introduction larchitecture

3. passer linstruction suivante.


Le processeur est divis en deux parties (voir figure 1.1), lunit de commande et
lunit de traitement :
lunit de commande est responsable de la lecture en mmoire et du dcodage des
instructions ;
lunit de traitement, aussi appele Unit Arithmtique et Logique (U.A.L.), excute les instructions qui manipulent les donnes.

Processeur

Mmoire Principale
(M.P.)
codes instructions

Unit de commande

Unit de traitement
(U.A.L.)

Programme

donnes
binaires

Donnes

informations
codes en binaire

Unit dentres/sorties

CLAVIER

ECRAN

F IG . 1.1 Architecture schmatique dun ordinateur.

1.3.2

La mmoire principale (MP)

Structure de la MP
La mmoire est divise en emplacements de taille fixe (par exemple 8 bits) utiliss
pour stocker instructions et donnes.
En principe, la taille dun emplacement mmoire pourrait tre quelconque ; en fait, la
plupart des ordinateurs en service aujourdhui utilisent des emplacements mmoire dun
octet (byte en anglais, soit 8 bits, unit pratique pour coder un caractre par exemple).
E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur


Emplacement
0 1 0 1 1 0 1 0

19
Adresse
0
1
2
3
4

N-2
N-1
7 6 5 4 3 2 1 0
numros des bits
bit de poids fort

bit de poids faible

F IG . 1.2 Structure de la mmoire principale.

Dans une mmoire de taille N , on a N emplacements mmoires, numrots de 0


N 1. Chaque emplacement est repr par son numro, appel adresse. Ladresse est le
plus souvent crite en hexadcimal.
La capacit (taille) de la mmoire est le nombre demplacements, exprim en gnral
en kilo-octets ou en mga-octets, voire davantage. Rappelons que le kilo informatique
vaut 1024 et non 1000 (210 = 1024 1000). Voici les multiples les plus utiliss :
1 K (Kilo)
1 M (Mga)
1 G (Giga)
1 T (Tra)

210
220
230
240

= 1024
= 1048 576
= 1 073 741 824
= 1 099 511 627 776

Oprations sur la mmoire


Seul le processeur peut modifier ltat de la mmoire1 .
Chaque emplacement mmoire conserve les informations que le processeur y crit
jusqu coupure de lalimentation lectrique, o tout le contenu est perdu (contrairement
au contenu des mmoires externes comme les disquettes et disques durs).
Les seules oprations possibles sur la mmoire sont :
criture dun emplacement : le processeur donne une valeur et une adresse, et la
mmoire range la valeur lemplacement indiqu par ladresse ;
lecture dun emplacement : le processeur demande la mmoire la valeur contenue
lemplacement dont il indique ladresse. Le contenu de lemplacement lu reste
inchang.
1

Sur certains ordinateurs, les controleurs dentres/sorties peuvent accder directement la


mmoire (accs DMA), mais cela ne change pas le principe de fonctionnement.
E. Viennet - GTR - v1.2d

20

Partie 1. Introduction larchitecture

Unit de transfert
Notons que les oprations de lecture et dcriture portent en gnral sur plusieurs
octets contigs en mmoire : un mot mmoire. La taille dun mot mmoire dpend du
type de processeur ; elle est de
1 octet (8 bits) dans les processeurs 8 bits (par exemple Motorola 6502) ;
2 octets dans les processeurs 16 bits (par exemple Intel 8086) ;
4 octets dans les processeurs 32 bits (par ex. Intel 80486 ou Motorola 68030).

1.3.3

Le processeur central

Le processeur est parfois appel CPU (de langlais Central Processing Unit) ou encore
MPU (Micro-Processing Unit) pour les microprocesseurs.
Un microprocesseur nest rien dautre quun processeur dont tous les constituants
sont runis sur la mme puce lectronique (pastille de silicium), afin de rduire les cots
de fabrication et daugmenter la vitesse de traitement. Les microordinateurs sont tous
quips de microprocesseurs.
Larchitecture de base des processeurs quipant les gros ordinateurs est la mme que
celle des microprocesseurs.

Les registres et laccumulateur


Le processeur utilise toujours des registres, qui sont des petites mmoires internes trs
rapides daccs utilises pour stocker temporairement une donne, une instruction ou une
adresse. Chaque registre stocke 8, 16 ou 32 bits.
Le nombre exact de registres dpend du type de processeur et varie typiquement entre
une dizaine et une centaine.
Parmi les registres, le plus important est le registre accumulateur, qui est utilis pour
stocker les rsultats des oprations arithmtiques et logiques. Laccumulateur intervient
dans une proportion importante des instructions.
Par exemple, examinons ce quil se passe lorsque le processeur excute une instruction
comme Ajouter 5 au contenu de la case memoire dadresse 180 :
1. Le processeur lit et dcode linstruction ;
2. le processeur demande la mmoire la contenu de lemplacement 180 ;
3. la valeur lue est range dans laccumulateur ;
4. lunit de traitement (UAL) ajoute 5 au contenu de laccumulateur ;
5. le contenu de laccumulateur est cris en mmoire ladresse 180.
Cest lunit de commande (voir figure 1.1 page 18) qui dclenche chacune de ces
actions dans lordre. Laddition proprement dite est effectue par lUAL.

Architecture dun processeur accumulateur


La figure 1.3 reprsente larchitecture interne simplifie dun MPU accumulateur.
On y distingue lunit de commande, lUAL, et le dcodeur dinstructions, qui, partir du
code de linstruction lu en mmoire actionne la partie de lunit de commande ncessaire.
E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur

21
BUS DE DONNEES
Reg. mot

Bus de donnes interne

ACC

RTUAL

RI

UAL

RTA
Reg. dtat

Unit de Commande

Dcodeur

IP

Horloge
Bus dadresses interne
Reg. Adr

Quartz

COMMANDES

BUS DADRESSES

F IG . 1.3 Schma simplifi dun processeur. Le processeur est reli lextrieur


par les bus de donnes et dadresses, le signal dhorloge et les signaux de commandes.
Les informations circulent lintrieur du processeur sur deux bus internes, lun pour
les donnes, lautre pour les instructions.
On distingue les registres suivants :
ACC : Accumulateur ;
RTUAL : Registre Tampon de lUAL, stocke temporairement lun des deux oprandes
dune instructions arithmtiques (la valeur 5 dans lexemple donn plus haut) ;
Reg. dtat : stocke les indicateurs, que nous tudierons plus tard ;
RI : Registre Instruction, contient le code de linstruction en cours dexcution (lu en
mmoire via le bus de donnes) ;
IP : Instruction Pointer ou Compteur de Programme, contient ladresse de lemplacement mmoire o se situe la prochaine instruction excuter ;
E. Viennet - GTR - v1.2d

22

Partie 1. Introduction larchitecture

RTA : Registre Tampon dAdresse, utilis pour accder une donne en mmoire.
Les signaux de commandes permettent au processeur de communiquer avec les autres
circuits de lordinateur. On trouve en particulier le signal R/W (Read/Write), qui est utilis
pour indiquer la mmoire principale si lon effectue un accs en lecture ou en criture.

E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur

23

1.3.4 Liaisons Processeur-Mmoire : les bus

BUS DADRESSES

Mmoire
Principale

Processeur
R/W
Signal Lecture/Ecriture

BUS DE DONNEES
F IG . 1.4 Connexions Processeur-Mmoire : bus de donnes, bus dadresse et
signal lecture/criture.
Les informations changes entre la mmoire et le processeur circulent sur des bus.
Un bus est simplement un ensemble de n fils conducteurs, utiliss pour transporter n
signaux binaires.
Le bus dadresse est un bus unidirectionnel : seul le processeur envoie des adresses.
Il est compos de a fils ; on utilise donc des adresses de a bits. La mmoire peut possder
au maximum 2a emplacements (adresses 0 2a 1).
Le bus de donnes est un bus bidirectionnel. Lors dune lecture, cest la mmoire qui
envoie un mot sur le bus (le contenu de lemplacement demand) ; lors dune criture,
cest le processeur qui envoie la donne.

E. Viennet - GTR - v1.2d

24

E. Viennet - GTR - v1.2d

Partie 1. Introduction larchitecture

Partie 2
Introduction au langage machine
Dans cette partie du cours, nous allons tudier la programmation en langage machine
et en assembleur dun microprocesseur. Ltude complte dun processeur rel, comme
le 80486 ou le Pentium fabriqus par Intel, dpasse largement le cadre de ce cours : le
nombre dinstructions et de registres est trs lev. Nous allons ici nous limiter un sousensemble du microprocesseur 80486 (seuls les registres et les instructions les plus simples
seront tudis). De cette faon, nous pourrons tester sur un PC les programmes en langage
machine que nous crirons.

2.1

Caractristiques du processeur tudi

La gamme de microprocesseurs 80x86 quipe les micro-ordinateurs de type PC et


compatibles. Les premiers modles de PC, commercialiss au dbut des annes 1980,
utilisaient le 8086, un microprocesseur 16 bits1 .
Le modles suivants ont utilis successivement le 80286, 80386, 80486 et Pentium (ou
80586)2 . Chacun de ces processeurs est plus puissant que les prcdents : augmentation
de la frquence dhorloge, de la largeur de bus (32 bits dadresse et de donnes), introduction de nouvelles instructions (par exemple calcul sur les rels) et ajout de registres.
Chacun dentre eux est compatible avec les modles prcdents ; un programme crit dans
le langage machine du 286 peut sexcuter sans modification sur un 486. Linverse nest
pas vrai, puisque chaque gnration a ajout des instructions nouvelles. On parle donc de
compatibilit ascendante.
Du fait de cette compatibilit, il est possible de programmer le 486, utilis dans nos
salles de Travaux Pratiques, comme un processeur 16 bits. Cest ce que nous ferons cette
anne par souci de simplification. Ainsi, nous nutiliserons que des registres de 16 bits.
1
2

Avec un bus dadresses de 20 bits pour grer jusqua 1Mo de mmoire.


Les PC actuels (1996) sont quips de Pentium, cadenc environ 100 MHz.

E. Viennet - GTR - v1.2d

26

Partie 2. Introduction au langage machine


Voici les caractristiques du processeur simplifi que nous tudierons :

CPU 16 bits accumulateur :


bus de donnes 16 bits ;
bus dadresse 32 bits ;
Registres :
accumulateur AX (16 bits) ;
registres auxiliaires BX et CX (16 bits) ;
pointeur dinstruction IP (16 bits) ;
registres segments CS, DS, SS (16 bits) ;
pointeur de pile SP (16 bits), et pointeur BP (16 bits).
Les registres IP et AX (accumulateur) ont dja t tudis. Les autres le seront progressivement dans ce chapitre.
Nous verrons plus loin que les registres de donnes de 16 bits peuvent parfois tre
utiliss comme deux registres indpendants de 8 bits (AX devient la paire (AH,AL)) :
8 bits
z
|

}|

AH

8 bits
{z
{z

}|

AL

8 bits
{

}|

BH

8 bits
{z
{z

}|

BL

8 bits
{

}|

CH

8 bits
{z
{z

}|

CL

{
}

AX (16 bits)
BX (16 bits)
CX (16 bits)
Noter que nous voquons ici uniquement les registres qui apparaissent explicitement
dans lcriture des instructions, et pas les registres intermdiaires tels que RI, RTUAL et
RTA.

2.2

Jeu dinstruction

2.2.1

Types dinstructions

Instructions daffectation
Dclenchent un transfert de donnes entre lun des registres du processeur et la mmoire principale.
transfert CPU Mmoire Principale (MP) (= lecture en MP) ;
transfert CPU Mmoire Principale (MP) (= criture en MP) ;

Instructions arithmtiques et logiques


Oprations entre une donne et laccumulateur AX. Le rsultat est plac dans laccumulateur. La donne peut tre une constante ou une valeur contenue dans un emplacement
mmoire.
Exemples :
addition : AX AX + donne ;
soustraction : AX AX - donne ;
incrmentation3 de AX : AX AX + 1 ;
3

Incrmenter un registre (ou une variable) signifie lui ajouter 1, et le dcrmenter lui soustraire

1.
E. Viennet - GTR - v1.2d

2.2

Jeu dinstruction

27

dcrmentation : AX AX - 1 ;
dcalages gauche et droite ;

Instructions de comparaison
Comparaison du registre AX une donne et positionnement des indicateurs.

Instructions de branchement
La prochaine instruction excuter est repre en mmoire par le registre IP. Les
instructions de branchement permettent de modifier la valeur de IP pour excuter une
autre instruction (boucles, tests, etc.).
On distingue deux types de branchements :
branchements inconditionnels : IP adresse dune instruction ;
branchements conditionnels : Si une condition est satisfaite, alors branchement,
sinon passage simple linstruction suivante.

2.2.2

Codage des instructions et mode dadressage

Les instructions et leurs oprandes (paramtres) sont stocks en mmoire principale.


La taille totale dune instruction (nombre de bits ncessaires pour la reprsenter en mmoire) dpend du type dinstruction et aussi du type doprande. Chaque instruction est
toujours code sur un nombre entier doctets, afin de faciliter son dcodage par le processeur.
Une instruction est compose de deux champs :
le code opration, qui indique au processeur quelle instruction raliser ;
le champ oprande qui contient la donne, ou la rfrence une donne en mmoire
(son adresse).
champ
code opration

champ
code oprande

Selon la manire dont la donne est spcifie, cest dire selon le mode dadressage
de la donne, une instruction sera code par 1, 2, 3 ou 4 octets.
Nous distinguerons ici quatre modes dadressage : implicite, immdiat, direct et relatif
(nous tudierons plus tard un autre mode, ladressage indirect).

Adressage implicite
Linstruction contient seulement le code opration, sur 1 ou 2 octets.
code opration
(1 ou 2 octets)
Linstruction porte sur des registres ou spcifie une opration sans oprande (exemple :
incrmenter AX).
E. Viennet - GTR - v1.2d

28

Partie 2. Introduction au langage machine

Adressage immdiat
Le champ oprande contient la donne (une valeur constante sur 1 ou 2 octets).
code opration
(1 ou 2 octets)

valeur
(1 ou 2 octets)

Exemple : Ajouter la valeur 5 AX. Ici loprande 5 est code sur 2 octets puisque
lopration porte sur un registre 16 bits (AX).

Adressage direct
Le champ oprande contient ladresse de la donne en mmoire principale sur 2 octets.
code opration
(1 ou 2 octets)

adresse de la donne
(2 octets)

Attention : dans le 80x86, les adresses sont toujours manipules sur 16 bits, quelle
que soit la taille relle du bus. Nous verrons plus tard comment le processeur fabrique les
adresses relles sur 32 bits.
Exemple : Placer dans AX la valeur contenue ladresse 130H.

Adressage relatif
Ce mode dadressage est utilis pour certaines instructions de branchement. Le champ
oprande contient un entier relatif cod sur 1 octet, nomm dplacement, qui sera ajout
la valeur courante de IP.
code opration
(1 octet)

2.2.3

dplacement
(1 octet)

Temps dexcution

Chaque instruction ncessite un certain nombre de cycles dhorloges pour seffectuer.


Le nombre de cycles dpend de la complexit de linstruction et aussi du mode dadressage : il est plus long daccder la mmoire principale qu un registre du processeur.

La dure dun cycle dpend bien sur de la frquence dhorloge de lordinateur. Plus
lhorloge bat rapidement, plus un cycle est court et plus on excute un grand nombre
dinstructions par seconde.

2.2.4

Ecriture des instructions en langage symbolique

Voici un programme en langage machine 80486, implant ladresse 0100H :


A1 01 10 03 06 01 12 A3 01 14
E. Viennet - GTR - v1.2d

2.2

Jeu dinstruction

29

Ce programme additionne le contenu de deux cases mmoire et range le rsultat dans


une troisime. Nous avons simplement transcrit en hexadcimal le code du programme. Il
est clair que ce type dcriture nest pas trs utilisable par un tre humain.
A chaque instruction que peut excuter le processeur correspond une reprsentation
binaire sur un ou plusieurs octets, comme on la vu plus haut. Cest le travail du processeur
de dcoder cette reprsentation pour effectuer les oprations correspondantes.
Afin de pouvoir crire (et relire) des programmes en langage machine, on utilise une
notation symbolique, appele langage assembleur. Ainsi, la premire instruction du programme ci-dessus (code A1 01 10) sera note :
MOV AX, [0110]
elle indique que le mot mmoire dadresse 0110H est charg dans le registre AX du
processeur.
On utilise des programmes spciaux, appels assembleurs, pour traduire automatiquement le langage symbolique en code machine.
Voici une transcription langage symbolique du programme complet. Ladresse de dbut de chaque instruction est indique gauche (en hexadcimal).
Adresse

Contenu MP

Langage Symbolique

0100

A1 01 10

MOV AX, [0110]

0103

03 06 01 12

ADD AX, [0112]

0107

A3 01 14

MOV [0114], AX

Explication en francais
Charger AX avec le contenu
de 0110.
Ajouter le contenu de 0112
a AX (resultat dans AX).
Ranger AX en 0114.

Sens des mouvements de donnes


La plupart des instructions spcifient des mouvements de donnes entre la mmoire
principale et le microprocesseur. En langage symbolique, on indique toujours la destination, puis la source. Ainsi linstruction
MOV AX, [0110]
transfre le contenu de lemplacement mmoire 0110H dans laccumulateur, tandis
que MOV [0112], AX transfre le contenu de laccumulateur dans lemplacement mmoire 0112.
Linstruction MOV (de langlais move, dplacer) scrit donc toujours :
MOV destination, source

Modes dadressage
En adressage immdiat, on indique simplement la valeur de loprande en hexadcimal. Exemple :
MOV AX, 12
En adressage direct, on indique ladresse dun emplacement en mmoire principale
en hexadcimal entre crochets :
MOV AX, [A340]
E. Viennet - GTR - v1.2d

30

Partie 2. Introduction au langage machine


En adressage relatif, on indique simplement ladresse (hexa). Lassembleur traduit
automatiquement cette adresse en un dplacement (relatif sur un octet). Exemple :
JNE 0108
(nous tudierons linstruction JNE plus loin).

Tableau des instructions


Le tableau 2.2.4 donne la liste de quelques instructions importantes du 80x86.

Retour au DOS
A la fin dun programme en assembleur, on souhaite en gnral que linterprteur de
commandes du DOS reprenne le contrle du PC. Pour cela, on utilisera la squence de
deux instructions (voir tableauu 2.2.4) :
MOV AH, 4C
INT 21

2.2.5

Utilisation du programme debug

debug est un programme qui sexcute sur PC (sous DOS) et qui permet de manipuler des programmes en langage symbolique. Il est normalement distribu avec toutes les
versions du systme MS/DOS. Nous lutiliserons en travaux pratiques.
Les fonctionnalits principales de debug sont les suivantes :
Affichage du contenu dune zone mmoire en hexadcimal ou en ASCII ;
Modification du contenu dune case mmoire quelconque ;
Affichage en langage symbolique dun programme ;
Entre dun programme en langage symbolique ; debug traduit les instructions en
langage machine et calcule automatiquement les dplacements en adressage relatif.
Affichage et modification de la valeur des registres du processeur ;

2.3

Branchements

Normalement, le processeur excute une instruction puis passe celle qui suit en
mmoire, et ainsi de suite squentiellement. Il arrive frquemment que lon veuille faire
rpter au processeur une certaine suite dinstructions, comme dans le programme :
Repeter 3 fois:
ajouter 5 au registre BX
En dautres occasions, il est utile de dclencher une action qui dpend du rsultat dun
test :
Si x < 0:
y = - x
sinon
y = x
E. Viennet - GTR - v1.2d

2.3

Branchements

31

Symbole

Code Op.

Octets

MOV AX, valeur

B8

AX valeur

MOV AX, [ adr ]

A1

AX contenu de ladresse adr.

MOV [ adr ], AX

A3

range AX ladresse adr.

ADD AX, valeur

05

AX AX + valeur

ADD AX, [ adr ]

03 06

AX AX + contenu de adr.

SUB AX, valeur

2D

AX AX - valeur

SUB AX, [ adr ]

2B 06

AX AX - contenu de adr.

SHR AX, 1

D1 E8

dcale AX droite.

SHL AX, 1

D1 E0

dcale AX gauche.

INC AX

40

AX AX + 1

DEC AX

48

AX AX - 1

CMP AX, valeur

3D

compare AX et valeur.

CMP AX, [ adr ]

3B 06

compare AX et contenu de adr.

JMP adr

EB

saut inconditionnel (adr. relatif).

JE adr

74

saut si =

JNE adr

75

saut si 6=

JG adr

7F

saut si >

JLE adr

7E

saut si

JA adr

saut si CF = 0

JB adr

saut si CF = 1

Fin du programme (retour au DOS) :


MOV AH, 4C

B4 4C

INT 21

CD 21

TAB . 2.1 Quelques instructions du 80x86. Le code de linstruction est donn


en hexadcimal dans la deuxime colonne. La colonne suivante prcise le nombre
doctets ncessaires pour coder linstruction complte (oprande inclus). On note
valeur une valeur sur 16 bits, et adr une adresse sur 16 bits galement.

E. Viennet - GTR - v1.2d

32

Partie 2. Introduction au langage machine

Dans ces situations, on doit utiliser une instruction de branchement, ou saut, qui indique au processeur ladresse de la prochaine instruction excuter.
Rappelons que le registre IP du processeur conserve ladresse de la prochaine instruction excuter. Lors dun droulement normal, le processeur effectue les actions suivantes
pour chaque instruction :
1. lire et dcoder linstruction ladresse IP ;
2. IP IP + taille de linstruction ;
3. excuter linstruction.
Pour modifier le droulement normal dun programme, il suffit que lexcution de
linstruction modifie la valeur de IP. Cest ce que font les instructions de branchement.
On distingue deux catgories de branchements, selon que le saut est toujours effectu
(sauts inconditionnels) ou quil est effectu seulement si une condition est vrifie (sauts
conditionnels).

2.3.1

Saut inconditionnel

La principale instruction de saut inconditionnel est JMP. En adressage relatif, loprande de JMP est un dplacement, cest dire une valeur qui va tre ajoute IP.
Laction effectue par JMP est :
IP = IP + dplacement
Le dplacement est un entier relatif sur code 8 bits. La valeur du dplacement
utiliser pour atteindre une certaine instruction est :
dplacement = adr. instruction vise - adr. instruction suivante
Exemple : le programme suivant crit indfiniment la valeur 0 ladresse 0140H. La
premire instruction est implante ladresse 100H.
Adresse

Contenu MP

Langage Symbolique

0100
0103
0106
0107

B8 00 00
A3 01 40
EB FC

MOV
MOV
JMP
xxx

Explication en francais

AX, 0
met AX a zero
[140], AX
ecrit a ladresse 140
0103
branche en 103
-> instruction jamais executee

Le dplacement est ici gal FCH, cest dire -4 (=103H-107H).

2.3.2

Indicateurs

Les instructions de branchement conditionnels utilisent les indicateurs, qui sont des
bits spciaux positionns par lUAL aprs certaines oprations. Les indicateurs sont regroups dans le registre dtat du processeur. Ce registre nest pas accessible globalement
par des instructions ; chaque indicateur est manipul individuellement par des instructions
spcifiques.
Nous tudierons ici les indicateurs nomms ZF, CF, SF et OF.
E. Viennet - GTR - v1.2d

2.3

Branchements

33

ZF Zero Flag
Cet indicateur est mis 1 lorsque le rsultat de la dernire opration est zro.
Lorsque lon vient deffectuer une soustraction (ou une comparaison), ZF=1 indique que les deux oprandes taient gaux. Sinon, ZF est positionn 0.
CF Carry Flag
Cest lindicateur de report (retenue), qui intervient dans les oprations daddition
et de soustractions sur des entiers naturels. Il est positionn en particulier par les
instructions ADD, SUB et CMP.
CF = 1 sil y a une retenue aprs laddition ou la soustraction du bit de poids fort
des oprandes. Exemples (sur 4 bits pour simplifier) :
0 1 0 0
+ 0 1 1 0
--------CF=0 1 0 1 0

1 1 0 0
+ 0 1 1 0
--------CF=1 0 0 1 0

1 1 1 1
+ 0 0 0 1
--------CF=1 0 0 0 0

SF Sign Flag
SF est positionn 1 si le bit de poids fort du rsultat dune addition ou soustraction
est 1 ; sinon SF=0. SF est utile lorsque lon manipule des entiers relatifs, car le bit
de poids fort donne alors le signe du rsultat. Exemples (sur 4 bits) :
0 1 0 0
+ 0 1 1 0
--------SF=1 1 0 1 0

1 1 0 0
+ 0 1 1 0
--------SF=0 0 0 1 0

1 1 1 1
+ 0 0 0 1
--------SF=0 0 0 0 0

OF Overflow Flag
Indicateur de dbordement4 OF=1 si le rsultat dune addition ou soustraction
donne un nombre qui nest pas codable en relatif dans laccumulateur (par exemple
si laddition de 2 nombres positifs donne un codage ngatif).
0 1 0 0
+ 0 1 1 0
--------OF=1 1 0 1 0

1 1 0 0
+ 0 1 1 0
--------OF=0 0 0 1 0

1 1 1 1
+ 0 0 0 1
--------OF=1 0 0 0 0

Lorsque lUAL effectue une addition, une soustraction ou une comparaison, les quatre
indicateurs sont positionns. Certaines autres instructions que nous tudierons plus loin
peuvent modifier les indicateurs.

Instruction CMP
Il est souvent utile de tester la valeur du registre AX sans modifier celui-ci. Linstruction CMP effectue exactement les mme opration que SUB, mais ne stocke pas le
rsultat de la soustraction. Son seul effet est donc de positionner les indicateurs.
Exemple : aprs linstruction
CMP AX, 5
on aura ZF = 1 si AX contient la valeur 5, et ZF = 0 si AX est diffrent de 5.
4

Dbordement, ou dpassement de capacit, overflow en anglais.

E. Viennet - GTR - v1.2d

34

Partie 2. Introduction au langage machine

Instructions STC et CLC


Ces deux instructions permettent de modifier la valeur de lindicateur CF.
Symbole

2.3.3

STC

CF 1 (SeT Carry)

CLC

CF 0 (CLear Carry)

Sauts conditionnels

Les instructions de branchements conditionnels effectuent un saut (comme JMP) si


une certaine condition est vrifie. Si ce nest pas le cas, le processeur passe linstruction
suivante (linstruction ne fait rien).
Les conditions sexpriment en fonction des valeurs des indicateurs. Les instructions
de branchement conditionnel sutilisent en gnral immdiatement aprs une instruction
de comparaison CMP.
Voici la liste des instructions de branchement les plus utiles :
JE Jump if Equal
saut si ZF = 1 ;
JNE Jump if Not Equal
saut si ZF = 0 ;
JG Jump if Greater
saut si ZF = 0 et SF = OF ;
JLE Jump if Lower or Equal
saut si ZF=1 ou SF6=OF ;
JA Jump if Above
saut si CF=0 et ZF=0 ;
JBE Jump if Below or Equal
saut si CF=1 ou ZF=1.
JB Jump if Below
saut si CF=1.
Note : les instructions JE et JNE sont parfois crites JZ et JNZ (mme code opration).

2.4

Instructions Arithmtiques et logiques

Les instructions arithmtiques et logiques sont effectues par lUAL. Nous avons dja
vu les instructions daddition et de soustraction (ADD, SUB). Nous abordons ici les instructions qui travaillent sur la reprsentation binaire des donnes : dcalages de bits, oprations logiques bit bit.
Notons que toutes ces oprations modifient ltat des indicateurs.
E. Viennet - GTR - v1.2d

2.4

Instructions Arithmtiques et logiques

35

2.4.1 Instructions de dcalage et de rotation


Ces oprations dcalent vers la gauche ou vers la droite les bits de laccumulateur.
Elles sont utilises pour dcoder bit bit des donnes, ou simplement pour diviser ou
multiplier rapidement par une puissance de 2. En effet, dcaler AX de n bits vers la gauche
revient le multiplier par 2n (sous rserve quil reprsente un nombre naturel et quil ny
ait pas de dpassement de capacit). De mme, un dcalage vers la droite revient diviser
par 2n .
Voici les variantes les plus utiles de ces instructions. Elles peuvent oprer sur les
registres AX ou BX (16 bits) ou sur les registres de 8 bits AH, AL, BH et BL.
SHL registre, 1 (Shift Left)
Dcale les bits du registre dune position vers la gauche. Le bit de gauche est transfr dans lindicateur CF. Les bits introduits droite sont zro.
0
CF
SHR registre, 1 (Shift Right)
Comme SHL mais vers la droite. Le bit de droite est transfr dans CF.
0
CF
SHL et SHR peuvent tre utilis pour multiplier/diviser des entiers naturels (et non
des relatifs car le bit de signe est perdu5 ).
ROL registre, 1 (Rotate Left)
Rotation vers la gauche : le bit de poids fort passe droite, et est aussi copi dans
CF. Les autres bits sont dcals dune position.
CF

ROR registre, 1 (Rotate Right)


Comme ROL, mais droite.
CF

RCL registre, 1 (Rotate Carry Left)


Rotation vers la gauche en passant par lindicateur CF. CF prend la place du bit de
poids faible ; le bit de poids fort part dans CF.
CF

RCR registre, 1 (Rotate Carry Right)


Comme RCL, mais vers la droite.
5

Il existe dautres instructions pour les relatifs, que nous ne dcrirons pas ici.

E. Viennet - GTR - v1.2d

36

Partie 2. Introduction au langage machine


CF

RCL et RCR sont utiles pour lire bit bit le contenu dun registre6 .

2.4.2

Instructions logiques

Les instructions logiques effectuent des oprations logiques bit bit. On dispose de
trois oprateurs logiques : ET, OU et OU exclusif. Il ny a jamais propagation de retenue
lors de ces oprations (chaque bit du rsultat est calcul indpendamment des autres).
0 0 1 1
OU 0 1 0 1
----------0 1 1 1

0 0 1 1
ET 0 1 0 1
----------0 0 0 1

0 0 1 1
OU EX 0 1 0 1
----------0 1 1 0

Les trois instructions OR, AND et XOR sont de la forme


OR destination, source.
destination dsigne le registre ou lemplacement mmoire (adresse) o doit tre plac
le rsultat. source dsigne une constante (adressage immdiat), un registre (adressage implicite), ou une adresse (adressage direct).
Exemples :
OR
OR
OR

AX, FF00
; AX <AX, BX
; AX <AX, [1492] ; AX <-

AX ou FFOO
AX ou BX
AX ou [1492]

OR destination, source (OU)


OU logique. Chaque bit du rsultat est gal 1 si au moins lun des deux bits
oprande est 1.
OR est souvent utilis pour forcer certains bits 1. Par exemple aprs OR AX, FF00,
loctet de poids fort de AX vaut FF, tandis que loctet de poids faible est inchang.
AND destination, source (ET)
ET logique. Chaque bit du rsultat est gal 1 si les deux bits oprandes sont 1.
AND est souvent utilis pour forcer certains bits 0. Aprs AND AX, FF00,
loctet de poids faible de AX vaut 00, tandis que loctet de poids fort est inchang.
XOR destination, source (OU EXCLUSIF)
OU exclusif. Chaque bit du rsultat est gal 1 si lun ou lautre des bits oprandes
(mais pas les deux) vaut 1.
XOR est souvent utilis pour inverser certains bits. Aprs XOR AX, FFFF, tous
les bits de AX sont inverss.
6

On pourra utiliser linstruction JB pour brancher si CF=1 aprs RCL ou RCR.

E. Viennet - GTR - v1.2d

2.4

Instructions Arithmtiques et logiques

37

2.4.3 Correspondance avec le langage C


Nous tudierons plus loin dans ce cours comment un compilateur traduit les programmes crits en langage C en langage machine.
La table suivante tabli un parallle entre les instructions arithmtiques et logiques du
80x86 et les oprateurs du langage C (lorsque ces derniers agissent sur des variables non
signes).
Oprateur C
+
<<
>>
|
&
^

E. Viennet - GTR - v1.2d

Instruction 80x86
ADD
SUB
SHL
SHR
OR
AND
XOR

addition ;
soustraction ;
dcalage gauche ;
dcalage droite ;
ou bit bit ;
et bit bit ;
ou exclusif bit bit.

38

E. Viennet - GTR - v1.2d

Partie 2. Introduction au langage machine

Partie 3
Lassembleur 80x86
3.1

Lassembleur

3.1.1 Pourquoi lassembleur ?


Lorsque lon doit lire ou crire un programme en langage machine, il est difficile
dutiliser la notation hexadcimale (voir lexemple page 28). On crit les programmes
laide de symboles1 comme MOV, ADD, etc. Les concepteurs de processeur, comme Intel,
fournissent toujours une documentation avec les codes des instructions de leur processeur,
et les symboles correspondant.
Nous avons dja utilis un programme, debug, trs utile pour traduire automatiquement les symboles des instructions en code machine. Cependant, debug nest utilisable
que pour mettre au point de petits programmes. En effet, le programmeur doit spcifier
lui mme les adresses des donnes et des instructions. Soit par exemple le programme
suivant, qui multiplie une donne en mmoire par 8 :
0100
0103
0106
0108
0109
010B
010E
0110
0112

MOV BX, [0112] ;


MOV AX, 3
SHL BX
;
DEC AX
JNE 0106
;
MOV [0111], BX ;
MOV AH, 4C
INT 21H
; on range ici la

charge la donnee
decale a gauche
recommence 3 fois
range le resultat

donnee

Nous avons spcifi que la donne tait range ladresse 0111H, et que linstruction
de branchement JE allait en 0106H. Si lon dsire modifier lgrement ce programme,
par exemple ajouter une instruction avant MOV BX, [0111], il va falloir modifier ces
deux adresses. On conoit aisment que ce travail devienne trs difficile si le programme
manipule beaucoup de variables.
1

Les symboles associs aux instructions sont parfois appels mnmoniques.

E. Viennet - GTR - v1.2d

40

Partie 3. Lassembleur 80x86

Lutilisation dun assembleur rsout ces problmes. Lassembleur permet en particulier de nommer les variables (un peu comme en langage C) et de reprer par des tiquettes
certaines instructions sur lesquelles on va effectuer des branchements.

3.1.2

De lcriture du programme son excution

Lassembleur est un utilitaire qui nest pas interactif, contrairement lutilitaire debug. Le programme que lon dsire traduire en langage machine (on dit assembler) doit
tre plac dans un fichier texte (avec lextension .ASM sous DOS).
La saisie du programme source au clavier ncessite un programme appel diteur de
texte.
Lopration dassemblage traduit chaque instruction du programme source en une instruction machine. Le rsultat de lassemblage est enregistr dans un fichier avec lextension .OBJ (fichier objet).
Le fichier .OBJ nest pas directement excutable. En effet, il arrive frquemment
que lon construise un programme excutable partir de plusieurs fichiers sources. Il faut
relier les fichiers objets laide dun utilitaire nomm diteur de lien (mme si lon en
a quun seul). Lditeur de liens fabrique un fichier excutable, avec lextension .EXE.
Le fichier .EXE est directement excutable. Un utilitaire spcial du systme dexploitation (DOS ici), le chargeur est responsable de la lecture du fichier excutable, de son
implantation en mmoire principale, puis du lancement du programme.

3.1.3

Structure du programme source

La structure gnrale dun programme assembleur est reprsente figure 3.1.


Comme tout programme, un programme crit en assembleur comprend des dfinitions
de donnes et des instructions, qui scrivent chacune sur une ligne de texte.
Les donnes sont dclares par des directives, mots clef spciaux que comprend lassembleur. Les directives qui dclarent des donnes sont regroupes dans le segment de
donnes, qui est dlimit par les directives SEGMENT et ENDS.
Les instructions sont places dans un autre segment, le segment de code.
La directive ASSUME est toujours prsente et sera explique plus loin (section 3.2.2).
La premire instruction du programme (dans le segment dinstruction) doit toujours
tre repre par une tiquette. Le fichier doit se terminer par la directive END avec le nom
de ltiquette de la premire instruction (ceci permet dindiquer lditeur de liens quelle
est la premire instruction excuter lorsque lon lance le programme).
Les points-virgules indiquent des commentaires.

3.1.4

Dclaration de variables

On dclare les variables laide de directives. Lassembleur attribue a chaque variable


une adresse. Dans le programme, on repre les variables grce leur nom.
Les noms des variables (comme les tiquettes) sont composs dune suite de 31 caractres au maximum, commenant obligatoirement par une lettre. Le nom peut comporter
des majuscules, des minuscules, des chiffres, plus les caractres @, ? et _.
E. Viennet - GTR - v1.2d

3.1

Lassembleur

data

41

SEGMENT

; data est le nom du segment de donnees

; directives de declaration de donnees


data

ENDS

; fin du segment de donnees

ASSUME DS:data, CS:code


code

SEGMENT

; code est le nom du segment dinstructions

debut:

; 1ere instruction, avec letiquette debut

; suite dinstructions
code

ENDS
END debut

; fin du programme, avec letiquette


; de la premiere instruction.

F IG . 3.1 Structure dun programme en assembleur (fichier .ASM).


Lors de la dclaration dune variable, on peut lui affecter une valeur initiale.

Variables de 8 ou 16 bits
Les directives DB (Define Byte) et DW (Define Word) permettent de dclarer des
variables de respectivement 1 ou 2 octets.
Exemple dutilisation :
data
entree
sortie
cle
nega
data

SEGMENT
DW 15
DW ?
DB ?
DB -1
ENDS

;
;
;
;

2
2
1
1

octets initialises a 15
octets non initialises
octet non initialise
octet initialise a -1

Les valeurs initiales peuvent tre donnes en hexadcimal (constante termine par H)
ou en binaire (termine par b) :
data
truc
masque
data

SEGMENT
DW 0F0AH
; en hexa
DB 01110000b ; en binaire
ENDS

Les variables sutilisent dans le programme en les dsignant par leur nom. Aprs la
dclaration prcdente, on peut crire par exemple :
E. Viennet - GTR - v1.2d

42

Partie 3. Lassembleur 80x86

MOV
AND
MOV

AX, truc
AL, masque
truc, AX

Lassembleur se charge de remplacer les noms de variable par les adresses correspondantes.

Tableaux
Il est aussi possible de dclarer des tableaux, cest dire des suite doctets ou de mots
conscutifs.
Pour cela, utiliser plusieurs valeurs initiales :
data
machin
chose
data

SEGMENT
db 10, 0FH ; 2 fois 1 octet
db -2, ALORS
ENDS

Remarquez la dclaration de la variable chose : un octet -2 (=FEH), suivi dune


suite de caractres. Lassembleur nimpose aucune convention pour la reprsentation des
chanes de caractres : cest lutilisateur dajouter si ncessaire un octet nul pour marquer
la fin de la chane.
Aprs chargement de ce programme, la mmoire aura le contenu suivant :
Dbut du segment data

0AH
OFH
FEH
41H
4CH
4FH
52H
53H

machin
machin + 1
chose
chose + 1
chose + 2
chose + 3
chose + 4
chose + 5

Si lon veut crire un caractre X la place du O de ALORS, on pourra crire :


MOV
MOV

AL, X
chose+1, AL

Notons que chose+1 est une constante (valeur connue au moment de lassemblage) :
linstruction gnre par lassembleur pour
MOV chose+1, AL
est MOV [adr], AL .

Directive dup
Lorsque lon veut dclarer un tableau de n cases, toutes initialises la mme valeur,
on utilise la directive dup :
tab
zzz

DB
DW

100 dup (15) ; 100 octets valant 15


10 dup (?)
; 10 mots de 16 bits non initialises

E. Viennet - GTR - v1.2d

3.2

Segmentation de la mmoire

3.2

43

Segmentation de la mmoire

Nous abordons ici le problme de la segmentation de la mmoire. Nous venons de voir


quen assembleur, les donnes taient normalement regroupes dans une zone mmoire
nomme segment de donnes, tandis que les instructions taient places dans un segment
dinstructions. Ce partage se fonde sur la notion plus gnrale de segment de mmoire,
qui est la base du mcanisme de gestion des adresses par les processeurs 80x86.
Nous avons vu plus haut (section 2.2.2) que les instructions utilisaient normalement
des adresses codes sur 16 bits. Nous savons aussi que le registre IP, qui stocke ladresse
dune instruction, fait lui aussi 16 bits. Or, avec 16 bits il nest possible dadresser que
216 = 64 Kilo octets.
Le bus dadresse du 80486 possde 32 bits. Cette adresse de 32 bits est forme par la
juxtaposition dun registre segment (16 bits de poids fort) et dun dplacement (offset, 16
bits de poids faible). Les adresses que nous avons manipul jusquici sont des dplacements2 . Le schma suivant illustre la formation dune adresse 32 bits partir du segment
et du dplacement sur 16 bits :
16 bits
z
|

}|

segment

16 bits
{z

}|

dplacement

{z

{
}

adresse 32 bits
On appellera segment de mmoire une zone mmoire adressable avec une valeur fixe
du segment (les 16 bits de poids fort). Un segment a donc une taille maximale de 64 Ko.

3.2.1

Segment de code et de donnes

La valeur du segment est stocke dans des registres spciaux de 16 bits. Le registre DS
(Data Segment) est utilis pour le segment de donnes, et le registre CS (Code Segment)
pour le segment dinstructions.

Registre CS
Lorsque le processeur lit le code dune instruction, ladresse 32 bits est forme laide
du registre segment CS et du registre dplacement IP. La paire de ces deux registres est
note CS:IP.

Registre DS
Le registre DS est utilis pour accder aux donnes manipules par le programme.
Ainsi, linstruction
MOV AX, [0145]
donnera lieu la lecture du mot mmoire dadresse DS:0145H.
2

En ralit, les mcanismes de calculs des adresses sont bien plus complexes que ce que nous
dcrirons dans ce cours, et dpendent du type de processeur (8086, 286 ou 486), ainsi que du mode
de travail slectionn (rel ou protg). Nous ignorerons ici ces aspects.
E. Viennet - GTR - v1.2d

44

Partie 3. Lassembleur 80x86

Initialisation des registres segment


Dans ce cours, nous ncrirons pas de programmes utilisant plus de 64 Ko de code et
64 Ko de donnes, ce qui nous permetra de nutiliser quun seul segment de chaque type.
Par consquent, la valeur des registres CS et de DS sera fixe une fois pour toute au
dbut du programme.
Le programmeur en assembleur doit se charger de linitialisation de DS, cest dire
de lui affecter ladresse du segment de donnes utiliser.
Par contre, le registre CS sera automatiquement initialis sur le segment contenant
la premire instruction au moment du chargement en mmoire du programme (par le
chargeur du systme dexploitation).

3.2.2

Dclaration dun segment en assembleur

Comme nous lavons vu (voir figure 3.1), les directives SEGMENT et ENDS permettent
de dfinir les segments de code et de donnes.
La directive ASSUME permet dindiquer lassembleur quel est le segment de donnes
et celui de code, afin quil gnre des adresses correctes.
Enfin, le programme doit commencer, avant toute rfrence au segment de donnes,
par initialiser le registre segment DS, de la faon suivante :
MOV AX, nom_segment_de_donnees
MOV CS, AX
(Il serait plus simple de faire MOV CS, nom_segment_de_donnees mais il se
trouve que cette instruction nexiste pas.)
La figure 3.2 donne un exemple complet de programme assembleur.

3.3

Adressage indirect

Nous introduisons ici un nouveau mode dadressage, ladressage indirect, qui est trs
utile par exemple pour traiter des tableaux3 .
Ladressage indirect utilise le registre BX pour stocker ladresse dune donne.
En adressage direct, on note ladresse de la donne entre crochets :
MOV

AX, [130]

; adressage direct

De faon similaire, on notera en adressage indirect :


MOV

AX, [BX]

; adressage direct

Ici, BX contient ladressage de la donne. Lavantage de cette technique est que lon
peut modifier ladresse en BX, par exemple pour accder la case suivante dun tableau.
Avant dutiliser un adressage indirect, il faut charger BX avec ladresse dune donne.
Pour cela, on utilise une nouvelle directive de lassembleur, offset.
3

Il existe encore dautres modes dadressage, comme ladressage index, que nous naborderons pas dans ce cours.
E. Viennet - GTR - v1.2d

3.3

Adressage indirect

45

; Programme calculant la somme de deux entiers de 16 bits


data
A
B
Result
data

SEGMENT
DW 10
DW 1789
DW ?
ENDS

code

SEGMENT

; A = 10
; B = 1789
; resultat

ASSUME DS:data, CS:code


debut:

code

MOV
MOV

AX, data ; etiquette car 1ere instruction


DS, AX
; initialise DS

; Le
MOV
ADD
MOV

programme:
AX, A
AX, B
result, AX ; range resultat

; Retour au DOS:
MOV AH, 4CH
INT 21H
ENDS
END debut ; etiquette de la 1ere inst.

F IG . 3.2 Exemple de programme en assembleur. On calcule la somme de deux


variables A et B et on range le rsultat dans la variable nomme Result.

E. Viennet - GTR - v1.2d

46

Partie 3. Lassembleur 80x86

data
truc
data

SEGMENT
DW
1996
ENDS
...
MOV
...

BX, offset truc

Si lon avait employ la forme


MOV

BX, truc

on aurait charg dans BX la valeur stocke en truc (ici 1996), et non son adresse4 .

3.3.1

Exemple : parcours dun tableau

Voici un exemple plus complet utilisant ladressage indirect. Ce programme passe un


chane de caractres en majuscules. La fin de la chane est repre par un caractre $. On
utilise un ET logique pour masquer le bit 5 du caractre et le passer en majuscule (voir le
code ASCII).
data
tab
data

SEGMENT
DB Un boeuf Bourguignon, $
ENDS

code

SEGMENT
ASSUME DS:data, CS:code

debut:

MOV
MOV

AX, data
DS, AX

MOV

BX, offset tab ; adresse debut tableau

MOV
AND
MOV
INC
CMP
JNE

AL, [BX]
AL, 11011111b
[BX], AL
BX
AL, $
repet

repet:

code

MOV AH, 4CH


INT 21H
ENDS
END debut

;
;
;
;
;
;

lis 1 caractere
force bit 5 a zero
range le caractere
passe au suivant
arrive au $ final ?
sinon recommencer

; Retour au DOS

Lassembleur gnre une instruction MOV AX, [adr] lorsquil rencontre un MOV AX, etiquette.
E. Viennet - GTR - v1.2d

3.4

La pile

47

3.3.2 Spcification de la taille des donnes


Dans certains cas, ladressage indirect est ambigu. Par exemple, si lon crit
MOV [BX],

; range 0 a ladresse specifiee par BX

lassembleur ne sait pas si linstruction concerne 1, 2 ou 4 octets conscutifs.


Afin de lever lambigut, on doit utiliser une directive spcifiant la taille de la donne
transfrer :
MOV
MOV

3.4

byte ptr [BX], val


word ptr [BX], val

; concerne 1 octet
; concerne 1 mot de 2 octets

La pile

3.4.1 Notion de pile


Les piles offrent un nouveau moyen daccder des donnes en mmoire principale,
qui est trs utilis pour stocker temporairement des valeurs.
Une pile est une zone de mmoire et un pointeur qui conserve ladresse du sommet de
la pile.

3.4.2 Instructions PUSH et POP


Deux nouvelles instructions, PUSH et POP, permettent de manipuler la pile.
PUSH registre empile le contenu du registre sur la pile.
POP registre retire la valeur en haut de la pile et la place dans le regsitres spcifi.
Exemple : transfert de AX vers BX en passant par la pile.
PUSH AX
POP BX

; Pile <- AX
; BX
<- Pile

(Note : cet exemple nest pas trs utile, il vaut mieux employer MOV AX, BX.)
La pile est souvent utilise pour sauvegarder temporairement le contenu des registres :
; AX et BX contiennent des donnees a conserver
PUSH AX
PUSH BX
MOV
ADD
MOV

BX, truc
AX, BX
truc, BX

; on utilise AX
;
et BX

POP
POP

BX
AX

; recupere lancien BX
;
et lancien AX

On voit que la pile peut conserver plusieurs valeurs. La valeur dpile par POP est
la dernire valeur empile ; cest pourquoi on parle ici de pile LIFO (Last In First Out,
Premier Entr Dernier Sorti).
E. Viennet - GTR - v1.2d

48

Partie 3. Lassembleur 80x86

3.4.3

Registres SS et SP

La pile est stocke dans un segment spar de la mmoire principale. Le processeur


possde deux registres ddis la gestion de la pile, SS et SP.
Le registre SS (Stack Segment5 ) est un registre segment qui contient ladresse du segment de pile courant (16 bits de poids fort de ladresse). Il est normalement initialis au
dbut du programme et reste fix par la suite.
Le registre SP (Stack Pointer) contient le dplacement du sommet de la pile (16 bits
de poids faible de son adresse).
16 bits

Adresses
Croissantes

SP-2
SP

emplacement libre

PUSH

POP

F IG . 3.3 La pile. Les adresses croissent vers le bas. SP pointe sur le sommet
(dernier emplacement occup).
La figure 3.3 donne une reprsentation schmatique de la pile. Linstruction PUSH
effectue les oprations suivantes :
SP SP - 2
[SP] valeur du registre 16 bits.
Notons quau dbut (pile vide), SP pointe sous la pile.
Linstruction POP effectue le travail inverse :
registre destination [SP]
SP SP + 2
Si la pile est vide, POP va lire une valeur en dehors de lespace pile, donc imprvisible.

3.4.4

Dclaration dune pile

Pour utiliser une pile en assembleur, il faut dclarer un segment de pile, et y rserver un espace suffisant. Ensuite, il est ncessaire dinitialiser les registres SS et SP pour
pointer sous le sommet de la pile.
Voici la dclaration dune pile de 200 octets :
seg_pile
base_pile
5

SEGMENT stack
DW 100 dup (?)
EQU this word

stack = pile en anglais.

E. Viennet - GTR - v1.2d

; mot clef stack car pile


; reserve espace
; etiquette base de la pile

3.4

La pile

49

seg_pile

ENDS

Noter le mot clef stack aprs la directive SEGMENT, qui indique lassembleur
quil sagit dun segment de pile. Afin dinitialiser SP, il faut reprer ladresse du bas de
la pile ; cest le rle de la ligne
base_pile

EQU this word

(voir figure 3.4).

PUSH

POP

base_pile

F IG . 3.4 Une pile vide. Ltiquette base-pile repre la base de la pile, valeur
initiale de SP.
Aprs les dclarations ci-dessus, on utilisera la squence dinitialisation :
ASSUME SS:seg_pile
MOV
MOV

AX, seg_pile
SS, AX

MOV

SP, base_pile ; pile vide

; init Stack Segment

Noter que le registre SS sinitialise de faon similaire au registre DS ; par contre, on


peut accder directement au registre SP.

E. Viennet - GTR - v1.2d

50

E. Viennet - GTR - v1.2d

Partie 3. Lassembleur 80x86

3.5

Procdures

3.5

51

Procdures

3.5.1 Notion de procdure


La notion de procdure en assembleur correspond celle de fonction en langage C,
ou de sous-programme dans dautres langages.

instruction A
Calcul

instruction B

instruction C
CALL Calcul
instruction D
RET

F IG . 3.5 Appel dune procdure. La procdure est nomme calcul. Aprs linstruction B, le processeur passe linstruction C de la procdure, puis continue
jusqu rencontrer RET et revient linstruction D.
Une procdure est une suite dinstructions effectuant une action prcise, qui sont regroupes par commodit et pour viter davoir les crire plusieurs reprises dans le
programme.
Les procdures sont repres par ladresse de leur premire instruction, laquelle on
associe une tiquette en assembleur.
Lexcution dune procdure est dclenche par un programme appelant. Une procdure peut elle-mme appeler une autre procdure, et ainsi de suite.

3.5.2 Instructions CALL et RET


Lappel dune procdure est effectu par linstruction CALL.
CALL adresse_debut_procedure
Ladresse est sur 16 bits, la procdure est donc dans le mme segment dinstructions6 .
CALL est une nouvelle instrcution de branchement inconditionnel.
La fin dune procdure est marque par linstruction RET :
RET
RET ne prend pas dargument ; le processeur passe linstruction place immdiatement
aprs le CALL.
RET est aussi une instruction de branchement : le registre IP est modifi pour revenir
la valeur quil avait avant lappel par CALL. Comment le processeur retrouve-t-il cette
6

Il existe aussi des appels de procdure dans des segments diffrents, que nous ntudierons
pas dans ce cours.
E. Viennet - GTR - v1.2d

52

Partie 3. Lassembleur 80x86

valeur ? Le problme est compliqu par le fait que lon peut avoir un nombre quelconque
dappels imbriqus, comme sur la figure 3.6.
Ladresse de retour, utilise par RET, est en fait sauvegarde sur la pile par linstruction CALL. Lorsque le processeur excute linstruction RET, il dpile ladresse sur la pile
(comme POP), et la range dans IP.

Proc 1

CALL Proc 1

Proc 2

CALL Proc 2
RET
RET

F IG . 3.6 Plusieurs appels de procdures imbriqus.


Linstruction CALL effectue donc les oprations :
Empiler la valeur de IP. A ce moment, IP pointe sur linstruction qui suit le CALL.
Placer dans IP ladresse de la premire instruction de la procdure (donne en argument).
Et linstruction RET :
Dpiler une valeur et la ranger dans IP.

3.5.3

Dclaration dune procdure

Lassembleur possde quelques directives facilitant la dclaration de procdures.


On dclare une procdure dans le segment dinstruction comme suit :
Calcul
PROC near
; procedure nommee Calcul
...

; instructions

RET
; derniere instruction
Calcul
ENDP
; fin de la procedure
Le mot clef PROC commence la dfinition dune procdure, near indiquant quil
sagit dune procdure situe dans le mme segment dinstructions que le programme
appelant.
Lappel scrit simplement :
CALL Calcul

3.5.4

Passage de paramtres

En gnral, une procdure effectue un traitement sur des donnes (paramtres) qui
sont fournies par le programme appelant, et produit un rsultat qui est transmis ce programme.
E. Viennet - GTR - v1.2d

3.5

Procdures

53

Plusieurs stratgies peuvent tre employes :


1. Passage par registre : les valeurs des paramtres sont contenues dans des registres
du processeur. Cest une mthode simple, mais qui ne convient que si le nombre de
paramtres est petit (il y a peu de registres).
2. Passage par la pile : les valeurs des paramtres sont empiles. La procdure lit la
pile.

Exemple avec passage par registre


On va crire une procdure SOMME qui calcule la somme de 2 nombres naturels
de 16 bits.
Convenons que les entiers sont passs par les registres AX et BX, et que le rsultat
sera plac dans le registre AX.
La procdure scrit alors trs simplement :
SOMME

SOMME

PROC near
ADD AX, BX
RET
ENDP

; AX <- AX + BX

et son appel, par exemple pour ajouter 6 la variable Truc :


MOV
MOV
CALL
MOV

AX, 6
BX, Truc
SOMME
Truc, AX

Exemple avec passage par la pile


Cette technique met en uvre un nouveau registre, BP (Base Pointer), qui permet de
lire des valeurs sur la pile sans les dpiler ni modifier SP.
Le registre BP permet un mode dadressage indirect spcial, de la forme :
MOV

AX, [BP+6]

cette instruction charge le contenu du mot mmoire dadresse BP+6 dans AX.
Ainsi, on lira le sommet de la pile avec :
MOV
MOV

BP, SP
AX, [BP]

; BP pointe sur le sommet


; lit sans depiler

AX, [BP+2]

; 2 car 2 octets par mot de pile.

et le mot suivant avec :


MOV

Lappel de la procdure SOMME2 avec passage par la pile est :


PUSH
PUSH
CALL

6
Truc
SOMME2

La procdure SOMME2 va lire la pile pour obtenir la valeur des paramtres. Pour
cela, il faut bien comprendre quel est le contenu de la pile aprs le CALL :
E. Viennet - GTR - v1.2d

54

Partie 3. Lassembleur 80x86

SP
SP+2
SP+4

IP
Truc
6

(adresse de retour)
(premier paramtre)
(deuxime paramtre)

Le sommet de la pile contient ladresse de retour (ancienne valeur de IP empile par


CALL). Chaque lment de la pile occupe deux octets.
La procdure SOMME2 scrit donc :
SOMME2

SOMME2

PROC
MOV
MOV
ADD
RET
ENDP

near
BP, SP
AX, [BP+2]
AX, [BP+4]

;
;
;
;

AX <- arg1 + arg2


adresse sommet pile
charge argument 1
ajoute argument 2

La valeur de retour est laisse dans AX.


La solution avec passage par la pile parait plus lourde sur cet exemple simple. Cependant, elle est beaucoup plus souple dans le cas gnral que le passage par registre. Il est
trs facile par exemple dajouter deux paramtres supplmentaires sur la pile.
Une procdure bien crite modifie le moins de registres possible. En gnral, laccumulateur est utilis pour transmettre le rsultat et est donc modifi. Les autres registres
utiliss par la procdure seront normalement sauvegards sur la pile. Voici une autre version de SOMME2 qui ne modifie pas la valeur contenue par BP avant lappel :
SOMME2

SOMME2

PROC
PUSH
MOV
MOV
ADD
POP
RET
ENDP

near
BP
BP, SP
AX, [BP+4]
AX, [BP+6]
BP

;
;
;
;
;
;

AX <- arg1 + arg2


sauvegarde BP
adresse sommet pile
charge argument 1
ajoute argument 2
restaure ancien BP

Noter que les index des arguments (BP+4 et BP+6) sont modifis car on a ajout une
valeur au sommet de la pile.

E. Viennet - GTR - v1.2d

Partie 4
Notions de compilation
Aprs avoir tudi dans les chapitres prcdents le langage machine et lassembleur,
nous abordons ici les langages plus sophistiqus, qui permettent de programmer plus facilement des tches complexes.
Aprs une introduction aux notions de langage informatique et de compilation, nous
tudierons plus prcisement le cas du langage C sur PC.

4.1

Langages informatiques

Un langage informatique, par opposition aux langages naturels comme le franais


ou langlais, est un langage structur utilis pour dcrire des actions (ou algorithmes)
excutables par un ordinateur.
La principale diffrence entre les langages informatiques et les langues naturelles
rside dans labsence dambiguit : alors que certaines phrases du franais peuvent tre
interprtes diffremment par diffrents auditeurs, tous seront daccord pour dire ce que
fait un programme donn.
Historiquement, le premier langage informatique a t lassembleur. Or, la programmation en assembleur est souvent fastidieuse, surtout pour des programmes importants.
Plus grave, un programme crit en assembleur dpend troitement du type de machine
pour lequel il a t crit. Si lon dsire ladapter une autre machine (porter le programme), il faut le rcrire entirement.
Cest pour rpondre ces problmes quont t dvelopps ds les annes 50 des
langages de plus haut niveau. Dans ces langages, le programmeur crit selon des rgles
strictes mais dispose dinstructions et de structures de donnes plus expressives quen
assembleur. Par exemple, dans certains langage comme MATLAB, on pourra crire en
une ligne que lon dsire multiplier deux matrices, alors que le programme correspondant
en assembleur prendrait quelques centaines de lignes.

4.1.1 Interprteurs et compilateurs


On distingue grossirement deux familles de langages informatique, les langages interprts et les langages compils.
E. Viennet - GTR - v1.2d

56

Partie 4. Notions de compilation

Un programme en langage interprt va tre traduit au fur et mesure de son excution par un interprteur. Un interprteur est un programme charg de dcoder chaque
instruction du langage et de dexcuter les actions correspondantes.
Dans le cas de programmes compils, la traduction en langage machine a lieu une fois
pour toute. Le compilateur (traducteur) traduit chaque instruction du langage en une suite
plus ou moins complexe dinstructions en langage machine. Les programmes compils
sexcutent ainsi plus rapidement que les programmes interprts, car la traduction est
dja faite. On perd cependant en souplesse de programmation, car les types de donnes
doivent tre connus au moment de la compilation.
Un compilateur traduit un programme source crit dans un langage de haut niveau
(par exemple C) en un autre programme dans un langage de bas niveau (par exemple
lassembleur). Cette opration de traduction est assez complexe ; les compilateurs sont
des programmes sophistiqus, qui ont beaucoup progress ces dernires annes.

4.1.2

Principaux langages

Les principaux langages compils sont :


C/C++
ADA
Cobol
Fortran
Pascal

programmation systme et scientifique ;


logiciels embarqus ;
gestion ;
calcul scientifique ;
enseignement.

Quelques langages interprts :


BASIC
LISP
Prolog
Perl
Python
Java
MATLAB
Mathematica

bricolage ;
Intelligence Artificielle ;
idem ;
traitement de fichier textes ;
programmation systme, internet ;
applets internet ;
calcul scientifique ;
idem.

Notons que la distinction compil/interprt est parfois floue. Certains langages, comme
LISP, Java ou Python, peuvent subir une premire phase de compilation vers un langage
intermdiaire (bytecode), qui sera lui mme interprt.

4.2

Compilation du langage C sur PC

Nous nous intressons dans cette section la traduction en assembleur des programmes
en langage C sur PC (processeurs de la famille 80x86 que nous avons tudi dans les chapitres prcdents).
Le dtail de cette traduction (ou compilation) dpend bien entendu du compilateur
utilis et du systme dexploitation (DOS, Windows, UNIX,...). Il dpend aussi de divers
rglages modifiables par le programmeur : taille du type int (16 ou 32 bits), modle de
E. Viennet - GTR - v1.2d

4.2

Compilation du langage C sur PC

57

mmoire utilis (pointeurs sur 16 ou 32 bits, donnes et code dans des segments diffrents
ou non, etc.).
Nous naborderons pas ces problmes dans ce cours (voir la documentation dtaille
du compilateur utilis si besoin), mais nous tudierons quelques exemples de programmes
C et leur traduction.
Le compilateur utilis est Turbo C++ version 3 (en mode ANSI C) sous DOS, avec des
entiers de 16 bits et le modle de mmoire small. Normalement, ce compilateur gnre
directement du code objet (fichier .OBJ) partir dun fichier source en langage C (fichier
.C ou .CPP). Il est cependant possible de demander larrt de la compilation pour obtenir
du langage assembleur (fichier .ASM). Pour cela, utiliser sous DOS la commande :
tcc -S exemple.c
Un fichier exemple.asm est alors cr.

4.2.1

Traduction dun programme simple

Considrons le programme en langage C suivant :


/* Programme EXEMPLE_1.c en langage C */
void main(void) {
char X = 11;
char C = A;
int Res;
if (X < 0)
Res = -1;
else
Res = 1;
}
Trois variables, X, C et Res sont dfinies avec ou sans valeur initiale. Ensuite, on teste
le signe de X et range 1 ou -1 dans la vaiable Res.
La figure 14 montre la traduction en assembleur effectue par Turbo C1 .
Remarquons les points suivants :
1. La fonction main() est considre ce stade comme une procdure ordinaire
(PROC near). Cest plus tard, lors de la phase ddition de lien, quil sera indiqu
que la fonction main() correspond au point dentre du programme (=premire
instruction excuter). La fonction est termine par linstruction RET.
2. On nutilise pas ici de segment de donnes : toutes les variables sont alloues sur
la pile.
3. Lallocation des variables sur la pile seffectue simplement en soustrayant au pointeur SP le nombre doctets que lon va utiliser (ici 4, car 2 variables X et C dun
octet, plus une variable (Res) de 2 octets).
4. La ligne X = 11 est traduite par
MOV byte ptr [bp-1], 11
1

Nous avons lgrement simplifi le rsultat obtenu par tcc -S pour le rendre plus lisible.

E. Viennet - GTR - v1.2d

58

Partie 4. Notions de compilation

_TEXT
;
;
;

SEGMENT byte public CODE


void main(void) {
ASSUME
PROC
PUSH
MOV
SUB

_main

;
;
;

cs:_TEXT
near
bp
bp,sp
sp, 4
char X = 11;

MOV
;
;
;

byte ptr [bp-1], 11


char C = A;

MOV
;
;
;
;

byte ptr [bp-2], 65


int Res;
if (X < 0)

CMP
JGE

byte ptr [bp-1], 0


@1@86

;
;
;

Res = -1;
MOV
JMP

@1@86:
;
;
;
;
MOV
@1@114:
;
;
}
;
MOV
POP
RET
_main ENDP
_TEXT ENDS
END

word ptr [bp-4], 65535


@1@114

else
Res = 1;
word ptr [bp-4], 1

sp,bp
bp

F IG . 4.1 Traduction de EXEMPLE_1.C effectue par Turbo C.


E. Viennet - GTR - v1.2d

4.2

Compilation du langage C sur PC

59

Noter lutilisation de byte ptr pour indiquer que BP contient ici ladresse dune
donne de taille octet.

5. Le test if (X <0) est traduit par une instruction CMP suivie dun branchement conditionnel, utilisant une tiquette place par le compilateur (do son nom
trange : @1@114).

4.2.2

Fonctions C et procdures

Chaque langage de programmation doit dfinir une convention de passage des paramtres lors des appels de procdures ou de fonctions. Cette convention permet de prvoir
ltat de la pile avant, pendant et aprs un appel de fonction (dans quel ordre sont empils
les paramtres ? Qui est responsable de leur dpilement ? Comment est passe la valeur
de retour ?)
Etudions partir dun exemple simple comment sont passs les paramtres lors des
appels de fonctions en langage C.

/* Programme EXEMPLE_2.C */
int ma_fonction( int x, int y ) {
return x + y;
}
void main(void) {
int X = 11;
int Y = 22;
int Res;
Res = ma_fonction(X, Y);
}

La traduction en assembleur de ce programme (effectue par Turbo C) est donne


dans lencadr suivant.
E. Viennet - GTR - v1.2d

60

Partie 4. Notions de compilation

_TEXT
SEGMENT byte public CODE
;
; int ma_fonction( int x, int y ) {
ASSUME cs:_TEXT
_ma_fonction
PROC
near
PUSH
bp
MOV
bp,sp
;
; return x + y;
;
MOV
ax, [bp+4]
ADD
ax, [bp+6]
; }
POP
bp
RET
_ma_fonction
ENDP
;
; void main(void) {
;
ASSUME cs:_TEXT
_main
PROC
near
PUSH
bp
MOV
bp,sp
SUB
sp,6
; int X = 11;
MOV
[bp-2], 11
; int Y = 22;
MOV
[bp-4], 22
;
; int Res;
; Res = ma_fonction(X, Y);
PUSH
word ptr [bp-4]
PUSH
word ptr [bp-2]
CALL
_ma_fonction
ADD
sp, 4
MOV
[bp-6],ax
; }
MOV
sp,bp
POP
bp
RET
_main
ENDP
_TEXT
ENDS
En tudiant cet exemple, on constate que :
1. la fonction C ma_fonction() a t traduite par une procdure assembleur nomE. Viennet - GTR - v1.2d

4.3

Utilisation dassembleur dans les programmes C sur PC

61

me _ma_fonction, qui lit ces arguments sur la pile laide de la technique que
nous avons vue en section 3.5.4 (page 53) ;
2. la fonction ne modifie pas ltat de la pile ;
3. Avant lappel de la fonction (CALL), les arguments sont empils (PUSH). Aprs le
retour de la fonction, le pointeur SP est incrment pour remettre la pile dans son
tat prcdent (ADD sp, 4 est quivalent deux instructions POP 2 octets).
4. La valeur retourne par la fonction2 est passe dans AX (do linstruction MOV [bp-6], ax).
Le respect des conventions dappel de procdures est bien entendu trs important si
lon dsire mlanger des fonctions C et des procdures en assembleur3 .

4.3 Utilisation dassembleur dans les programmes


C sur PC
Il est possible dintroduire explicitement des instructions assembleur dans des programmes en langage C (ou C++). Evidemment, cette pratique conduit un programme
non portable, car le langage assembleur diffre dun type dordinateur lautre (on a
vu que la portabilit tait lune des raisons conduisant crire en langage C). Cependant,
lorsque lon crit un programme utilisant les ressources matrielles dune machine donne
(par exemple un PC), il est souvent plus confortable dcrire un programme C contenant
quelques lignes dassembleur que de tout crire en assembleur.
La faon de procder diffre suivant le type de compilateur. Nous ne mentionnerons
que lapproche retenue par Turbo C++/TASM4
Voici un exemple en langage C :
void main(void) {
int A = 20;
asm {
MOV AX, A
SHL AX, 1
}
printf( "AX =%d\n", _AX );
}
Ce programme affiche 40.
Le mot cl asm permet dintroduire des instructions assembleur. Ces instructions
peuvent accder aux variables dclares en C (ici la variable entire A).
Dautre part, les instructions en C peuvent accder aux registres du processeur, par
lintermdiaire de pseudo-variables _AX, _BX,_CX, etc. (nom du registre prcd
dun caractre soulign.)
Pour plus dinformation, on se rfrera la documentation de Turbo C (aide en ligne).
2

Les fonctions C retournent toujours une seule valeur.


Attention, dans dautres langages comme Pascal, les conventions sont diffrentes.
4
Le logiciel TASM est distribu sparment de Turbo C, et nest donc pas toujours disponible.
3

E. Viennet - GTR - v1.2d

62

E. Viennet - GTR - v1.2d

Partie 4. Notions de compilation

Partie 5
Le systme dexploitation
5.1

Notions gnrales

Le systme dexploitation dun ordinateur est le programme qui permet daccder aux
ressources matrielles de cet ordinateur. Ces ressources matrielles sont essentiellement
les organes dentres/sorties : clavier, cran, liaisons rseau, imprimante, disque dur, etc.
Les priphriques dentres/sorties varient dun modle dordinateur lautre. Mme
au sein de la famille des compatibles PC, on trouve difficilement deux modles dots
dexactement les mmes priphriques (cartes dextension par exemple). De ce fait, les
instructions excuter pour piloter tel priphrique (par exemple pour afficher un rectangle rouge lcran) diffrent dun ordinateur lautre.
Le rle principal du systme dexploitation est disoler les programmes des dtails du
matriel. Un programme dsirant afficher un rectangle ne va pas envoyer des instructions
la carte graphique de lordinateur, mais plutt demander au systme dexploitation de
le faire. Cest le systme dexploitation qui doit connaitre les dtails du matriel (dans ce
cas le type de carte graphique et les instructions quelle comprend). Cette rpartition des
rles simplifie grandement lcriture des programmes dapplication1
Le systme dexploitation est donc un programme complexe, li la configuration
matrielle de la machine. Nous tudierons en deuxime anne les principes de fonctionnement des systmes dexploitation. Notons simplement que tout systme dexploitation
est divis en plusieurs couches. La couche basse est responsable de la gestion du matriel,
et change par exemple suivant le type de priphrique install. Les couches plus hautes
sont charges de fonctions plus volues (gestion des fichiers sur disque par exemple),
plus ou moins indpendantes du matriel.

On appelle programme dapplication, ou simplement application, un programme qui effectue


des traitements directement utile pour lutilisateur de lordinateur (traitement de texte, base de
donnes, etc.), par opposition aux programmes qui ne sont pas directement visibles par lutilisateur
(comme le systme dexploitation ou les divers utilitaires grant lordinateur).
E. Viennet - GTR - v1.2d

64

Partie 5. Le systme dexploitation


Les systmes dexploitation les plus rpandus sont les suivants :
Systme
DOS
Windows
Window NT
VMS
UNIX

Type de machine
PC
PC
PC, qq stations
Vax
Tous

Caractristiques
simple, rpandu, peu puissant.
interface graphique, trs rpandu, peu fiable.
multi-tche.
multi-tche, fiable, ancien.
multi-tche, fiable, flexible.

Dans ce cours, nous nous concentrerons sur les ordinateurs PC fonctionnant avec le
systme DOS. Cest un systme trs peu puissant, qui noffre que le strict minimum de
fonctionnalits. De ce fait, il est relativement simple.

5.2

Prsentation du BIOS

Le BIOS (Basic Input Output System, systme dentres/sorties de base) constitue la


couche basse de tous les systmes dexploitations sur PC. Il est donc responsable de la
gestion du matriel : clavier, cran, disques durs, liaisons sries et parallles.
Le programme du BIOS se trouve en mmoire morte (ROM), cest dire dans une
mmoire gardant son contenu lorsque lon interrompt son alimentation lectrique2 .
Chaque modle de PC est vendu avec une version du BIOS adapt sa configuration
matrielle.

5.2.1

Les fonctions du BIOS

Du point de vue de lutilisation, on peut considrer le BIOS comme une librairie de


fonctions. Chaque fonction effectue une tche bien prcise, comme par exemple afficher
un caractre donn sur lcran. Lappel de lune de ces fonctions constitue un appel systme.
On pourrait envisager que les fonctions du BIOS soient simplement des procdures,
que lon appellerait avec linstruction CALL en passant les paramtres ncessaires. Ce
nest pas le cas, le mcanisme dappel est diffrent.
En effet, il a t prvu de pouvoir modifier le comportement du BIOS en cours dutilisation, par exemple pour grer un nouveau priphrique ou pour modifier la gestion
dun priphrique existant. Le code du BIOS tant en mmoire morte, il nest pas modifiable. De plus, le BIOS tant diffrent dun ordinateur lautre, les adresses des fonctions
changent...
Prenons un exemple : soit la fonction du BIOS affichant un caractre (donn par
son code ASCII) sur lcran. Supposons que sur notre PC, la premire instruction de cette
fonction soit ladresse F1234560H. Sur le modle dune autre marque de notre voisin,
cette mme fonction pourrait tre implante ladresse F1234550H.
2

En fait, le BIOS est souvent en mmoire EEPROM ou FLASH, afin de pouvoir le remplacer
plus facilement.
E. Viennet - GTR - v1.2d

5.2

Prsentation du BIOS

65

5.2.2 Vecteurs dinterruptions


Le problme est rsolu par lutilisation dune table dindirection, la table des vecteurs
dinterruptions3 .
Cette table est place en mmoire principale (RAM), et contient les adresses (en ROM
ou en RAM) des fonctions du BIOS. Elle est implante partie de ladresse 00000000H
(premire case mmoire) et est initialis par le BIOS lui mme au moment du dmarrage
du PC (boot).
Adresse
0000
0004
...

contenu
adresse de la premire fonction du BIOS
adresse de la deuxime fonction du BIOS
...

Chaque lment de la table occupe 4 octets (adresse 32 bits). La table a 256 lments (et
occupe donc 1Ko).
Dans lexemple voqu plus haut, si lon sait que la fonction du BIOS qui affiche un
caractre est la 33ime, on va lappeler en lisant la 33ime ligne de la table, puis en allant
excuter les instructions ladresse trouve. Sur notre PC, la table contiendrait :
Adresse contenu
...
...
0084H
F1234560H
(car 4x33 = 84H).
...
...
La table des vecteurs dinterruptions contient des valeurs diffrentes pour chaque version de BIOS, et peut tre modifie pour pointer sur du code en mmoire principale,
modifiant alors le BIOS existant.

5.2.3

Appel systme : instruction INT n

Linstruction INT n permet dappeler la n-ime fonction de la table des vecteurs


dinterruptions.
n est un entier compris entre 0 et 255 (1 octet), car il y a 256 vecteurs dinterruptions
dans la table.
Linstruction INT n est semblable linstruction CALL, sauf que ladresse de destination est donne par la table des vecteurs dinterruptions, et que les indicateurs sont
automatiquement sauvegards sur la pile. De plus, ladresse de retour complte (32 bits)
est empile, car le traitant dinterruption nest pas ncessairement dans le mme segment
de code que le programme appelant.
Le droulement de INT n se passe comme suit :
1. sauvegarde les indicateurs du registre dtat sur la pile (les indicateurs sont regroups dans un mot de 16 bits) ;
2. sauvegarde CS et IP sur la pile ;
3. CS et IP sont chargs avec la valeur lue ladresse 4n, n tant le paramtre de INT.
Lexcution continue donc au dbut du traitant dinterruption.
3

On emploie abusivement le terme dinterruption car le mme mcanisme est utilis pour les
interruptions matrielles que nous tudierons plus loin.
E. Viennet - GTR - v1.2d

66

Partie 5. Le systme dexploitation

5.2.4

Traitants dinterruptions

Un traitant dinterruption est une routine4 appele via la table des vecteurs dinterruption par linstruction INT n.
Les traitants dinterruptions sont trs similaires des procdures ordinaires, sauf
quils doivent se terminer par linstruction IRET au lieu de RET.
linstruction IRET est trs similaire RET, sauf que CS et IP sont dpils, et que
tous les indicateurs sont restaurs leur anciennes valeurs, sauvegardes sur la pile par
INT n.
Notons que les ventuels paramtres du traitant dinterruption sont toujours passs
par registre.

5.2.5

Quelques fonctions du BIOS


INT
0
5
10H
12H
13H
14H
16H

5.3

Fonction
Division par 0
Copie dcran
Ecran
Taille mmoire
Gestion disque dur
Interface srie
Clavier

appel automatiquement lors de div. par 0


gestion des modes vido
(initialiser, lire/crire secteurs)
(lire caractre, tat du clavier)

Prsentation du DOS

Le systme DOS (Disk Operating System, systme dexploitation de disque) repose


sur le BIOS, dont il appelle les fonctions pour interagir avec le matriel.
Les fonctions du DOS sutilisent comme celles du BIOS, via des vecteurs dinterruptions. Elles offrent des fonctionnalits de plus haut niveau que le BIOS (entres/sorties,
ouverture de fichiers sur disque, etc.).
Les fonctions du DOS sappellent toutes laide du vecteur 21H. La valeur du registre
AH permet dindiquer quelle est la fonction que lon appelle :
MOV AH, numero_fonction
INT 21H
Nous avons dja mentionn la fonction 4CH du DOS, qui permet de terminer un
programme et de revenir linterprteur de commandes DOS :
MOV AH, 4CH
INT 21H

5.3.1

Description de quelques fonctions du DOS

Voici titre dexemple quelques fonctions du DOS :


4

les mots routines, fonctions et procdures sont synonymes dans ce cours.

E. Viennet - GTR - v1.2d

5.4

Modification dun vecteur dinterruption en langage C

Numro
01H
02H
09H
0BH

Fonction
Lecture caractre
Affiche caractre
Affiche chane de caractres
Lit tat clavier

67

met le code ascii lu dans AL


code ascii dans registre DL
DX=adresse dbut chane, termine par $
met AL=1 si caractre, 0 sinon.

Ce programme lit un caractre au clavier et laffiche en majuscule :


MOV
INT
AND
MOV
MOV
INT

AH,
21H
AL,
DL,
AH,
21H

01H

;
;
11011111b ;
AL
;
02H
;
;

code fonction DOS


attente et lecture dun caract\ere
passe en majuscule
code fonction affichage
affiche le caractere

Dans la suite du cours, nous aurons loccasion de dcrire dautres fonctions du BIOS
et du DOS.

5.4

Modification dun vecteur dinterruption en langage C

Nous allons maintenant voir comment lon peut modifier la table des vecteurs dinterruptions.
On modifie un vecteur dinterruption pour installer un traitant dinterruption, fonction appele par linstruction INT n. Linstallation de traitants permet de modifier le
comportement du systme dexploitation, ou de communiquer avec des priphriques
dentres sorties, comme nous ltudierons dans le chapitre suivant.
En gnral, le systme a install un traitant pour chaque vecteur dinterruption. Linstallation dun nouveau traitant doit donc se faire avec prcautions : on va sauvegarder
lancienne adresse, de faon pouvoir remettre le vecteur dans son tat initial la fin de
notre programme.
Les vecteurs dinterruptions peuvent tre modifis en assembleur ou en langage C.
Nous travaillerons ici en langage C : le principe est le mme quen assembleur, mais les
programmes sont plus intelligibles.

5.4.1 Ecriture dun traitant dinterruption en C


Nous avons vu que le compilateur gnrait pour chaque fonction C un prcdure en
assembleur, termine par linstruction RET.
Un traitant dinterruption est similaire une procdure, mais termine par IRET. En
Turbo C sur PC, on peut signaler au compilateur quune fonction est un traitant dinterruption grce au mot cl interrupt. La dclaration
void interrupt un_traitant();
indique que la fonction nomme un_traitant est un traitant dinterruption. Les
traitants ne retournent pas de valeur et ne prennent pas darguments.
E. Viennet - GTR - v1.2d

68

Partie 5. Le systme dexploitation

5.4.2

Installation dun traitant

En Turbo C, on dispose de deux fonctions qui permettent de manipuler facilement la


table des vecteurs dinterruption : setvect() et getvect()5 .
setvect() modifie un vecteur, et getvect() lis la valeur dun vecteur. La valeur
dun vecteur dinterruption est ladresse de la fonction traitante. Une variable TRAITANT
de ce type se dclare comme suit :
void interrupt (*TRAITANT) ();
(littralement : old_handler est un pointeur sur une fonction de type traitant
dinterruption).

Exemple
#include <dos.h>
void interrupt ( *ancien_traitant)(...);
void interrupt un_traitant() {
/* code C de notre traitant
....
*/
/* Appelle le traitant qui etait installe */
ancien_traitant();
}
void main(void) {
/* Sauve lancien vecteur 1BH */
ancien_traitant = getvect( 0x1B );
/* Installe nouveau traitant pour INT 1BH */
setvect( 0x1B, un_traitant );
/* ... programme ... */

/* Restaure ancien vecteur */


setvect( 0x1B, ancien_traitant );
}

Ces fonctions sont dclares dans DOS.H.

E. Viennet - GTR - v1.2d

Partie 6
Les interruptions
Nous tudions dans ce chapitre les interruptions matrielles (ou externes), cest dire
dclenches par le matriel (hardware) extrieur u processeur. Nous nous appuyons ici
aussi sur lexemple du PC.

6.1

Prsentation

Les interruptions permettent au matriel de communiquer avec le processeur.


Les changes entre le processeur et lextrieur que nous avons tudis jusquici se
faisait toujours linitiative du processeur : par exemple, le processeur demande lire ou
crire une case mmoire.
Dans certains cas, on dsire que le processeur ragisse rapidement un vnement
extrieur : arriv dun paquet de donnes sur une connexion rseau, frappe dun caractre
au clavier, modification de lheure1 . Les interruptions sont surtout utilises pour la gestion
des priphriques de lordinateurs.
Une interruption est signale au processeur par un signal lctrique sur une borne
spciale. Lors de la rception de ce signal, le processeur traite linterruption ds la fin
de linstruction quil tait en train dexcuter2 . Le traitement de linterruption consiste
soit :
lignorer et passer normalement linstruction suivante : cest possible uniquement pour certaines interruptions, nommes interruptions masquables. Il est en effet parfois ncessaire de pouvoir ignorer les interruptions pendant un certain temps,
pour effectuer des traitements trs urgents par exemple. Lorsque le traitement est
termin, le processeur dmasque les interruptions et les prend alors en compte.
excuter un traitant dinterruption (interrupt handler). Un traitant dinterruption
est un programme qui est appel automatiquement lorsquune interruption survient.
Ladresse de dbut du traitant est donne par la table des vecteurs dinterruptions,
que nous avons dja rencontr dans le chapitre prcdent. Lorsque le traitant
1

Lheure change en permanence... nous verrons que le circuit dhorloge, extrieur au processeur, envoie un signal dinterruption intervalles rguliers (quelques ms).
2
Le processeur ne peut pas ragir plus vite ; imaginez les consquences dune instruction abandonne la moiti de son excution...
E. Viennet - GTR - v1.2d

70

Partie 6. Les interruptions


effectuer son travail, il excute linstruction spciale IRET qui permet de reprendre
lexcution lendroit o elle avait t interrompue.

6.2
6.2.1

Interruption matrielle sur PC


Signaux dinterruption

Les processeurs de la famille 80x86 possdent trois bornes pour grer les interruptions : NMI, INTR, et INTA (voir figure 6.1).

MPU

INTA
INTR

NMI

F IG . 6.1 Bornes dinterruptions.

NMI est utilise pour envoyer au processeur une interruption non masquable (NMI, Non
Maskable Interrupt). Le processeur ne peut pas ignorer ce signal, et va excuter le
traitant donn par le vecteur 02H. Ce signal est normalement utilis pour dtecter
des erreurs matrielles (mmoire principale dfaillante par exemple).
INTR (Interrupt Request), demande dinterruption masquable. Utilise pour indiquer au
MPU larrive dune interruption.
INTA (Interrupt Acknowledge) Cette borne est mise 0 lorsque le processeur traite effectivement linterruption signale par INTR (cest dire quelle nest plus masque)3 .

6.2.2

Indicateur IF

A un instant donn, les interruptions sont soit masques soit autorises, suivant ltat
dun indicateur spcial du registre dtat, IF (Interrupt Flag).
si IF = 1, le processeur accepte les demandes dinterruptions masquables, cest
dire quil les traite immdiatement ;
si IF = 0, le processeur ignore ces interruptions.
Ltat de lindicateur IF peut tre modifi laide de deux instructions, CLI (CLear
IF, mettre IF 0), et STI (SeT IF, mettre IF 1).
3

On note INTA, pour indiquer que ltat normal de cette borne est 1 et non 0 (invers).

E. Viennet - GTR - v1.2d

6.2

Interruption matrielle sur PC

71

6.2.3 Contrleur dinterruptions


Lordinateur est reli a plusieurs priphriques, mais nous venons de voir quil ny
avait quun seul signal de demande dinterruption, INTR.
Le contrleur dinterruptions est un circuit spcial, extrieur au processeur, dont le
rle est de distribuer et de mettre en attente les demandes dinterruptions provenant des
diffrents priphriques.

MPU

BUS DE DONNEES

INTA

INTA

INTR

INT

PIC

IRQ 0
IRQ i

Priphriques

IRQ 7
NMI

F IG . 6.2 Le contrleur dinterruptions (PIC, pour Programmable Interruption


Controler).
La figure 6.2 indique les connexions entre le MPU et le contrleur dinterruptions.
Le contrleur est rli aux interfaces grant les priphriques par les bornes IRQ (InteRrupt reQuest). Il gre les demandes dinterruption envoyes par les priphriques, de
faon les envoyer une par une au processeur (via INTR). Il est possible de programmer le contrleur pour affecter des priorits diffrentes chaque priphrique, mais nous
naborderons pas ce point dans ce cours.
Avant denvoyer linterruption suivante, le contrleur attend davoir reu le signal
INTA, indiquant que le processeur a bien trait linterruption en cours.

6.2.4

Droulement dune interruption externe masquable

Reprenons les diffrents vnements lis la rception dune interruption masquable :


1. Un signal INT est mis par un priphrique (ou plutt par linterface grant celuici).
2. Le contrleur dinterruptions reoit ce signal sur une de ses bornes IRQi . Ds que
cela est possible (suivant les autres interruptions en attente de traitement), le contrleur envoie un signal sur sa borne INT.
3. Le MPU prend en compte le signal sur sa borne INTR aprs avoir achev lexcution de linstruction en cours (ce qui peut prendre quelques cycles dhorloge). Si
lindicateur IF=0, le signal est ignor, sinon, la demande dinterruption est accepte.
4. Si la demande est accepte, le MPU met sa sortie INTA au niveau 0 pendant 2
cycles dhorloge, pour indiquer au contrleur quil prend en compte sa demande.
5. En rponse, le contrleur dinterruption place le numro de linterruption associ
la borne IRQi sur le bus de donnes.
E. Viennet - GTR - v1.2d

72

Partie 6. Les interruptions


6. Le processeur lit le numro de linterruption sur le bus de donnes et lutilise pour
trouver le vecteur dinterruption. Ensuite, tout se passe comme pour un appel systme (interruption logicielle, voir page 65), cest dire que le processeur :
(a) sauvegarde les indicateurs du registre dtat sur la pile ;
(b) met lindicateur IF 0 (masque les interruptions suivantes) ;
(c) sauvegarde CS et IP sur la pile ;
(d) cherche dans la table des vecteurs dinterruptions ladresse du traitant dinterruption, quil charge dans CS:IP.
7. La procdure traitant linterruption se droule. Pendant ce temps, les interruptions sont masques (IF=0). Si le traitement est long, on peut dans certains cas
r-autoriser les interruptions avec linstruction STI.
8. La procdure se termine par linstruction IRET, qui restaure CS, IP et les indicateurs partir de la pile, ce qui permet de reprendre le programme qui avait t
interrompu.

6.3

Exemple : gestion de lheure sur PC

Lhorloge dun PC peut tre considr comme un priphrique dun type particulier.
Il sagit dun circuit lectronique cadenc par un oscillateur quartz (comme une montre
ordinaire), qui est utilis entre autre pour grer lheure et la date, que de nombreux programmes utilisent.
Lhorloge envoie une interruption matrielle au processeur toutes 0,055 secondes (soit
18,2 fois par secondes). Le vecteur correspondant est le numero 08H.
Pour grer lheure, le BIOS installe un traitant pour linterruption 08H. Ce traitant
incrmente simplement un compteur, nombre entier cod sur 32 bits et toujours rang
ladresse 0040:006C en mmoire principale.
Ainsi, si un programme dsire connaitre lheure, il lui suffit de lire cet emplacement
mmoire, qui change automatiquement 18,2 fois par secondes. Une simple division
permet alors de convertir ce nombre en heures et minutes.
Remarques :
1. Les programmes usuels utilisent des appels systmes du DOS plus pratiques, qui
se basent sur la valeur de la mmoire 0040:006C et effectuent les conversions
ncessaires.
En langage C, on pourra utiliser la fonction time() qui appelle elle mme le
DOS.
2. En modifiant le vecteur dinterruption 08H, on peut faire en sorte que le PC excute
nimporte quelle tche de faon rgulire. En pratique, il est dconseill de modifier directement le vecteur 08H. Le traitant dhorloge standard du systme BIOS
appelle une autre interruption (logicielle), qui est prvue pour tre droute par les
utilisateurs.
E. Viennet - GTR - v1.2d

6.4

Entres/Sorties par interruption

6.4

73

Entres/Sorties par interruption

En gnral, les priphriques qui recoivent des donnes de lextrieur mettent en


uvre un mcanisme dinterruption : clavier, liaisons sries (modem, souris...) et parallles (imprimantes), interfaces rseau, contrleurs de disques durs et CD-ROMS, etc.
Nous tudierons dans le chapitre suivant le cas de la liaison srie.

6.4.1 Un exemple
Etudions ici trs schmatiquement le cas dune lecture sur disque dur, afin de comprendre comment lutilisation dune interruption permet de construire un systme dexploitation plus efficace.
Soit un programme lisant des donnes sur un disque dur, les traitant et les affichant
sur lcran.
Voici lalgorithme gnral sans utiliser dinterruption :
Rpter :
1. envoyer au contrleur de disque une demande de lecture dun bloc de donnes.
2. attendre tant que le disque ne rpond pas (scrutation) ;
3. traiter les donnes ;
4. afficher les rsultats.
Cette mthode simple est appele entre/sortie par scrutation. Ltape 2 est une boucle
de scrutation, de la forme :
Rpter :
regarder si le transfert du disque est termin ;
Tant quil nest pas termin.
La scrutation est simple mais inefficace : lordinateur passe la majorit de son temps
attendre que les donnes soit transfres depuis le disque dur. Pendant ce temps, il rpte
la boucle de scrutation.
Ce temps pourrait tre mis profit pour raliser une autre tche. Trs grossirement,
les entres/sorties par interruption fonctionnent sur le modle suivant :
1. Installer un traitant dinterruption disque qui traite les donnes reues et les affiche ;
2. envoyer au contrleur de disque une demande de lecture des donnes ;
3. faire autre chose (un autre calcul ou affichage par exemple).
Dans ce cas, ds que des donnes arrivent, le contrleur de disque envoie une interruption (via le contrleur dinterrruptions) au processeur, qui arrte temporairement le
traitement 3 pour soccuper des donnes qui arrivent. Lorsque les donnes sont traites,
le traitement 3 reprend (IRET). Pendant lopration (lente) de lecture du disque dur, le
processeur peut faire autre chose (par exemple jouer aux checs !).
Dans la pratique, les choses sont un peu plus compliques : il faut avoir plusieurs
tches faire en mme temps pour que lutilisation des interruptions permettent un gain
intressant. Ce principe est surtout mis profit dans les systmes multi-tches comme
UNIX ou Windows NT, que nous tudierons en deuxime anne.
E. Viennet - GTR - v1.2d

74

E. Viennet - GTR - v1.2d

Partie 6. Les interruptions

Partie 7
Les entres/sorties
Les ordinateurs sont utiliss pour traiter et stocker des informations. Nous avons jusquici dcrit le fonctionnement du processeur et la mmoire principale. Nous allons maintenant tudier comment un ordinateur peut changer de linformation avec son environnement ; ces changes dinformations sont nomms entres/sorties (ou IO, Input/Output en
anglais).
Il peut sagir dun flux dinformations de lextrieur vers lordinateur (acquisition via
le clavier, une connexion rseau, un disque dur, etc.), ou dun flux de lordinateur vers
lextrieur (cran, rseau, disque, etc.).
Les techniques dentres/sorties sont trs importantes pour les performances de lordinateur. Rien ne sert davoir un un processeur calculant trs rapidement sil doit souvent
perdre son temps pour lire des donnes ou crire ses rsultats.
Durant une opration dentre/sortie, de linformation est change entre la mmoire
principale et un priphrique reli lordinateur. Nous tudierons plus loin dans ce cours
le fonctionnement de certains priphriques (disques durs, clavier, cran). Cet change
ncessite une interface ou contrleur, circuit lectronique grant la connexion. Linterface
ralise des fonctions plus ou moins complexes suivant le type de priphrique. Son but est
surtout de dcharger le processeur pour amliorer les performances du systme.
A la fin de cette partie, nous dcrivons pour illustrer les concepts prsents le circuit
dinterface srie asynchrone 8250, qui quipe tous les PC.

7.1

Les bus du PC

Nous avons dans les chapitres prcdents dcrit de faon simplifie les bus reliant
le processeur la mmoire principale. Nous avons distingu le bus dadresse, le bus de
donnes et le bus de commandes (signaux de commandes type R/W).
En fait, la plupart des changes dinformations dans lordinateur se font sur des bus :
connexions processeur/mmoire, mais aussi connexions entre le processeur et les interfaces dentres sorties. Il existe une grande varit de bus ; chacun est caractris par sa
largeur (nombre de bits) et sa frquence (nombre de cycles par secondes, en Mga-Hertz).
E. Viennet - GTR - v1.2d

76

7.1.1

Partie 7. Les entres/sorties

Bus local

Le bus local est le bus le plus rapide, sur lequel sont directement connects le processeur et la mmoire principale. Il regroupe un bus de donnes un bus dadresse et de
signaux de commandes (voir le chapitre 1).
Le bus local est aussi reli aux contrleurs des bus dextensions, et parfois des
contrleurs de mmoire cache (voir le chapitre 9).

7.1.2

Bus dextension du PC

Les bus dextensions (ou bus dentrs/sorties) permettent de connecter au PC des


contrleurs dextensions (cartes) grce des connecteurs spciaux (slots sur la carte
mre).
Les contrleurs dextensions sont utiliss pour relier le PC aux priphriques dentres/sorties.
Depuis lapparition du PC au dbut des anns 80, plusieurs standards de bus dextension ont ts proposs : ISA, MCA, EISA...

MPU

MP

BUS LOCAL

Controleur bus
dextension (ISA)

CARTE
GRAPHIQUE

CARTE
SON

F IG . 7.1 Bus local et bus dextension type ISA.

Le bus ISA
Le bus dextension ISA (Industry Standard Architecture) est le plus rpandu sur PC.
De frquence relativement basse et de caractristiques peu puissantes, il est utilis pour
connecter des cartes relativement lentes (modems, cartes sons, ...).
Les principales caractristiques du bus ISA (PC-AT) sont : 16 bits de donnes, 24 bits
dadresse, 16 lignes dinterruption, frquence 8 MHz.
E. Viennet - GTR - v1.2d

7.1

Les bus du PC

77

7.1.3 Bus local PCI


Les priphriques dentres/sorties modernes demandent des transferts dinformation
trs importants entre la mmoire principale (MP) et le contrleur. Par exemple, une carte
graphique SVGA rcente possde une mmoire vido de 1 8 Mo, et met en uvre des
transferts entre cette mmoire et la MP 60 Mo/s.
Pour permettre de tels dbits, il est ncessaire de connecter le contrleur de priphrique directement sur le bus local. Le contrleur bnficie ainsi du haut dbit de ce bus ;
de plus, il peut en prendre le contrle pour effectuer des transferts directement avec la MP
sans passer par le processeur.
Le premier bus PC bas sur ces principes a t le bus VLB (VESA Local Bus), qui est
actuellement remplac par le bus PCI (Peripheral Component Interface).
Le bus PCI quipe la grande majorit des PC rcents. Notons quil nest pas rserv
au processeurs INTEL, puisquil est aussi utilis sur les Macintosh base de processeurs
PowerPC. Le principe du bus PCI est justement de dissocier le processeur et les bus.
Cette sparation permet dutiliser une frquence de bus diffrente de celle du processeur
et facilite lvolution des machines.
Les caractristiques du bus PCI sont : 32 ou 64 bits de donnes, 32 bits dadresse,
frquence de 33 MHz. Il permet de dbits de 132 Mo/s en 32 bits, ou 264 Mo/s en 64 bits.

MPU

MP

BUS LOCAL

BUS LOCAL PCI

CONTROLEUR
BUS PCI

PONT PCI/ISA

CARTE
MODEM

CARTE
VIDEO

CARTE
SON

F IG . 7.2 PC avec bus PCI.


La figure 7.2 reprsente larchitecture dun PC avec bus PCI.
E. Viennet - GTR - v1.2d

CARTE
SCSI

78

Partie 7. Les entres/sorties

Le contrleur PCI est la plupart du temps intgr sur la carte mre (il sagit dun
circuit intgr complexe dont les performances sont cruciales pour celles du PC).
Les connecteurs (slot) PCI sont rservs aux priphriques demandants de hauts dbits : cartes vido, contrleurs SCSI, cartes rseaux haut dbit.

7.2

Bus de priphriques

Ces bus permettent de relier une interface (contrleur) de lordinateur un ou plusieurs priphriques (gnralement lextrieur de lordinateur).

7.2.1

Bus SCSI

Le bus SCSI (Small Computer System Interface) est un bus dentres/sorties parallles
qui nest pas limit aux ordinateurs PC, ni mme aux micro-ordinateurs.
Il permet de connecter de 1 7 priphriques de toutes natures (Disques durs, lecteurs
CD/ROM, digitaliseurs (scanners), lecteurs de bandes (streamers), ... ).
La version SCSI 1 permet un taux de transfert de 4 Mo/s (largeur 8 bits). La version
SCSI 2 permet dobtenir jusqua 40 Mo/s en 32 bits.
Le bus SCSI quipe en standard tous les ordinateurs Apple Macintosh, et la grande
majorit des stations de travail. Sur PC, il faut installer une carte dinterface, connecte
soit au bus ISA soit au bus PCI suivant les performances dsires.

7.2.2

Bus PCMCIA

Le bus PCMCIA (Personal Computer Memory Card International Association) est un


bus dextension utilis sur les ordinateurs portables. Il permet la connexion de priphriques de taille trs rduite (format carte bancaire, 3 10 mm dpaisseur, connecteur 68
broches).

7.3
7.3.1

Les entres/sorties sur PC


Gnralits

Les donnes changes entre un priphrique et le processeur transitent par linterface


(ou contrleur) associ ce priphrique.
Linterface possde de la mmoire tampon pour stocker les donnes changes (suivant le type dinterface, cette mmoire tampon fait de 1 seul octet quelques mga-octets).
Linterface stocke aussi des informations pour grer la communication avec le priphrique :
des informations de commande, pour dfinir le mode de fonctionnement de linterface : sens de transfert (entre ou sortie), mode de transfert des donnes (par
scrutation ou interruption), etc. Ces informations de commandes sont communiques linterface lors de la phase dinitialisation de celle-ci, avant le dbut du
transfert.
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

79

des informations dtat, qui mmorisent la manire dont le transfert sest effectu (erreur de transmission, rception dinformations, etc). Ces informations sont
destines au processeur.
On accde aux donnes de chaque interface par le bias dun espace dadresses dentres/sorties, auquel on accde par les instructions IN et OUT du 80x86.
IN AL, adresse E/S lit loctet dadresse spcifie dans lespace dentres/sorties et le
transfre dans le registre AL.
OUT adresse E/S, AL crit le contenu de AL ladresse spcifie de lespace dentres/sorties.
Lors de lexcution des instructions IN et OUT, le processeur met 1 sa borne IO/M
et prsente ladresse E/S sur le bus dadresse. Le signal IO/M indique aux circuits de
dcodage dadresses quil ne sagit pas dune adresse en mmoire principale, mais de
ladresse dune interface dentres/sorties.

7.3.2

Modes de transfert

Le transfert des donnes entre le processeur et linterface peut seffectuer de diffrentes manires.
On distingue les transferts sans condition et les transferts avec condition au priphrique. Les transferts sans condition sont les plus simples ; ils concernent les priphriques
trs simples (interrupteurs, voyants lumineux, ...) qui nont pas de registre dtat et sont
toujours prts.
Les transferts avec condition sont plus complexes : avant denvoyer ou de recevoir
des informations, le processeur doit connaitre ltat du priphrique (par exemple, en
rception sur une liaison rseau, on doit savoir si un octet est arriv avant de demander la
lecture de cet octet).
On distingue ici deux mthodes, les transferts par scrutation et les transferts par interruption, que nous avons dja tudi en section 6.4 (page 73).

7.4 Linterface dentres/sorties sries asynchrones


Linterface entres/sorties sries quippe tous les PC et permet lchange dinformations faible dbit avec un priphrique comme un modem, ou avec un autre PC,
sur des distances infrieures quelques dizaines de mtres.

7.4.1

Pourquoi une transmission srie ?

Sur des distances suprieures quelques mtres, il est difficile de mettre en uvre une
transmission en parallle : cot du cablage, mais surtout interfrences lectromagntiques
entre les fils provoquant des erreurs importantes. On utilise alors une liaison srie, avec
un seul fil portant linformation dans chaque sens.
Sur des distance suprieures quelques dizaines de mtres, on utilisera des modems
aux extrmits de la liaison et on passera par un support de transmission public (rseau
tlphonique ou lignes spcialises) (voir figure 7.3).
E. Viennet - GTR - v1.2d

80

Partie 7. Les entres/sorties

transmission parallele

PC

INTERFACE
PARALLELE

INTERFACE
PARALLELE

PC

distance < 2 m

transmission srie

PC

INTERFACE
SERIE

INTERFACE
SERIE

PC

distance < qq 10 m

PC

INTERFACE
SERIE

MODEM

jonction
liaison srie
normalise

MODEM

jonction

INTERFACE
SERIE

PC

distance quelconque (tlphone)

F IG . 7.3 Diffrents types de transmissions pour relier simplement deux PC.

7.4.2

Principe de la transmission srie asynchrone

En labscence de transmission, le niveau de la liaison est 1 (niveau de repos).


Les bits sont transmis les un aprs les autres, en commenant par le bit de poids
faible b0 . Le premier bit est prcd dun bit start (niveau 0). Aprs le dernier bit, on peut
transmetre un bit de parit (voir cours de rseaux), puis un ou deux bits stop (niveau 1).
Chaque bit a une dure de , qui fixe le dbit transmission. Le nombre de changements de niveaux par seconde est appel rapidit de modulation (RM), et sexprime en
Bauds (du nom de Baudot, linventeur du code TELEX). On a
RM =

et aussi

1
bits/s

Le rcepteur dtecte larrive dun octet par le changement de niveau correspondant


au bit start. Il chantillonne ensuite chaque intervalle de temps au rythme de son horloge.
Comme les dbits binaires de transmission srie de ce type sont faibles (< 19600
bits/s) et que les horloges de lmetteur et du rcepteurs sont suffisament stables (horloges
quartz), il nest pas ncessaire de les synchroniser. Cest la raison pour laquelle ce type
de transmission srie est qualifi dasynchrone.
Lorsque les dbits sont plus importants, la drive des horloges entrainerait des erreurs,
et on doit mettre en uvre une transmission synchrone (voir cours de rseaux).
dbit binaire =

E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

81

Niveau logique
de la liaison
S
T
A
R
T

b0

b1

b2

Dbut

transmission

b3

b4

b5

b6

b7

P
A
R
I
T
E

S
T
O
P

temps

Fin
transmission

dure de transmission de loctet

F IG . 7.4 Transmission dun octet b7 b6 b5 b4 b3 b2 b1 b0 en srie.

7.4.3 Linterface dE/S sries 8250


Le composant lectronique charg de la gestion des transmissions sries asynchrones
dans les PC est appel UART (Universal Asynchronous Receiver Transmitter).
Nous dcrivons dans ce cours le circuit Intel 8250.

Bornes de linterface
HORLOGE

D0
...

BUS DE
DONNEES

D7

UART
8250

A0
A1
A2
CS

BUS
DADRESSES

Controleur dinterruptions

SOUT
SIN
DSR
DTR
RTS
CTS
CD
RI

EMISSION (Serial OUTput)


RECEPTION (Serial INput)
Data Set Ready (Modem pret a communiquer)
Data Terminal Ready (MPU pret a communiquer)
Request To Send (Demande demission)
Clear To Send (Modem pret a emettre)
Carrier Detected (le modem recoit)
Ring Indicator (appel dtect)

INTRPT

F IG . 7.5 Bornes du circuit UART 8250.


Les bornes de linterface UART 8250 sont prsentes sur la figure 7.5. Seules les
bornes essentielles la comprhension du fonctionnement de linterface sont reprsentes.

Les registres du 8250


Linterface 8250 possde un certain nombre de registres de 8 bits permettant de grer
la communication. Ces registres sont lus et modifis par le processeur par le biais des
instructions IN et OUT vues plus haut.
E. Viennet - GTR - v1.2d

82

Partie 7. Les entres/sorties

Ladresse de chaque registre est donne par ladresse de base de linterface (fixe une
fois pour toute) laquelle on ajoute une adresse sur 3 bits A2 A1 A0 .
Une complication supplmentaire est introduite par le fait quil y a plus de 8 registres
diffrents et que lon ne dispose que de 3 bits dadresse. La solution est dutiliser un bit
dun registre spcial, DLAB. Suivant ltat du bit DLAB, on va slectionner tel ou tel jeux
de registres.
La table suivante donne ladresse et le nom de chaque registre du 8250 :

DLAB
0
0
1
1
0
x
x
x
x
x
x

Adresse
A2 A1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
0
1
0
1
1
1
1

REGISTRES
A0
0
0
0
1
1
0
1
0
1
0
1

RBR : Receiver Buffer (registre de rception)


THR : Transmitter Holding Register (registre dmission)
DLL : Divisor Latch LSB (poids faible diviseur horloge)
DLM : Divisor Latch MSB (poids fort diviseur horloge)
IER : Interrupt Enable Register
IIR : Interrupt Identification Register
LCR : Line Control Register
MCR : Modem Control Register
LSR : Line Status Register
MSR : Modem Status Register
non utilis

Exemple : si ladresse de base de linterface est par exemple 3F8H, ladresse du registre RBR sera simplement
3F8H + 000 = 3F8H
et celle de IIR
3F8H + 010b = 3F8H + 2H = 3FAH.
On voit, comme nous lavons dit plus haut, que les registres DLM et IER (par exemple)
possdent la mme adresse (001b). Si le bit DLAB est 0, cette adresse permet daccder
DLM, et si DLAB=1 IER.
Le bit DLAB est le bit de poids fort du registre LCR.
Notons aussi que THR et RBR ont la mme adresse, ce qui nest pas gnant car on
accde toujours en criture THR et en lecture RBR.
Voyons maintenant comment utiliser ces diffrents registres pour programmer linterface de transmission srie.

Choix de la rapidit de modulation


Lhorloge de rfrence du 8250 est un signal 1,8432 MHz stabilis par un quartz.
Une premire division de cette frquence par 16 est effectue dans linterface. La
frquence obtenue est ensuite divise par un diviseur cod sur 16 bits et contenu dans la
paire de registres DLM (poids fort), DLL (poids faible).
On modifie donc le dbit de transmission en changeant les valeurs de DLM et DLL.
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

Le tableau suivant donne


rantes :
Modulation
(bauds)
50
75
110
300
600

83

les valeurs utiliser pour les rapidits de modulation couDiviseur


(hexa)
0900H
0600H
0417H
0180H
00C0H

Modulation
(bauds)
1200
2400
4800
7200
9600

Diviseur
(hexa)
0060H
0030H
0018H
0010H
000CH

Registre THR
Cest le registre dmission. Il est charg par le MPU en excutant linstruction
OUT THR, AL
(o THR est une constant initialise avec ladresse du registre THR).
Le contenu de THR est automatiquement copi par linterface dans le registre dcalage dmission, qui permettra la sortie en srie des bits sur la sortie SOUT.

Registre RBR
Cest le registre de rception. Les bits qui arrivent en srie sur la borne SIN du circuit
entrent dans un registre dcalage. Lorsque ce dernier est complet, il est transfr dans
RBR.
Le MPU peut lire le contenu de RBR avec linstruction
IN AL, RBR
Notons que si un deuxime octet arrive avant que RBR nait t lu par le MPU, il
remplace RBR : on perd le premier arriv, cest lerreur dcrasement1 .

Registre LCR (Line Control Register)


Ce registre de commande permet de dfinir certains paramtres de la transmission, en
fonction de sa configuration binaire.
Bits 0 et 1 : spcifient le nombre de bits de la donne transmettre (caractres de 5, 6, 7
ou 8 bits) :
Bit 1 Bit 0 Nb de bits/caractre
0
0
5 bits
0
1
6 bits
1
0
7 bits
1
1
8 bits
Bit 2 : spcifie le nombre de bits STOP (0 1 stop, 1 2 stops ).
Bit 3 : spcifie la prsence (si 1) ou labsence (si 0) dun bit de contrle derreur (type
bit de parit).
1

Le mme type derreur peut se produire en mission si le processeur crit THR avant que le
caractre prcdent ait t transfr.
E. Viennet - GTR - v1.2d

84

Partie 7. Les entres/sorties

Bit 4 : sil y a un bit de contrle derreur, le bit 4 spcifie sil sagit dun bit de parit
paire (si 1) ou impaire (si 0).
Bit 5 : normalement 0.
Bit 6 : normalement 0.
Bit 7 : bit DLAB, permettant laccs aux registres DLL et DLM dans la phase dinitialisation de linterface.

Registre IER
Ce registre est utilis pour les entres/sorties par interruption.
Bit 0 : interruption lorsque donne reue dans RBR ;
Bit 1 : interruption lorsque registre THR vide ;
Bit 2 : interruption lorsque lun des 4 bits de poids faible de LSR passe 1 ;
Bit 3 : interruption sur tat du modem.

Registre LSR
Ce registre dtat rend compte du fonctionnement de la liaison en rception (bits 0
4) et en mission (bits 5 et 6).
Bit 0 : passe 1 lorsquune donne a t reue et charge dans RBR.
Bit 1 : signale erreur dcrasement. 1 si donne reue et charge dans RBR alors que la
prcdente navait pas t lue. Remis automatiquement 0 par la lecture du registre
LSR.
Bit 2 : passe 1 la suite dune erreur de parit. Remis 0 par la lecture de LSR.
Bit 3 : passe 1 lorsque le niveau du bit STOP nest pas valide (erreur de format). Remis
0 par la lecture de LSR.
Bit 4 : passe 1 lorsque le niveau de la liaison est rest 0 pendant la dure dmission
de la donne (problme de lemetteur). Remis 0 par la lecture de LSR.
Bit 5 : passe 1 lorsquune donne est transfre de THR vers le registre dcalage
dmission (THR est alors libre pour le caractre suivant).
Bit 6 : passe 1 lorsque le registre dcalage dmission est vide.

Registre IIR
IIR est utilis pour les E/S par interruption. Son contenu permet didentifier la cause
de linterruption mise par linterface 8250.

Registre MCR
MCR est le registre de commande du modem.
Bit 0 : commande le niveau de la borne DTR qui informe le modem que le MPU est prt
communiquer ;
Bit 1 : commande la borne RTS qui demande au modem dmettre.
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

85

Registre MSR
MSR est le registre dtat du fonctionnement du modem.

7.4.4 Programmation de linterface en langage C


Nous avons vu que les deux instructions assembleur permettant au processeur de communiquer avec les interfaces dentres/sorties taient IN et OUT.
Il est possible daccder simplement ces instructions en langage C, grce aux fonctions inportb( adr ) et outportb( adr ).
unsigned char inportb( int address )
lit un octet ladresse (de lespace dentres/sorties) indique et le retourne.
void outportb( int address, unsigned char *data )
crit loctet (argument data) ladresse (E/S) indique.
Voici un exemple de configuration de linterface 8250 en langage C. On configure ici
linterface pour un dbit de 300 bauds, en mode scrutation, parit paire, 1 bit stop, 8 bits
de donnes :
#include <dos.h>
/* Quelques constantes pour ameliorer la lisibilite:
*/
#define PORT (0x3F8) /* adresse de linterface */
#define RBR PORT
#define THR PORT
#define LSR (PORT+5)
#define IIR (PORT+2)
#define LCR (PORT+3) /* DLAB ... */
#define DLL PORT
/* DLAB = 1 */
#define DLM (PORT+1) /* DLAB = 1 */
#define IER (PORT+1)
#define MCR (PORT+4)
#define MSR (PORT+6)
/* Initialise linterface 8250
*/
void init_8250(void) {
/* 1- Rapidite de modulation */
outportb( LCR, 0x80 ); /* DLAB = 1 */
outportb( DLM, 0x01 );
outportb( DLL, 0x80 ); /* 300 bauds */
/* 2- Format des donnees
* DLAB = 0, parite paire, 1 stop, 8 bits
*
LCR = 00011011 = 1BH
*/
outportb( LCR, 0x1B );
E. Viennet - GTR - v1.2d

86

Partie 7. Les entres/sorties

/* 3- Mode de transfert: scrutation */


outportb( IER, 0 );
}

E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

87

7.4.5 Normes RS-232 et V24


Ces normes spcifient les caractristiques mcaniques (les connecteurs), fonctionnelles (nature des signaux) et lectriques (niveaux des signaux) dune liaison srie asynchrone avec un longueur maximale de 15m et une rapidit de modulation maximum de
20kbauds.
LEIA (Electrical Industry Association) a t lorigine aux USA de la norme RS232, dont la dernire version est RS-232C. Le CCITT (Comit Consultatif International
pour la Tlphonie et la Tlgraphie) a repris cette norme quil a baptis V24.
Deux autres normes permettent des dbits plus levs et des distances plus importantes : RS-423 (666m, 300kbauds), et RS-422 (1333m, 10Mbauds).
La norme V24 utilise le connecteur DB25, de forme trapzodale 25 broches, reprsent figure 7.6.

1
2 SOUT
3 SIN
4 RTS
5 CTS
6 DSR

14
15
16
17
18
19

DTR 20
8 CD

21

9
10

RI 22
23

11
24
12
25
13

F IG . 7.6 Connecteur DB25, avec les bornes correspondantes du circuit UART


8250.
Les niveaux lectriques des bornes 2 et 3 (signaux dinformation) sont compris entre
+3V et +25V pour le niveau logique 0, et -3V et -25V pour le niveau logique 1 (niveau de
repos).

Cable NULL-MODEM
On peut connecter deux PC par leur interface srie. Si la distance est courte (<
quelques dizaines de mtres), il nest pas ncessaire dutiliser un modem. On utilise alors
un cable Null-Modem, qui croise certains signaux comme le montre la figure 7.7.
Lorsque les signaux de dialogues ne sont pas ncessaires, il suffit de croiser les signaux SIN et SOUT, ce qui donne le cable Null Modem simplifi (3 fils) reprsent sur la
figure 7.8.

E. Viennet - GTR - v1.2d

88

Partie 7. Les entres/sorties

masse
SOUT
SIN
RTS
CTS
DSR
CD
DTR

7
2
3
4
5
6
8
20

7
2
3
4
5
6
8
20

masse
SOUT
SIN
RTS
CTS
DSR
CD
DTR

7
2
3
4
5
6
8
20

masse
SOUT
SIN
RTS
CTS
DSR
CD
DTR

F IG . 7.7 Cable Null Modem complet.

masse
SOUT
SIN
RTS
CTS
DSR
CD
DTR

7
2
3
4
5
6
8
20

F IG . 7.8 Cable Null Modem complet.

E. Viennet - GTR - v1.2d

Partie 8
Les priphriques
Nous tudions dans cette partie les priphriques dentres/sorties les plus couramment utiliss : clavier, cran et gestion des modes graphiques, disques durs et autres
mmoires secondaires. Pour chaque type de priphrique, nous dcrivons le principe de
fonctionnement et mentionnons les performances des modles actuellement en vente.
Si les principes fondamentaux de fonctionnement restent les mmes, il faut noter que
les performances (vitesse, capacit) de la plupart des priphriques informatiques voluent trs rapidement ; les chiffres donns ici sont donc prendre comme des ordres de
grandeur typiques du matriel utilis la fin des annes 90.

8.1

Terminaux interactifs

Les micro-ordinateurs possdent tous, sauf exception, un clavier et un cran uniques.


Ce nest pas le cas des ordinateurs plus gros, qui sont habituellement relis plusieurs
terminaux (quelques dizaines ou centaines). Un terminal interactif est un priphrique
permettant un usager (humain) de communiquer avec un ordinateur. La communication
se fait par lintermdiaire dun cran (ou moniteur), dun clavier et ventuellement dune
souris.
Le terme interactif indique que lchange utilisateur/ordinateur lieu en temps rel,
de faon interactive (lordinateur rpond immdiatement aux commandes de lutilisateur).
Dans le pass, on utilisait aussi des terminaux non interactif, par exemple base de cartes
perfores, et lon devait attendre plusieurs minutes (ou heures) avant de prendre connaissance des rsultats dune commande par le bias dune imprimante.

8.1.1 Claviers
Le clavier est le priphrique le plus commode pour saisir du texte.
La figure 8.1 reprsente le principe de fonctionnement dun clavier. Chaque touche
est un interrupteur, normalement en position ouverte. Lorsque quune touche est appuye,
un signal lectrique est envoye vers le codeur, circuit lectronique trs simple qui associe
chaque signal un code (par exemple le code ASCII de la touche). Le code est associ
chaque touche par le bias de connexions ouvertes ou fermes dans la matrice du codeur.
E. Viennet - GTR - v1.2d

90

Partie 8. Les priphriques


0

CODEUR
0
1
0

CLAVIER

Niveau 1
1
0
0
1

CODE ASCII

KeyDown

F IG . 8.1 Principe de fonctionnement dun clavier. La pression dun touche fait


passer 1 le signal KeyDown, et le code ASCII correspondant est prsent sur le
bus de sortie du codeur. Seules trois touches sont reprsentes.
Le codeur est reli un bus dentres/sorties. Il gnre aussi un signal KeyDown
pour indiquer quune touche est appuye. Ce signal peut tre utilis pour envoyer une
interruption au processeur afin quil traite linformation.
Les codeurs rellement utiliss assurent des fonction supplmentaires, comme la rptition automatique des touches appuyes longtemps, la gestion dune mmoire tampon
de quelques dizaines de caractres, lallumage de voyants, le verrouillage des majuscules,
etc.

8.1.2

Ecrans et affichage

Lcran de lordinateur, aussi appel moniteur, est le priphrique de sortie le plus


rpandu. Suivant les cas, il est utilis pour afficher du texte ou des graphiques.
Un cran est constitu dun tube cathodique1 , dont le principe est le mme que celui
dun tube doscilloscope (voir figure 8.2).
Le faisceau dlectron agit comme un pinceau, control par le signal vido mis par
le contrleur daffichage de lordinateur. Chaque point de lcran ne reste allum quun
1

cest pourquoi les crans sont parfois nomms CRT, pour Cathodic Ray Tube, tube cathodique.
E. Viennet - GTR - v1.2d

8.1

Terminaux interactifs

91

Pixel allum

canon
lectrons

Dflexion
verticale

Dflexion
Horizontale

ECRAN

TUBE
F IG . 8.2 Tube cathodique : un faisceau dlectrons acclrs est dflchi verticalement puis horizontalement par des champs lectriques ; limpact de ces lectrons
sur lcran, constitu dune fine couche de phosphore sur du verre, allume un petit
point.
court instant ; le pinceau doit donc repeindre en permanence lcran, environ 50 fois
par seconde. Ce processus, appel balayage, dmarre du coin en haut gauche de lcran,
et descend ligne par ligne jusqu arriver en bas droite. Cest le contrleur daffichage
(carte graphique) de lordinateur qui gnre le signal de balayage 2 .
Le signal vido est donc dfini par deux frquences importantes : la frquence de
balayage horizontal, qui mesure combien de fois par seconde le faisceau revient en dbut
de ligne, et la frquence de balayage vertical, qui indique combien de fois par seconde le
faisceau revient en haut gauche de lcran.
Les crans ont des caractristiques variables :
taille : comme pour les tlvisions, on mesure la diagonale de lcran, dont la longueur est exprime en pouces3 . Les crans dentre de gamme mesurent 14 pouces ;
les ordinateurs dits multimdia et les stations de travail utilisent des cran 17, et
les graphistes des crans 21.
finesse (ou pitch) : indique le nombre de points par unit de longueur de lcran, qui
est donn par la finesse de la grille et la prcision des faisceaux dlectrons. Plus la
finesse est grande, plus limage est prcise, et plus on pourra afficher de pixels.
frquence maximale de balayage : plus lcran est rafraichi frquemment, plus
2

Remarque : il existe deux modes de balayage, dits entrelac et non-entrelac ; nous ne dcrivons que le mode non-entrelac.
3
un pouce (, inch) mesure 2,54 centimtres.
E. Viennet - GTR - v1.2d

92

Partie 8. Les priphriques


1ere ligne

F IG . 8.3 Balayage des points de lcran.


limage va apparaitre stable. Une frquence de rafraichissement de 50 Hz, utilis
sur les crans bas de gamme, donne une image avec des battements presque imperceptibles, mais qui fatiguent les yeux de lutilisateur et sont trs gnant si lon
visualise des images animes. Bien entendu, augmenter cette frquence suppose
dutiliser une lectronique plus couteuse ; les crans haut de gamme arrivent une
frquence de balayage verticale de 120 Hz.

8.1.3

Mode alphanumrique et mode graphique

Laffichage sur cran peut seffectuer en mode texte (alphanumrique), ou bien en


mode graphique.

Affichage en mode texte


Le mode texte est le plus simple, tant dun point vue programmation que dun point de
vue implmentation. Par contre, il donne des rsultats trs pauvres. Ce mode daffichage
tait le seul en usage jusqu une poque rcente.
En mode texte, on affiche 24 lignes de 80 caractres. Chaque caractre est cod sur
8 bits, ce qui permet dafficher les caractres ASCII (7 bits), plus un certain nombre de
caractres spciaux dont les codes ne sont pas normaliss (donc leffet va varier dun
type dordinateur lautre). Ces caractres spciaux permettent dafficher des pseudographiques (barres horizontales, obliques, symboles divers).
1
2
3
4
5
6
7
8
9
10

F IG . 8.4 Affichage des caractres en mode texte.


Le contrleur graphique doit maintenir une mmoire de 24x80 octets, qui permet de
gnrer le signal vido. Chaque caractre est affich sur un nombre fixe de lignes (une
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires

93

dizaine), comme indiqu sur la figure 8.4. La mmoire vido est lue en squence par le
contrleur pour gnrer le signal de chaque ligne.
La gestion dattribus comme la couleur, linversion vido, le clignotement peut se
faire en ajoutant des bits supplmentaires au codage des caractres en mmoire vido.

Affichage en mode graphique


Laffichage en mode graphique en apparu durant les annes 70 sur certaines stations
de travail haut de gamme, mais ne sest gnralis quavec lapparition des ordinateurs
Apple Macintosh en 1983, puis du systme Windows sur PC au dbut des annes 90. Le
PC garde la trace de cette volution, puisque le DOS fonctionne en mode texte, ainsi que
de nombreuses applications encore en usage en 1997 (par exemple Turbo C version 3).
Dans ce mode, les logiciels daffichage ne manipulent plus des caractres mais des
pixels. Chaque pixel correspondant un point sur lcran, et est caractris par sa couleur.
Laffichage est dfini par le nombre de lignes, le nombre de colonnes, et le nombre de
couleurs diffrentes. Le nombre de lignes et colonnes varie de 640x480 (mode VGA sur
PC) 1600x1200, voire davantage.
Le nombre de couleurs est li au nombre de bits par pixels. En noir et blanc (2 couleurs), 1 bit par pixel suffit. Pour afficher simultanment 65536 couleur, il faut 16 bits
par pixel. Les modes les plus sophistiqus utilisent 32 bits par pixel, lintensit trois couleurs fondamentales (Rouge, Vert, Bleu) tant code chacune sur 8 bits, les 8 bits restant
pouvant coder la transparence de la couleur.
Le passage du codage dun pixel sur n bits au signal de couleur vido peut tre effectu de diffrentes manires. En 24 ou 32 bits/pixel, on travaille en couleur directe :
chaque valeur code une couleur unique (spcifie par les composantes RVB). Par contre,
en 8 ou 16 bits, on utilise une table associant chaque valeur (entre 0 et 2n ) une couleur
RVB. Cette table (nomme Look Up Table (LUT) ou palette) peut tre change en cours
dutilisation ; chaque instant, on peut afficher 2n couleurs parmi 224 .

Mmoire vido La taille de la mmoire vido est ici beaucoup plus importante quen
mode texte : le mode 1600x1200 en 256 couleurs demande environ 1.8 Mo, contre moins
de 2 Ko pour un affichage texte. De ce fait, le volume dinformation chang entre la
mmoire principale et le contrleur graphique est trs important, et lon doit utiliser des
bus dentres/sortie trs performants pour atteindre une vitesse daffichage satisfaisante
(voir section 7.1.3).

8.2

Mmoires secondaires

Les mmoires secondaires (ou auciliaires) sont des priphriques permettant de stocker et de retrouver de linformation de manire durable : linformation est conserve
mme en labsence dalimentation lectrique, contrairement ce qui se passe pour la mmoire principale (RAM).
Les mmoires secondaires ont gnralement une capacit stockage plus importante
que les mmoires principales.
E. Viennet - GTR - v1.2d

94

Partie 8. Les priphriques

Parmi les mmoires secondaires les plus courantes, citons les disquettes et les disques
durs, bass sur un enregistrement magntique, les CD-ROM, utilisant une lecture optique,
et divers types de bandes magntiques.

8.2.1

Lenregistrement magntique

Le principe de lenregistrement magntique est utilis pour les cassettes audio et vido, ainsi pour les disquettes et disques durs informatiques. Il consiste polariser un
milieu magntique (couche doxyde de fer dpose sur la bande ou le disque) laide
dun champ lectromagntique cr par une bobine.
Polarisation 0
0

Polarisation 1
Support magntique

F IG . 8.5 Chaque cellule magntique se comporte comme un aimant, et peut


coder un bit.
Un matriau magntique (comme un aimant) possde la proprit intressante de
conserver durablement sa polarisation (orientation des particules magntiques). La polarisation ne peut prendre que deux directions ; chaque aimant peut donc tre utilis pour
stocker 1 bit dinformation.
Lenregistrement consiste exploiter linformation rmanente (durable) cre par une
tte de lecture/criture. Cette tte comporte une bobine qui cre un champ magntique
dont lorientation dpend du sens de circulation du courant lectrique qui la parcourt.
La surface du support (bande ou disque) est divise en petits emplacements qui vont se
comporter individuellement comme des aimants (figure 8.5`). Chaque emplacement code
un bit. Pour lire linformation, on fait dfiler le support sous la tte de lecture, qui mesure lorientation du champ magntique (qui cre un courant induit dans une bobine), de
laquelle on dduit linformation stocke sur chaque emplacement.

Densit denregistrement magntique


Le volume dinformation (nb de bits) que lon peut stocker sur une longueur donne de surface magntique dpend de la densit longitudinale denregistrement, que lon
mesure en BPI (bits per inchs, bits par pouces). Cette densit est limite par le nombre
maximum de renversements dorientation de la polarisation par unit de longueur, qui
dpend du type de couche magntique, et par la taille de la tte de lecture.
Les densits typiques sont de lordre de 10 000 BPI. la distance entre la tte de lecture/criture et le support est alors de lordre de 0,2 m, ce qui impose une trs grande
propret de la surface (voir figure 8.6).
Les disques durs, qui utilisent une densit denregistrement trs leve, sont scells
afin viter toute entre de poussire.
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires

95

CHEVEU
Tete de lecture
Fume

Empreinte
digitale

Poussire

Couche magntique

SUPPORT

F IG . 8.6 Les diverses particules de poussires sont trs gnantes pour lutilisation dun support magntique : sont ici reprsents la mme chelle la tte de
lecture, une particule de fume, une trace dempreinte digitale, une poussire et
un cheveu.

8.2.2 Les disques durs


Les premiers disques durs ont t dvelopps par IBM en 1957 et ont connu un grand
succs jusqu maintenant. Ils permettent en effet de stocker de grands volumes dinformation tout en conservant un temps daccs assez faible, et un rapport prix/capacit
avantageux. Les micro-ordinateurs sont tous quips de disques durs depuis la fin des
annes 80.
La capacit dun disque dur typique de cot 4000 francs est pass de de 20 Mo en
1988 3 Go en 1996, soit une multiplication par 150 en dix ans !

Principe dun disque dur


Une unit de disque dur est en fait constitue de plusieurs disques, ou plateaux, empils et en rotation rapide autour du mme axe (figure 8.7).
Chaque face dun plateau est lue ou crite par une tte de lecture. Afin de simplifier
le mcanisme, toutes les ttes se dplacent en mme temps, radialement (seule la distance
tte-axe de rotation varie).
Les disques sont structurs en pistes et en secteurs, comme indiqu sur la figure 8.8.
Le nombre de pistes est fix par la densit transversale (nombre de pistes par unit de
longueur radiale). Cette densit dpend essentiellement de la prcision du positionnement
de la tte sur le disque.
Chaque piste ou secteur contient le mme nombre doctets (en fait, toutes les pistes
nont pas la mme longueur, mais la densit est plus grande sur les pistes du centre, de
faon obtenir le mme volume dinformation sur chaque piste). Lunit de lecture ou
dcriture sur le disque est le secteur.
Le systme complet est constitu dune ensemble de disques empils, comme reprsent sur la figure 8.7. Le contrleur du disque doit tre capable dcrire ou de lire
E. Viennet - GTR - v1.2d

96

Partie 8. Les priphriques

F IG . 8.7 Les plateaux dun disque dur et les ttes de lectures ( droite), qui se
dplacent toutes en mme temps.
1 secteur

Le disque dur est divis en pistes


(ici 7 pistes)

Chaque piste est divise en secteurs


(ici 8 secteurs par piste)

F IG . 8.8 Division dun plateau de disque dur en pistes et en secteurs.


nimporte quel secteur. Pour reprer un secteur, il faut connaitre son plateau, le numro
de sa piste, et le numro du secteur dans la piste. La plupart des systmes introduisent la
notion de cylindre : un cylindre est form par lensemble des pistes de mme position sur
tous les plateaux.
Un secteur est alors repr par (figure 8.9) :
numro de cylindre (donnant la distance tte-axe de rotation) ;
numro de piste (en fait le numro de tte de lecture utiliser) ;
numro du secteur (li langle).

Temps daccs
Le temps daccs pour lire ou crire un secteur du disque dur dpend de la vitesse de
rotation du disque, de la vitesse de dplacement des ttes et de la dimension du disque.
Chaque transfert (lecture ou criture dun secteur) demande les oprations suivantes :
1. si les ttes ne sont pas dj sur le bon cylindre, dplacement des ttes. On dfinit le
temps de positionnement minimum (passage dun cylindre au cylindre voisin), et le
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires
4
N
cy um
lin ro
dr de
e

5
6

97

1 2

5
3
45

7
1

tete de lecture

tete de lecture

Numeros de secteur
VUE DE DESSUS

tete de lecture

tete de lecture
tete de lecture

0
Numro de piste
rotation

dplacement des tetes

VUE DE PROFIL

F IG . 8.9 Reprage dun secteur du disque dur.


temps de positionnement moyen (passage un cylindre quelconque, donc parcours
en moyenne de la moiti du rayon).
2. attendre que le dbut du secteur vis arrive sous la tte de lecture : en moyenne, il
faut que le disque tourne dun demi-tour. Ce temps est appel demi dlai rotationnel.
3. transfert des donnes, qui dure le temps ncessaire pour faire dfiler le secteur
entier sous la tte de lecture.
Le dbit dinformation maximal est dtermin par la vitesse de rotation du disque,
la densit denregistrement longitudinale, et parfois limite par le dbit du bus dentres/sorties reliant le disque lordinateur.
Les fabriquants de disques durs indiquent en gnral le temps daccs moyen et le
taux de transfert maximum (dbit).

Cas des disquettes


Les lecteurs de disquettes fonctionnent sur les mmes principes que les disques durs,
mais il ny a que deux faces, la vitesse de rotation est beaucoup plus faible et la densit
dcriture moindre.
Les disquettes actuelles ont une capacit de 1,4 Mo ; il est probable quelles soient
remplaces dans les annes venir par des disques durs extractibles miniaturiss, pouvant
stocker plusieurs centaines de Mo.

8.2.3

Lecteurs de CD-ROM

Les CD-ROM (Compact Disc Read Only Memory), se sont imposs ces dernires
annes comme des mmoires secondaires en lecture seule. Leur capacit est de 650 Mo
E. Viennet - GTR - v1.2d

98

Partie 8. Les priphriques

(soit lquivalent de 450 disquettes). Le format de stockage est identique celui utilis
pour les disques audio.
Leur (relativement) grande capacit en fait le support idal pour livrer les logiciels de
grande taille, mais aussi pour stocker des bases de donnes et programmes de toute nature
(dition lectronique,...).
La spcificit du CD-ROM est que lon ne peut pas y modifier les informations, inscrites en usine.
Un disque CD-ROM est constitu dune piste en spirale qui est lue par un faisceau
laser de faible puissance. La piste est recouverte dune fine couche de mtal rflchissant,
sur laquelle sont percs des trous. La lecture seffectue en mesurant le reflet du faisceau
laser sur la piste, ce qui permet la dtection des trous, donc la reconnaissance des bits 0
ou 1.
Le temps daccs et le dbit des lecteurs de CD-ROM sont essentiellement dtermins
par la vitesse de rotation du disque, qui est elle mme limite par la difficult guider
le laser sur la piste. ces informations sont souvent exprimes relativement un lecteur
de premire gnration ; on parle ainsi de lecteur double-vitesse, quadruple-vitesse,
voire x12 ou x24.

8.2.4

Autres supports optiques : WORM, magnto-optiques

Outre le CD-ROM, il existe plusieurs autres types de support optiques. Les disques
WORM (Write Once, Read Many, crire une fois, lire plusieurs) utilisent un second laser
plus puissant qui permet de former des trous sur la surface rflchissante ; on peut ainsi
crire de linformation une seule fois. Les disques WORM sont vendus vierges, sous
lappellation CD-R (CD enregistrable).
Les disques magnto-optiques sont bass sur une technologie diffrente. Les trous
sont remplacs par des diffrences de magntisation dun milieu spcial, ayant la proprit
de modifier la polarit de la lumire suivant le sens de magntisation. On associe donc un
champ magntique et un faisceau laser.
Ces disques sont r-inscriptibles volont ; ils ont t prsents la fin des annes
80 comme les successeurs des disques durs, mais leur faible vitesse daccs en limite
actuellement lusage aux applications darchivage ou de sauvegarde.

8.2.5 Bandes magntiques


Les bandes magntiques peuvent aussi tre utilises comme mmoire secondaires. La
principale diffrence avec les disques est que laccs une bande est ncessairement squentiel : si un fichier est enregistr la fin dune bande, il faut la rembobiner entirement
avant de dy accder. De ce fait, le temps daccs moyen un disque dur est de lordre de
10 ms, tandis que le temps daccs sur une bande est de quelques secondes (100 1000
fois plus lent).
Les bandes sont cependant trs utilises car elle permettent un stockage trs faible
cot de trs grandes quantit dinformation (exemple : une cassette de 8mm contient 7 Go
et vaut environ 100 F).
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires

99

Il existe un trs grand nombre de standards diffrents pour les lecteurs de bandes, de
cartouches ou de cassettes. La capacit dune bande est dtermine par sa longueur, son
nombre de pistes, et la densit dcriture (voir plus haut, 8.2.1).
Notons enfin que certains lecteurs de bandes effectue une compression automatique
des donnes avant criture, ce qui permet de gagner un facteur 2 environ sur des donnes
non pralablement compresses.

E. Viennet - GTR - v1.2d

100

E. Viennet - GTR - v1.2d

Partie 8. Les priphriques

Partie 9
La mmoire
Nous revenons dans cette partie sur les diffrents types de mmoires utiliss dans les
ordinateurs. Dans la partie prcdente, nous avons trait les mmoires secondaires ; nous
nous intressons maintenant au fonctionnement des mmoires vives (ou volatiles), qui ne
conservent leur contenu que lorsquelles sont sous tension.
Ce type de mmoire est souvent dsign par lacronyme RAM, Random Access Memory, signifiant que la mmoire adressable par opposition aux mmoires secondaires squentielles comme les bandes.
Nous mentionnerons aussi diffrents types de mmoires mortes, qui sont des circuits
accessibles uniquement en lecture (ROM, Read Only Memory).

9.1

Mmoire vive

La mmoire vive (RAM) est utilisable pour crire ou lire des informations. Elle constitue la plus grande partie de la mmoire principale dun ordinateur.

9.1.1 Technologie des mmoires vives


On peut raliser des mmoires RAM avec deux technologies diffrentes, les RAM
dynamiques (DRAM), et les RAM statiques (SRAM).

Mmoires vives dynamiques (DRAM)


Ce type de mmoire est trs utilis car peu couteux.
Les boitiers de mmoire dynamique enferment une pastille de silicium sur laquelle
sont intgres un trs grand nombre de cellules binaires. Chaque cellule binaire est ralise partir dun transistor reli un petit condensateur. Ltat charg ou dcharg du
condensateur permet de distinguer deux tats (bit 0 ou bit 1).
Linconvnient de cette technique simple est que le condensateur se dcharge seul au
cours du temps (courants de fuite). Il est donc ncessaire de rafraichir tous les condensateurs du boitier priodiquement, environ 1000 fois par seconde. Cette opration est effectue par un circuit de rafraichissement intgr dans le boitier : le circuit lit ltat de
E. Viennet - GTR - v1.2d

102

Partie 9. La mmoire

chaque cellule et le r-crit, ce qui recharge le condensateur. Notons que cette opration
empche laccs une cellule mmoire durant quelques cycles dhorloge.
Les mmoires DRAM sont utilises en informatique, mais leur usage se rpand aussi
pour des objets grand public, comme la tlvision numrique. Les boitiers sont fabriqus
en trs grandes sries dans des usines spcialises, qui demandent des investissement
normes (une nouvelle chaine de fabrication cote de lordre dun milliard de dollars).
Lorsque des usines de nouvelle gnration sont mises en service, les prix des mmoires
baissent dans le monde entier. La demande de mmoires augmentant sans cesse, les prix
remontent, avant la construction de nouvelles usines, etc. Les prix des mmoires subissent
ainsi des cycles conomiques.
On trouve des boitiers DRAM de 256k x 1 bit, 256k x 4bits, 1M x 1 bit, jusqu
16M x 4bits, et bientt davantage.

Mmoires vives statiques (SRAM)


Les mmoires statiques nutilisent pas de condensateurs : chaque cellule binaire est
ralise laide de 4 transistors formant un bistable, circuit restant dun ltat 0 ou 1 tant
quil est aliment lectriquement.
Les SRAM permettent des temps daccs plus court que les DRAM, mais sont plus
coteuses car leur construction demande 4 fois plus de transistors que les DRAM.
Les SRAM sont utilises lorsque lon dsire maximiser les performances, par exemple
pour construire des mmoires caches (voir plus loin, section 9.3).
Notons aussi lexistence des boitiers SRAM CMOS, caractris par leur trs faible
consommation en nergie : une petite pile lectrique suffit les maintenir en activit plusieurs annes. Ces mmoires, de petite capacit, sont utilises par exemple dans certains
agendas lectroniques pour le grand public.

9.1.2

Modules de mmoire SIMM

Les modules SIMM Single In-line Memory Module sont des groupes de boitiers de
mmoires dynamiques monts sur un circuit imprim rectangulaire allonge, appel barette. Chaque barette SIMM offre un capacit importante (1 16 Mo), et senfiche sur des
connecteurs prvus cette effet sur la carte mre de lordinateur.
Les barettes SIMM, utilises au dpart sur les stations de travail et les Macintosh,
quipent aujourdhui tous les PC.

9.2

Les Mmoires mortes

Les mmoires mortes ne sont normalement accessibles quen lecture. On distingue


diffrents types de circuits de mmoires mortes :
ROM : circuit intgr dont le contenu est dtermin une fois pour toute au moment de
la fabrication.
Le cot relativement lev de leur fabrication impose une fabrication en grandes
sries, ce qui complique la mise jour de leur contenu. Au dpart, ces mmoires
E. Viennet - GTR - v1.2d

9.3

Mmoires caches

103

adresse

ROM

donne

F IG . 9.1 Mmoire ROM.


taient utilises pour stocker les parties bas-niveau du systme dexploitation de
lordinateur (BIOS du PC par exemple).
PROM (Programmable ROM) : Alors que la mmoire ROM est enregistre de manire
irrversible lors de sa fabrication, la mmoire PROM est configure par lutilisateur
en utilisant un programmateur de PROM, utilis pour enregistrer son contenu. Le
circuit PROM ne peut plus tre modifi par la suite.
EPROM (Erasable PROM) : Les mmoires EPROM sont des PROM reconfigurables : il
est possible de les effacer pour les reprogrammer. Leffaage se produit en exposant
le boitier un fort rayonnement ultraviolet (UV). Pour cela, le boitier est perc
dune fentre transparente permettant lexposition du circuit intgr.
Lopration deffacement ncessite de retirer lEPROM de son support et entraine
sont immobilisation pendant environ 30 minutes.
EEPROM (Electricaly Erasable PROM) : Mme principe quune EPROM, mais leffacement se fait laide de signaux lectriques, ce qui est plus rapide et pratique.
FLASH EPROM Les mmoires FLASH sont similaires aux mmoires EEPROM, mais
leffacement peut se faire par slectivement par blocs et ne ncssite pas le dmontage du circuit.
Le temps dcriture dun bloc de mmoire FLASH est beaucoup plus grand que celui dcriture dune mmoire RAM, mais du mme ordre que celui dun disque dur.
Laccs en lecture une EEPROM est peu prs aussi rapide qua une DRAM. On
utilise donc parfois des cartes de mmoire FLASH comme mmoire secondaires,
par exemple pour les ordinateurs portables.

9.3

Mmoires caches

9.3.1

Hierarchie mmoire

Chacun des diffrents types de mmoires primaires et secondaires que nous avons
dcrit est caractris par un temps daccs et une capacit caractristiques. Plus lon
sloigne du processeur, plus la capacit et le temps daccs augmentent :
Taille
Temps daccs
Registres du processeur
10 octets
108 s
6
Mmoire principale
10 octets
107 s
9
Disque dur
10 octets
102 s
On constate que les processeur est nettement plus rapide que la mmoire principale.
Dans les premires parties de ce cours, nous avons suppos que presque chaque instruction
E. Viennet - GTR - v1.2d

104

Partie 9. La mmoire

du processeur effectuait un accs, en lecture ou en criture la mmoire principale. Si


ctait rellement le cas, le processeur passerait la majeure partie de son temps attendre
les accs mmoire, et lon nutiliserait pas pleinement ses possibilits.

9.3.2

Principe gnral des mmoires caches

Lintroduction de mmoires caches peut pallier ce problme. Lide est dintercaler


entre le processeur et la mmoire principale un circuit de mmoire statique, plus rapide
que la mmoire dynamique constituant la mmoire principale mais de petite taille. Dans
cette mmoire, on va essayer de garder les informations normalement en mmoire principale dont le processeur se sert le plus souvent un instant donn.

MPU

MP
MEMOIRE
CACHE

BUS LOCAL (adresses + donnes)

F IG . 9.2 Mmoire cache place sur le bus local.


Lors dun accs par le processeur un mot en mmoire, deux cas peuvent se rencontrer :
1. le mot est prsent dans le cache : le cache, plus rapide, envoie la donne demande
sur le bus de donnes ;
2. le mot nest pas prsent dans le cache : laccs mmoire se droule normalement
(le cache peut en profiter pour copier la donne afin den disposer pour la prochaine
fois).

9.3.3

Mmoires associatives

Dans les mmoires ordinaires, on peut accder un mot par son adresse, et les adresses
doivent tre contiges : un boitier donn va par exemple stocker tous les mots dont les
adresses sont comprises entre 100000H et 200000H.
Les mmoires caches doivent utiliser un principe diffrent, car les mots quelles vont
stocker ont des adresses quelconques, qui ne se suivent pas forcment. Ce type de mmoire, appel mmoire associative, est constitu dun ensemble de paires (cl, valeur). La
cl va ici tre ladresse du mot en mmoire.

Exemple : la mmoire associative suivante :


E. Viennet - GTR - v1.2d

9.3

Mmoires caches

105
cl
00AA0004
01068C0B
00ABF710

valeur
1
78
789

contient trois lments, dadresses respectives :


00AA0004, 01068C0B et 00ABF710.
Les circuits de mmoire associative sont capables deffectuer la recherche dune cl
en parallle, donc en un temps trs court (la cl demande est compare dun seul coup
toutes les cls stockes).
La taille des mmoires caches associative est habituellement de lordre de quelques
centaines de Ko.

9.3.4 Efficacit dun cache : principe de localit


Lutilisation dune mmoire cache nest efficace que sil arrive frquement quun mot
demand par le processeur se trouve dja dans le cache.
Nous avons vu, sans entrer dans les dtails, quune donne entrait dans le cache lorsquelle tait lue en mmoire principale. Le premier accs une donne est donc lent, mais
les accs suivants la mme adresse vont tre plus rapides.
On conoit aisment que plus le programme que lon excute fait des accs mmoires
varis, moins le cache sera efficace.
Rappelons que le processeur effectue deux types daccs mmoires : lecture des instructions, et lecture (ou criture) des donnes. Les accs aux instructions sont toujours
diffrents (on passe chaque fois ladresse de linstruction suivante), sauf lorsque le programme effectue des rptitions (boucles), ce qui se produit en fait trs frquemment (les
long calculs sont souvent effectu par rptition dune suite dinstructions assez courte).
Les accs aux variables se rptent eux aussi frquemment (les variables locales dune
fonction par exemple sont souvent accdes chacune un grand nombre de fois).
On appelle localit dun programme sa tendance effectuer des accs mmoires rpts ; cette tendance augmente le gain de vitesse apport par le cache.

9.3.5 Autres aspects


La gestion des caches est trs importante pour les performances des ordinateurs modernes. Nous navons fait queffleurer ce vaste sujet, en particulier nous navons pas expliqu comment mettre le cache jour.
Les processeurs rcents possdent des caches intgrs, et utilisent souvent deux caches
diffrents, lun pour les donnes, lautre pour les instructions. A lextrieur du processeur,
on trouve un autre cache, dit de niveau 2, ou externe.
Notons enfin que la mme problmatique se retrouve pour la gestion des accs aux
mmoires secondaires : la diffrence de vitesse entre les mmoires vives et les disques
durs rend lutilisation dun cache encore plus avantageuse (malheureusement, les accs
aux mmoires secondaires se rptent moins que ceux la mmoire principale).

E. Viennet - GTR - v1.2d

106

E. Viennet - GTR - v1.2d

Partie 9. La mmoire

Partie 10
Architectures actuelles
g
i
d

r
n
o
N
Dans cette dernire partie, nous passons brivement en revue les diffrents types darchitectures employs dans les ordinateurs actuels.

10.0.1

Microprocesseurs

Architectures RISC et CISC


Famille de processeurs Intel
Du 8086 au Pentium II...
Processeurs compatibles Intel : AMD, Cyrix, ...

Famille Motorola 68k


Du 68000 au 68040...
Diffrences principales avec la famille 80x86.

PowerPC et autres RISCs


PowerPC, Sparc, Alpha, MIPS, ...
Bref tour des constructeurs et des performances.

10.0.2

Micro-ordinateurs

Etat du marche de la micro (PC, Macintosh, NC).

10.0.3

Stations de travail

Dfinition, quelques exemples.


E. Viennet - GTR - v1.2d

108

10.0.4

Partie 10. Architectures actuelles

Superordinateurs

Dfinition, quelques exemples.

E. Viennet - GTR - v1.2d

Vous aimerez peut-être aussi