Académique Documents
Professionnel Documents
Culture Documents
Polyarch PDF
Polyarch PDF
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
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
26
26
27
28
28
30
30
32
32
34
34
35
36
37
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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 . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
10 Architectures actuelles
10.0.1 Microprocesseurs .
10.0.2 Micro-ordinateurs
10.0.3 Stations de travail .
10.0.4 Superordinateurs .
Index
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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
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
n
X
ai b i
i=0
1.2
11
=
=
=
=
=
=
a0
a1
a2
a3
a4
a5
=0
=0
=1
=1
=0
=1
12
1.2.3
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
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
1.2.4
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
1.2
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) );
}
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
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
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
1.3
17
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.
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
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
1.3.2
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
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
210
220
230
240
= 1024
= 1048 576
= 1 073 741 824
= 1 099 511 627 776
20
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.
1.3
21
BUS DE DONNEES
Reg. mot
ACC
RTUAL
RI
UAL
RTA
Reg. dtat
Unit de Commande
Dcodeur
IP
Horloge
Bus dadresses interne
Reg. Adr
Quartz
COMMANDES
BUS DADRESSES
22
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.
1.3
23
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.
24
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
26
}|
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) ;
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
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
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
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
2.2
Jeu dinstruction
29
Contenu MP
Langage Symbolique
0100
A1 01 10
0103
03 06 01 12
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.
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
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
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
B8
AX valeur
A1
MOV [ adr ], AX
A3
05
AX AX + valeur
03 06
AX AX + contenu de adr.
2D
AX AX - valeur
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
3D
compare AX et valeur.
3B 06
JMP adr
EB
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
B4 4C
INT 21
CD 21
32
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
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
34
2.3.3
STC
CF 1 (SeT Carry)
CLC
CF 0 (CLear Carry)
Sauts conditionnels
2.4
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
35
Il existe dautres instructions pour les relatifs, que nous ne dcrirons pas ici.
36
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
AX, FF00
; AX <AX, BX
; AX <AX, [1492] ; AX <-
AX ou FFOO
AX ou BX
AX ou [1492]
2.4
37
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
Partie 3
Lassembleur 80x86
3.1
Lassembleur
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
40
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
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
3.1.4
Dclaration de variables
3.1
Lassembleur
data
41
SEGMENT
ENDS
SEGMENT
debut:
; suite dinstructions
code
ENDS
END debut
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
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
0AH
OFH
FEH
41H
4CH
4FH
52H
53H
machin
machin + 1
chose
chose + 1
chose + 2
chose + 3
chose + 4
chose + 5
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
3.2
Segmentation de la mmoire
3.2
43
Segmentation de la mmoire
}|
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
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
3.2.2
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
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
SEGMENT
DW 10
DW 1789
DW ?
ENDS
code
SEGMENT
; A = 10
; B = 1789
; resultat
code
MOV
MOV
; 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.
46
data
truc
data
SEGMENT
DW
1996
ENDS
...
MOV
...
BX, truc
on aurait charg dans BX la valeur stocke en truc (ici 1996), et non son adresse4 .
3.3.1
SEGMENT
DB Un boeuf Bourguignon, $
ENDS
code
SEGMENT
ASSUME DS:data, CS:code
debut:
MOV
MOV
AX, data
DS, AX
MOV
MOV
AND
MOV
INC
CMP
JNE
AL, [BX]
AL, 11011111b
[BX], AL
BX
AL, $
repet
repet:
code
;
;
;
;
;
;
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.4
; concerne 1 octet
; concerne 1 mot de 2 octets
La pile
; 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
3.4.3
Registres SS et SP
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
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
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
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
50
3.5
Procdures
3.5
51
Procdures
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.
Il existe aussi des appels de procdure dans des segments diffrents, que nous ntudierons
pas dans ce cours.
E. Viennet - GTR - v1.2d
52
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
3.5.3
; 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
SOMME
PROC near
ADD AX, BX
RET
ENDP
; AX <- AX + BX
AX, 6
BX, Truc
SOMME
Truc, AX
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]
AX, [BP+2]
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
SP
SP+2
SP+4
IP
Truc
6
(adresse de retour)
(premier paramtre)
(deuxime paramtre)
SOMME2
PROC
MOV
MOV
ADD
RET
ENDP
near
BP, SP
AX, [BP+2]
AX, [BP+4]
;
;
;
;
SOMME2
PROC
PUSH
MOV
MOV
ADD
POP
RET
ENDP
near
BP
BP, SP
AX, [BP+4]
AX, [BP+6]
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.
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
56
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
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
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
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
Nous avons lgrement simplifi le rsultat obtenu par tcc -S pour le rendre plus lisible.
58
_TEXT
;
;
;
_main
;
;
;
cs:_TEXT
near
bp
bp,sp
sp, 4
char X = 11;
MOV
;
;
;
MOV
;
;
;
;
CMP
JGE
;
;
;
Res = -1;
MOV
JMP
@1@86:
;
;
;
;
MOV
@1@114:
;
;
}
;
MOV
POP
RET
_main ENDP
_TEXT ENDS
END
else
Res = 1;
word ptr [bp-4], 1
sp,bp
bp
4.2
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);
}
60
_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
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 .
62
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.
64
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
5.2.1
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
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
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
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
5.3
Fonction
Division par 0
Copie dcran
Ecran
Taille mmoire
Gestion disque dur
Interface srie
Clavier
Prsentation du DOS
5.3.1
5.4
Numro
01H
02H
09H
0BH
Fonction
Lecture caractre
Affiche caractre
Affiche chane de caractres
Lit tat clavier
67
AH,
21H
AL,
DL,
AH,
21H
01H
;
;
11011111b ;
AL
;
02H
;
;
Dans la suite du cours, nous aurons loccasion de dcrire dautres fonctions du BIOS
et du DOS.
5.4
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.
68
5.4.2
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 ... */
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
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
6.2
6.2.1
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
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).
6.2
71
MPU
BUS DE DONNEES
INTA
INTA
INTR
INT
PIC
IRQ 0
IRQ i
Priphriques
IRQ 7
NMI
6.2.4
72
6.3
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
6.4
73
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
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
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
MPU
MP
BUS LOCAL
Controleur bus
dextension (ISA)
CARTE
GRAPHIQUE
CARTE
SON
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
MPU
MP
BUS LOCAL
CONTROLEUR
BUS PCI
PONT PCI/ISA
CARTE
MODEM
CARTE
VIDEO
CARTE
SON
CARTE
SCSI
78
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
7.3
7.3.1
7.4
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.1
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
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
7.4.2
et aussi
1
bits/s
7.4
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
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
INTRPT
82
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
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.
7.4
83
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 .
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
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
85
Registre MSR
MSR est le registre dtat du fonctionnement du modem.
86
7.4
87
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
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.
88
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
masse
SOUT
SIN
RTS
CTS
DSR
CD
DTR
7
2
3
4
5
6
8
20
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
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
CODEUR
0
1
0
CLAVIER
Niveau 1
1
0
0
1
CODE ASCII
KeyDown
8.1.2
Ecrans et affichage
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
8.1.3
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.
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
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
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.
96
F IG . 8.7 Les plateaux dun disque dur et les ttes de lectures ( droite), qui se
dplacent toutes en mme temps.
1 secteur
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
VUE DE PROFIL
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
(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
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
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.
100
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.
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.
9.1.2
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
9.3
Mmoires caches
103
adresse
ROM
donne
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
9.3.2
MPU
MP
MEMOIRE
CACHE
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.
9.3
Mmoires caches
105
cl
00AA0004
01068C0B
00ABF710
valeur
1
78
789
106
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
10.0.2
Micro-ordinateurs
10.0.3
Stations de travail
108
10.0.4
Superordinateurs