Cours magistraux

Transcription

Cours magistraux
Introduction
Introduction
Chapitres
Introduction aux Architectures Logicielles et
Matérielles
Fabienne Carrier
1
Codage des informations
2
Modèle de Von Neumann
3
Langage d’assemblage (ARM) et language machine
4
Instruction de rupture de séquence et programmation des
structures de contrôle
5
Programmation à partir des automates reconnaisseurs
6
Programmation des appels de procédure et fonction (3 séances)
7
Introduction à la structure interne des processeurs
8
Vie des programmes
9
Organisation d’un ordinateur
10
Introduction aux circuits
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Introduction aux Architectures Logicielles et Matérielles
9 janvier 2015
1
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Carrier, Devismes (Grenoble I)
Introduction aux Architectures Logicielles et Matérielles
9 janvier 2015
2
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Plan
Codage des informations et représentation des
entiers par des vecteurs binaires
Fabienne Carrier
Stéphane Devismes
1
Codage
2
Représentation des naturels par vecteurs binaires
3
Exercices de synthèses
4
Représentation des relatifs par vecteurs binaires
5
Opérations
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
1
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
2
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Définition
Exemples (1/3) : Codage des 16 couleurs du Commodore 64
Un codage est une bijection entre un ensemble d’informations et un ensemble de
naturels.
B
0
1
2
3
4
0
a
f
1
b
5
e
b3 b2 b1 b0
0000
0001
0010
0011
0100
noir
blanc
rouge
cyan
violet
B
5
6
7
8
9
b3 b2 b1 b0
0101
0110
0111
1000
1001
B
10
11
12
13
14
15
vert
bleu
jaune
orange
brun
2
d
b3 b2 b1 b0
1010
1011
1100
1101
1110
1111
rose
gris foncé
gris moyen
vert pâle
bleu pâle
gris pâle
3
c
Code C64 (violet) = 4 ; Decode C64 (12) = gris moyen.
4
Remarque
Codage
Décodage
Pas de propriétés particulières : ordre, relation avec les couleurs, notion de
clair/foncé, . . .
F IGURE: Exemple de bijection
Pour N informations, on choisit en général l’intervalle [0, N − 1]. Fonctions de codage
dans un sens, de décodage dans l’autre.
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
4
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
5
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Exemples (2/3) : Codage des 16 couleurs sur les premiers
PC couleurs
Exemples (3/3) : Code ASCII (Ensemble des caractères
affichables)
B
0
1
2
3
4
b3 b2 b1 b0
0000
0001
0010
0011
0100
noir
bleu
vert
cyan
rouge
B
5
6
7
8
9
b3 b2 b1 b0
0101
0110
0111
1000
1001
violet
brun
gris
noir pâle
bleu pâle
B
10
11
12
13
14
15
b3 b2 b1 b0
1010
1011
1100
1101
1110
1111
vert pâle
cobalt
rose
mauve
jaune
blanc
ASCII = American Standard Code for Information Interchange On obtient le tableau ci-dessous par la commande Unix man ascii
32
40
48
56
64
72
80
88
96
104
112
120
Propriétés
Chaque bit a un sens : En regardant le code en base 2, on voit un bit de rouge
(b2), un bit de vert (b1), un bit de bleu (b0) et un bit de clair (b3). Le codage du violet
est fait de bleu et de rouge . . .
Remarque
(
0
8
@
H
P
X
‘
h
p
x
33
41
49
57
65
73
81
89
97
105
113
121
!
)
1
9
A
I
Q
Y
a
i
q
y
34
42
50
58
66
74
82
90
98
106
114
122
”
*
2
:
B
J
R
Z
b
j
r
z
35
43
51
59
67
75
83
91
99
107
115
123
#
+
3
;
C
K
S
[
c
k
s
{
36
44
52
60
68
76
84
92
100
108
116
124
$
,
4
<
D
L
T
\
d
l
t
|
37
45
53
61
69
77
85
93
101
109
117
125
%
5
=
E
M
U
]
e
m
u
}
38
46
54
62
70
78
86
94
102
110
118
126
&
.
6
>
F
N
V
ˆ
f
n
v
˜
39
47
55
63
71
79
87
95
103
111
119
127
’
/
7
?
G
O
W
g
o
w
del
Code ascii (q) = 113 ; Decode ascii (51) = 3.
Aujourd’hui, codage en niveaux d’intensité de rouge, vert et bleu (RVB) sur 8 bits.
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
6
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
7
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Ensemble muni de relations et d’opérations
Application en langage C
printf("%c",’b’+’A’-’a’);
Codage qui respecte les relations et opérations.
char c;
scanf("%c",&c);
if(c>=’a’ && c<=’z’)
printf("%c est une lettre minuscule",c);
Par exemple, dans le code ASCII :
respect de l’ordre alphabétique
passage de majuscules à minuscule (code majuscule + 32 =
code minuscule)
respect de l’ordre des chiffres décimaux
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
8
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
9
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage d’ensemble structuré : ex villes olympiques (1/2)
Code des villes olympiques (2/2)
Le code d’une ville est alors un quadruplet.
E= {Albertville, Athènes, Atlanta, Chamonix, Grenoble, Los Angeles,
Melbourne, Mexico, Montréal, Paris, Pékin, Rome, Sydney, Tokyo}
continent
Amérique
Codage en utilisant une hiérarchie :
pays
Canada
Etats-Unis
niveau 1 : continents → Amérique, Asie, Europe, Océanie.
Asie
niveau 2 : pays → en Amérique, Canada, E.U., Mexique.
Europe
Mexique
Chine
Japon
France
Océanie
Grece
Italie
Australie
région
Californie
Géorgie
Ile de France
Rhône-Alpes
niveau 3 : régions → en France, Ile de France, Rhône-Alpes.
niveau 4 : villes → en Rhône-Alpes, Alberville, Chamonix, . . .
Les villes sont alors les feuilles d’un arbre.
New South Wales
Victoria
ville
Montréal
Los Angeles
Atlanta
Mexico
Pékin
Tokyo
Paris
Albertville
Chamonix
Grenoble
Athenes
Rome
Sydney
Melbourne
code quadruplet
(0, 0, 0, 0)
(0, 1, 0, 0)
(0, 1, 1, 0)
(0, 2, 0, 0)
(1, 0, 0, 0)
(1, 1, 0, 0)
(2, 0, 0, 0)
(2, 0, 1, 0)
(2, 0, 1, 1)
(2, 0, 1, 2)
(2, 1, 0, 0)
(2, 2, 0, 0)
(3, 0, 0, 0)
(3, 0, 1, 0)
Codage de chaque continent, pays, région, ville par un entier. Pour les objets
Si ce code vous parait inventé , essayez donc de comprendre le code des unités
de même niveau, on utilise l’ordre alphabétique.
d’enseignement, il y a quelques ressemblances . . .
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
10
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
11
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Produit cartésien : correspondance entre n uplet et naturel
(1/2)
Codage d’ensemble structuré : autres exemples
Codage d’instructions, de commandes, d’ordres,. . .
E = {0, 1, 2, 3} × {0, 1, 2, 3, 4}
Il y a 4*5=20 informations
Le code est un entier dans {0, 1, 2, .., 19}
On peut imaginer de coder par des N uplets :
des ordres, des commandes à un robot,
des instructions d’ordinateur,
...
numéro du bras
3
2
Compléter le tableau ci-après :
direction
Nord
Sud
numéro de case mémoire
12345
47
Carrier, Devismes (Grenoble I)
angle
135
45
vitesse de déplacement
haute
très faible
action
remise à zéro
incrémentation
...
...
...
0
9 janvier 2015
2
3
4
0
1
2
3
...
...
...
Codage et représentation des entiers par des vecteurs binaires
1
12
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
13
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Correspondance entre n uplet et naturel (2/2)
Conclusion sur le codage : Où est le code ?
Le code n’est pas dans l’information codée.
Par exemple : 14 est le code du jaune dans le code des couleurs
du PC ou le code du couple (2,4) ou le code du bleu pâle dans le
code du commodore 64.
Pour interpréter, comprendre une information codée il faut
connaı̂tre la règle de codage. Le code seul de l’information ne
donne rien, c’est le système de traitement de l’information
(logiciel ou matériel) qui connait la règle de codage, sans elle
il ne peut pas traiter l’information.
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
14
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
15
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Exercice : Enumérer les nombres représentables sur 3
chiffres binaires.
Numération de position
En numération de position, avec N chiffres en base b on peut
représenter les bN naturels de l’intervalle [0, bN -1]
Exemple : en base 10 avec 3 chiffres on peut représenter les 103
naturels de l’intervalle [0, 999].
Avec N chiffres binaires (base 2) on peut écrire les 2N naturels de
l’intervalle [0, 2N − 1]
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
17
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
18
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Logarithme et taille de donnée (1 sur 2)
Logarithme et taille de donnée (2 sur 2)
On ne s’intéresse qu’à la base 2 : un chiffre binaire est appelé bit.
Par exemple, on veut représenter les naturels de l’intervalle [0,. . .,9]
10 entiers, la puissance de 2 la plus proche est 16 = 24 , il faut 4 bits.
Logarithme : opération réciproque de l’élévation à la puissance
Si Y = 2X , on a X = log2 Y
De même pour les naturels de l’intervalle [0,. . .,15]
Pour représenter en base 2, K naturels différents,
il faut dlog2 K e chiffres en base 2
Pour représenter les naturels de l’intervalle [0,. . .,255], il faut 8 bits
(28 = 256)
Si K est une puissance de 2, K = 2N , il faut N bits.
Si K n’est pas une puissance de 2, soit P > K , P la plus proche
puissance de 2, il faut log2 P bits.
Pour coder les naturels de [0,. . .,127], il faut 7 bits (27 = 128).
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
19
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
20
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Quelques valeurs à connaı̂tre
Conversion base 10 vers base 2 : Première méthode
X
0
1
2
3
4
8
10
16
20
30
32
La méthode des restes successifs donnent les chiffres en
commençant par celui des unités.
2X
1
2
4
8
16
256
1 024 (≈ 1 000)
65 536
1 048 576 (≈ 1 000 000, 1 Méga)
1 073 741 824 (≈ 1 000 000 000, 1 Giga)
4 294 967 296
169 = 84 × 2 + 1 (chiffre des unités = 1)
169 = (42 × 2 + 0 )× 2 + 1 (chiffre suivant = 0)
169 = ((21 × 2 + 0 ) × 2 + 0 )× 2 + 1
169 = (((10 × 2 + 1 ) × 2 + 0 ) × 2 + 0 )× 2 + 1
169 = ((((5 × 2 + 0 ) × 2 + 1 ) × 2 + 0 ) × 2 + 0 )× 2 + 1
169 = (((((2 × 2 + 1 ) × 2 + 0 ) × 2 + 1 ) × 2 + 0) × 2 + 0 )× 2 + 1
169 = (((((( 1 × 2 + 0 ) × 2 + 1 ) × 2 + 0 ) × 2 + 1 ) × 2 + 0 ) × 2 +
0 )× 2 + 1
On a ainsi 16910 = 101010012
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
21
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
22
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Conversion base 10 vers base 2 : Deuxième méthode
Conversion base 10 vers base 2 : Troisième méthode
169 2
1 84
2
Utilisation des puissances de 2 :
0 42 2
0 21 2
27
128
1 10 2
0
5
2
1
2
2
0
1
2
1
0
(169)10=(10101001)2
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
23
Carrier, Devismes (Grenoble I)
26
64
25
32
24
16
23
8
22
4
21
2
20
1
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
24
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Exercices
Utilisation de la base 16 : hexadécimal
Les 16 chiffres sont 0, 1, .., 8, 9, A, B, C, D, E, F.
Ils représentent respectivement les naturels qui s’écrivent 0, 1, .. 8, 9,
10, .., 15 en décimal.
Sur 4 bits . . .
23 =
810 =
1010 =
1310 =
22 =
110 =
1210 =
1110 =
21 =
410 =
610 =
510 =
20 =
23 = 22 =
18810 =
21 =
Ecrire les nombres de 0 à 15 en base 10, 2 et 16 :
base 10
0
1
2
3
4
5
6
7
Sur 8 bits . . .
27 = 26 =
1110 =
Carrier, Devismes (Grenoble I)
25 = 24 =
6710 =
Codage et représentation des entiers par des vecteurs binaires
20 =
9 janvier 2015
25
Carrier, Devismes (Grenoble I)
base 2
base 16
base 10
8
9
10
11
12
13
14
15
base 2
base 16
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
26
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Passage d’une base à l’autre
Exercice : codage par champs
On veut coder une information du style : lundi 12 janvier
169 = 10 × 16 + 9
169 s’écrit A9 en hexadécimal
Triplet
Codage du jour : {lundi, mardi, mercredi, jeudi, vendredi, samedi,
dimanche} : entier entre 1 et 7
Codage du quantième du jour dans le mois : entier entre 1 et 31
Codage du mois : entier entre 1 et 12
On obtient cette écriture en remplaçant dans l’écriture en base 2,
1010 1001 : 1010 par A et 1001 par 9
base
2
16
Carrier, Devismes (Grenoble I)
x
010010011101
y
100011110000
z
t
0...0...8..
5...5...A..
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
lundi 12 janvier codé par :
date associée au code 011 00101 0011 :
date associée au code 111 11111 1111 :
27
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
29
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Exercice : codage d’une instruction ARM (1 sur 2)
Exercice : codage d’une instruction ARM (2 sur 2)
Les instructions sont codées sur 32 bits
31 28
cond
27 26
00
25
I
24 21
1101
20
S
19 16
0000
15 12
rd
11 8
0000
31 28
cond
7
0
immediat
27 26
00
20
S
19 16
0000
15 12
rd
11
4
00000000
30
rm
Exercice : quel est le codage de l’instruction MOV r5, r7
Exercice : quel est le codage de l’instruction MOV r5, ]12
Codage et représentation des entiers par des vecteurs binaires
24 21
1101
F IGURE: Codage de l’instruction mov version 2
F IGURE: Codage de l’instruction mov version 1
Carrier, Devismes (Grenoble I)
25
I
9 janvier 2015
30
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
31
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Une première idée : bit signe = bit de poid fort
Solution : Complément à deux
Sur n bits, en choisissant 00...000 pour le codage de zéro, il reste 2n − 1 possibilités
de codage : la moitié pour les positifs, la moitié pour les négatifs.
Par exemple sur 4 bits :
Attention, ce n’est pas un nombre pair, l’intervalle des entiers relatifs codés ne sera
pas symétrique.
(+3)2 = 0011, (−3)2 = 1011, (−2)2 = 1010
Principe :
Les entiers positifs sont codés par leur code en base 2
Problèmes :
Les entiers négatifs sont codés de façon à ce que code(a) + code(-a) = 0
deux représentations pour zéro : 0000 ou 1000
D’où sur 8 bits, intervalle représenté [−128, +127] = [−27 , 27 − 1]
(−3) < (−2), mais 1011 > 1010
x ≥ 0 x ∈ [0, +127] : CodeC2(x)=x
(3) + (−3) = 0 mais 0011 + 1011 = 1110 6= 0
x < 0 x ∈ [−128, −1] : CodeC2(x)=x+256 = x+28
(x étant négatif, x+28 est codable sur 8 bits)
(x+28 > 127, donc pas d’ambiguı̈té)
algorithme d’addition complexe
CodeC2(a)+CodeC2(-a) = a-a+28 = 0 (sur 8 bits)
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
33
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
34
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Complément à deux : exemples
Complément à deux sur 8 bits : tous les entiers relatifs
CodeC2(3)=3, CodeC2(127)=127, CodeC2(0)=0,
CodeC2(-128)=-128+256=128, CodeC2(-1)=-1+256=255
entier relatif
-128
-127
-126
...
-1
0
1
2
...
12
...
127
En binaire sur 8 bits
base 10
3
127
0
-128
-1
Carrier, Devismes (Grenoble I)
base 2
0000 0011
0111 1111
0000 0000
1000 0000
1111 1111
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
35
Carrier, Devismes (Grenoble I)
Code(base10)
128
129
130
CodeC2(base2)
1000 0000
1000 0001
1000 0010
255
0
1
2
1111 1111
0000 0000
0000 0001
0000 0010
12
0000 1100
127
0111 1111
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
36
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Correspondances entre les relatifs de l’intervalle [-8,+7] et le complément à 2 sur 4 bits
Complément à deux : trouver le code d’un entier négatif
Soit un entier relatif positif a codé par les n chiffres binaires :
an−1 an−2 ...a1 a0
valeur(-a)
Établir un tableau où les codes seront représentés en base 10 et en base 2.
=
=
=
=
=
=
2n − valeur(a)
2n − (an−1 2n−1 + an−2 2n−2 + ... + a1 2 + a0 )
(2n−1 + 2n−1 ) − (an−1 2n−1 + an−2 2n−2 + ... + a1 2 + a0 )
(1 − an−1 )2n−1 + 2n−1 − (an−2 2n−2 + ... + a1 2 + a0 )
......................
(1 − an−1 )2n−1 + (1 − an−2 )2n−2 + ... + (1 − a0 ) + 1
Règle : écrire le code de la valeur absolue, inverser tous les bits,
ajouter 1
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
37
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
38
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Complément à deux binaire
Retour sur la conclusion précédente : Où est le code ?
On inverse les bits de l’écriture binaire de sa valeur absolue, on
fait ce qu’on appelle le complément à un,
Soit le vecteur binaire 1001. Que représente-t-il ?
On ajoute 1 au résultat (les dépassements sont ignorés).
Sans la règle de codage, on ne sait pas répondre
Il peut être :
Exemple : 5 codé sur 8 bits
(5)2 = 00000101
Complément à un : 11111010
Complément à deux : 11111011, c’est le code de (−5)
le code d’une couleur : bleu pale
le code du naturel 910 sur 4 bits
le code du relatif (−7)10 sur 4 bits.
Opération inverse :
Complément à un de 11111011 : 00000100
Complément à deux : 00000101
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
39
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
40
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Addition (1/3)
Addition (2/3)
Rappel : en base 10
+
=
Retenue
A
B
A+B
1
1
1
7
2
0
1
2
9
2
L’algorithme que le processeur exécute est le même que celui pratiqué
à la main si ce n’est que la taille des données est bornée.
9
9
8
A, B deux naturels sur N bits, la somme A+B peut réclamer un bit
supplémentaire
Le processeur gère un indicateur C (pour Carry) : on parle de retenue
sortante
On a des retenues, des propagations de retenues
En base 2
+
=
Carrier, Devismes (Grenoble I)
Retenue
A
B
A+B
0
1
0
1
1
0
0
1
1
1
1
1
Exemple sur 4 bits :
910 + 810 = 10012 + 10002
La somme en base 2 s’écrit 10001 qui code bien l’entier 1710
Pour le processeur les 4 bits de résultat sont 0001 et C=1
1
1
0
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
42
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
43
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Addition (3/3)
Exercice
Donnez le résultat apparent des additions d’entiers relatifs
suivantes, puis convertissez le résultat en base 10 :
Somme de deux relatifs : même algorithme
Interprétation différente du résultat
n entier relatif représenté sur 4 bits : n ∈ [−8, +7]
0
0
1
0
1
0
0
1
0
0
1
1
1
0
0
0
0
0
1
0
1
1
0
1
0
0
1
0
1
1
0
0
510 + 210 = 01012 + 00102 = 01112 = 710
510 + 310 = 01012 + 00112 = 10002 = −810
car 1000 en complément à 2 représente −8 ! ! !
Dans ce cas, le processeur utilise l’indicateur V pour donner cette
information.
V = 1 indique un débordement, auquel cas les deux dernières
retenues sont de valeurs différentes.
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
44
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
45
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Autres opérations
Exercice
Donnez le résultat apparent des soustractions d’entiers relatifs
suivantes, puis convertissez le résultat en base 10 :
soustraction A-B = A + complémentaire à deux de B
La différence n’est pas toujours possible . . .
0
0
0
0
0
1
1
1
1
0
0
0
1
1
1
0
0
0
1
0
0
1
0
1
1
0
1
0
1
1
1
0
multiplication par une puissance de 2 : décalage à gauche
division par une puissance de 2 : décalage à droite
modulo par une puissance de 2 (mod), reste d’une division par 2k
Rappel : en base 10, 3159 mod 10 = 9, 3159 div 10 = 315
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
46
Carrier, Devismes (Grenoble I)
Codage et représentation des entiers par des vecteurs binaires
9 janvier 2015
47
Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Retour sur les entiers naturels
A − B = A + CodeC2(B)
Que signifie C dans ce contexte ?
Modèle de Von Neumann : qu’est ce qu’un
ordinateur ?
A − B sans le complément à deux : notion d’emprunt
14 − 3 (sur 8 bits)
E=0
−
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
1
1
1
1
1
1
1
1
0
1
1
0
0
1
0
1
Fabienne Carrier
0
1
1
Université Joseph Fourier, Grenoble I
14 + CodeC2(3) (sur 8 bits)
C=1
+
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
Stéphane Devismes
9 janvier 2015
0
1
1
C =E. Donc, C =1 ssi le résultat de la soustraction est correct, c-à-d, A≥B.
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Codage et représentation des entiers par des vecteurs binaires
La mémoire (centrale)
Les entrées /sorties
Le processeur
9 janvier 2015
48
Les ordinateurs actuels
Plan
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
Historique
Les premiers ordinateurs ont été construit pour des besoins militaires
(calcul balistique, décryptage, . . .)
1
Introduction
2
Notion de modèle
1936, Turing invente la machine de Turing, les concepts de programmation et
de programme
3
La mémoire (centrale)
Peu avant la seconde guerre mondiale, les premières calculatrices
électromécaniques, construites selon les idées de Turing
4
Les entrées /sorties
Lors de la 2e guerre mondiale, le Colossus : le premier ordinateur
fonctionnant en langage binaire
Le processeur
1945, L’ENIAC est le premier ordinateur entièrement électronique ayant la
puissance des machines de Turing
5
1
Les ordinateurs actuels
1948, les premières machines à architecture de Von Neumann
6
Les ordinateurs actuels
1952, IBM produit son premier ordinateur, l’IBM 701, pour la défense
américaine
Années 70, premiers micro-ordinateurs
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
2
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
4
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Générations
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Qu’est ce qu’un ordinateur ?
Vision concrète, matérielle
des circuits : unité de calcul (UAL), mémoire
des fils (nappes de fils)
Première génération : (à partir de 1946) l’ENIAC
des histoires de potentiel
Deuxième génération : (1956-1963) remplacement des tubes
électroniques par des transistors
du temps de calcul
Troisième génération : (1963-1971) circuit intégré
Vision abstraite
Quatrième génération : (1971 à nos jours) microprocesseur
des modèles
des instructions de calcul
des fonctions de mémorisation
des informations (bits, mots binaires. . .)
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
5
Les ordinateurs actuels
Un modèle de calcul : la machine de Turing (1 /5)
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
6
Les ordinateurs actuels
Exemple de modèle de calcul : la machine de Turing (2 /5)
Chaque case contient un symbole parmi un alphabet fini. L’alphabet
contient un symbole spécial blanc .
Utilisation : incrémentation d’un entier naturel écrit en binaire
Etat initial du ruban :
Plusieurs cases consécutives remplies avec des 1 et des 0 avec
plusieurs cases blanches à gauche (au moins deux) et plusieurs
cases blanches à droite (au moins une).
Un ruban divisé en cases. Le ruban est supposé de longueur infinie vers la gauche ou
vers la droite.
La tête de lecture est initialement sur le bit de poids fort (le plus à
gauche).
Une tête de lecture/écriture peut lire, écrire, et se déplacer vers la gauche ou vers la
droite du ruban.
Un registre d’état qui mémorise l’état courant. Le nombre d’états possibles est toujours
fini. Il existe un état spécial appelé état de départ.
Actions : placer la tête de lecture sur le bit de poids faible, incrémenter
en propageant la retenue éventuelle, puis replacer la tête de lecture
sur le bit de poids fort.
Une table d’actions indique quel symbole écrire, comment déplacer la tête de lecture, et
quel est le nouvel état, en fonction du symbole lu sur le ruban et de l’état courant. Si
aucune action n’est applicable, la machine s’arrête.
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
8
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
9
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Exemple de modèle de calcul : la machine de Turing (3 /5)
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Exemple de modèle de calcul : la machine de Turing (4 /5)
Donnez la trace d’exécution à partir de l’entrée 11100111
Etat initial : I
Etat
I
I
I
A
A
A
Ok
Ok
Ok
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Lu
1
0
Ecrit
1
0
0
1
1
0
1
0
1
0
1
Direction
D
D
G
G
G
G
G
G
D
Etat
I
I
A
Ok
A
Ok
Ok
Ok
Fini
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
10
Les ordinateurs actuels
Exemple de modèle de calcul : la machine de Turing (5 /5)
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
11
Les ordinateurs actuels
Modèle de Von Neumann
Modèle à la base des ordinateurs actuels
Une structure de stockage unique pour conserver à la fois les
instructions et les données requises ou générées par le calcul.
De telles machines sont aussi connues sous le nom d’ordinateurs à
programme stocké en mémoire.
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
12
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
13
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Description du modèle de Von Neumann (1/3)
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Description du modèle de Von Neumann (2/3)
mémoire
centrale
Trois entités :
le processeur
programme
unité de calcul appelée UAL (Unité Arithmétique et Logique)
unité de contrôle appelée aussi unité de commande
processeur
données
la mémoire dite centrale
le système d’entrées/sorties, liaisons avec l’extérieur
(périphériques)
écran, clavier, souris
mémoire secondaire (disque, CD, DVD, bande, etc)
réseau (ethernet, wifi, etc)
mémoire
secondaire
(disque)
F IGURE: Processeur, mémoire et périphériques
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
14
Les ordinateurs actuels
Description du modèle de Von Neumann (3/3)
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
15
Les ordinateurs actuels
Mémoire centrale (vision abstraite)
La mémoire contient des informations prises dans un certain domaine
La mémoire contient un certain nombre (fini) d’informations
le processeur exécute le programme contenu dans la mémoire centrale.
Les informations sont codées par des vecteurs binaires d’une certaine
taille
la mémoire centrale contient à la fois les données et le programme qui “dit” au
processeur quels calculs faire sur ces données.
0
le système d’entrées-sorties permet de communiquer avec le monde extérieur
(réseau, utilisateur, . . .) et fait la liaison avec les mémoire secondaires
Remarque
Les programmes traitent des représentations des informations. Les programmes sont
aussi des informations.
max-1
taille
F IGURE: Mémoire abstraite
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
16
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
18
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Mémoire centrale : notion d’adresse
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Mémoire centrale (vision physique)
Toutes les informations sont représentées par des vecteurs binaires ce
qui permet des connexions par des nappes de fils.
16 bits
Les informations contenues dans la mémoire sont désignables par
une adresse
15
1 0
0
8 fils
On parle aussi d’emplacement mémoire
On parle aussi d’emplacement précédent, suivant
BUS ADRESSES
BUS CONTROLE
Dans l’exemple précédent, une adresse est un numéro
d’emplacement parmi [0, max-1].
2^8!1
BUS DONNEES
16 fils
F IGURE: Mémoire physique d’info sur 16 bits avec adresses sur 8 bits
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
19
Les ordinateurs actuels
Mémoire centrale : informations de tailles variables
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
20
Les ordinateurs actuels
Mémoire centrale : adresses en octets
Les adresses sont exprimées en nombre d’octets.
Les informations en mémoire sont :
de taille 8 bits : octet (byte)
Par exemple, si on considère des mots de 32 bits (4 octets), si un mot
est à l’adresse X, le suivant est à l’adresse X+4
de taille 16 bits : demi-mot (hword, halfword)
de taille 32 bits : mot (word)
Une adresse est aussi représentée sur un certain nombre de bits.
de taille 64 bits : double-mot (dword, double word)
Par exemple, si les numéros d’emplacement vont de 0 à max-1,
l’adresse est codée par un vecteur binaire de dlog2 max e bits.
Par exemple, une adresse codée sur 32 bits permet de désigner 232
octets différents.
Mémoire centrale : vision logique
Max informations de 8 bits i.e. Max octets
Max / 4 mots de 32 bits
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
21
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
22
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Tailles des mémoires centrales (1 /2)
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Tailles des mémoires centrales (2 /2)
Unités utilisées
1 kilooctet = 103 octets
Ordinateur de poche, PDA (Personal Digital Assistant) : 500 Mo
1 mégaoctet = 106 octets
Ultra-portable : 2 à 4 Go
1 gigaoctet = 109 octets
Ordinateur de bureau, station de travail : 4 à 8 Go
1 téraoctet = 1012 octets
Super ordinateur (CRAY XT Jaguar - IBM) : 362 Tera octets
1 pétaoctet = 1015 octets
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
23
Les ordinateurs actuels
Actions sur la mémoire centrale
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
24
Les ordinateurs actuels
Actions sur la mémoire : LIRE
La mémoire reçoit :
un vecteur binaire (représentant une adresse A) sur le bus adresses,
un signal de commande de lecture sur le bus de contrôle.
Les informations mémorisées dans la mémoire centrale peuvent être :
Elle délivre un vecteur binaire représentant la donnée D sur le bus données.
consultées (plusieurs fois)
0
modifiées
BUS ADR
D
A
La mémoire centrale contient, non seulement des données mais aussi
le programme.
BUS CTRL
LIRE
max-1
BUS DON
D
On note : D <-- mem[A]
mem[A] : emplacement mémoire dont l’adresse est A
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
25
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
26
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Actions sur la mémoire : ECRIRE
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Actions sur la mémoire : NE RIEN FAIRE
La mémoire reçoit :
un vecteur binaire (représentant une adresse A) sur le bus adresses,
un vecteur binaire (représentant la donnée D) sur le bus données,
un signal de commande d’écriture sur le bus de contrôle.
Elle inscrit (peut-être, voir tableau ci-après) la donnée D comme contenu de
l’emplacement mémoire dont l’adresse est A
Bus contrôle : ni lecture, ni écriture.
0
La mémoire garde indéfiniment (peut-être, voir tableau ci-après) les
informations.
BUS ADR
??
A
BUS CTRL
ECRIRE
max-1
BUS DON
D
On écrit : mem[A] <-- D
Remarque : le bus données est bidirectionnel
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
27
Les ordinateurs actuels
Différents types de mémoires (centrales)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
28
Les ordinateurs actuels
Autres types de mémoires
nom
volatilité
modifiabilité
ROM mémoire morte
non
Eprom (+ variantes)
non
mémoire flash
non
RAM mémoire vive
oui
inscrite à la fabrication
par l’usine de fabrication semi-conducteurs
modifiable (100 fois)
par l’atelier PMIPME électronique
modifiable 100 000 fois
l’utilisateur de l’appareil
de carte bancaire, téléphone, vitale
modifiable autant de fois
que le signal écriture sera activé
Les mémoires secondaires désignent les mémoires
périphériques telles que le disque dur, CD-ROM, DVD, clé
USB, . . .
La mémoire cache est une mémoire relativement petite et rapide
qui stocke les informations les plus utilisées d’une autre mémoire
plus grande et plus lente.
La mémoire virtuelle (swap) est un mécanisme qui permet à des
programmes de pouvoir s’exécuter dans un environnement
matériel possédant moins de mémoire centrale que nécessaire.
La mémoire centrale se divise entre mémoire volatile (RAM) (programmes et données en cours
de fonctionnement) et mémoire permanente (ROM et EPROM) (programmes et données de
Taille des disques (mémoires secondaires)
base de la machine)
Carrier, Devismes (Grenoble I)
Carrier, Devismes (Grenoble I)
Ultra-portable : 200 à 500 Go
Ordinateur de bureau, station de travail : un Tera octets
Super ordinateur (CRAY XT JAGUAR - IBM) : 10 Peta octets
Modèle de Von Neumann
9 janvier 2015
29
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
30
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Résumé : processeur/mémoire
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Entrées /Sorties : définitions
On appelle périphériques d’entrées/sortie les composants qui
permettent :
Processeur : circuit relié à la mémoire (bus adresses, données et contrôle)
La mémoire contient des informations de nature différentes :
des données : représentation binaire d’une couleur, d’un entier, d’une date, etc.
L’intéraction de l’ordinateur (mémoire et processeur) avec
l’utilisateur (clavier, écran, . . .)
des instructions : représentation binaire d’une ou plusieurs actions à réaliser.
Le processeur, relié à une mémoire, peut :
L’intéraction de l’ordinateur avec le réseau (carte réseau, carte
WIFI, . . .)
lire un mot : le processeur fournit une adresse, un signal de commande de
lecture et reçoit le mot.
L’accès aux mémoires secondaires (disque dur, clé USB. . .)
écrire un mot : le processeur fournit une adresse ET une donnée et un signal
de commande d’écriture.
L’accès aux périphériques se fait par le biais de ports (usb, serie, pci,
. . .).
ne pas accéder à la mémoire.
exécuter des instructions, ces instructions étant des informations lues en
mémoire.
Sortie : ordinateur −→ extérieur
Entrée : extérieur −→ ordinateur
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
31
Les ordinateurs actuels
Les bus
Carrier, Devismes (Grenoble I)
Introduction
Modèle de Von Neumann
Notion de modèle
La mémoire (centrale)
9 janvier 2015
Les entrées /sorties
Le processeur
33
Les ordinateurs actuels
Composition du processeur
Le processeur est composé d’unités (ressources matérielles internes) :
Un bus informatique désigne l’ensemble des lignes de communication
(câbles, pistes de circuits imprimés, ...) connectant les différents composants
d’un ordinateur.
des registres : cases de mémoire interne
Caractéristiques : désignation, lecture et écriture “simultanées”
des unités de calcul (UAL)
une unité de contrôle : (UC, Central Processing Unit)
Le bus de données permet la circulation des données.
un compteur ordinal ou compteur programme : PC
Le bus d’adresse permet au processeur de désigner à chaque instant la
case mémoire ou le périphérique auquel il veut faire appel.
processeur
memoire
registres
Le bus de contrôle indique quelle est l’opération que le processeur veut
exécuter, par exemple, s’il veut faire une écriture ou une lecture dans
une case mémoire ; on trouve également, dans le bus de contrôle, une
ou plusieurs lignes qui permettent aux périphériques d’effectuer des
demandes au processeur ; ces lignes sont appelées lignes
d’interruptions matérielles (IRQ).
programme=
suite
d’instructions
PC
R0
R1
R2
R3
calcul
bus adr
bus ctrl
controle
bus don
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
34
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
36
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Notion d’exécution séquentielle des instructions(1/3)
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Notion d’exécution séquentielle des instructions (2 /3)
Pour exécuter une suite d’instructions (programme), le processeur
effectue :
bus contrôle
0
Répéter :
Reg1
Reg2
8
2
12
4
lire une instruction à l’adresse contenue dans PC
Données
16
exécuter cette instruction
calculer l’adresse de l’instruction suivante et mettre à jour PC
Reg1 <−− Mem[8]
PC
Reg2 <−− Mem[12]
Programme
Reg2 <−− Reg1 − Reg2
démarrage : signal physique (RESET) → forcer une valeur initiale
dans PC
Mem[16] <−− Reg2
bus adresses
UAL
arrêt : jamais (sauf coupure de courant. . .).
Max−1
bus données
Remarques : Dans certaines machines (machines portables,
embarquées, . . .) le fonctionnement peut être suspendu pour
économiser de l’énergie
F IGURE: Un exemple d’exécution d’un programme
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
37
Les ordinateurs actuels
Notion d’exécution séquentielle des instructions (3 /3)
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
38
Les ordinateurs actuels
Représentation d’une instruction en mémoire : un vecteur de bits
Programme : suite de vecteurs binaires qui codent les
instructions qui doivent être exécutées.
−→ exécution séquentielle
Le codage des instructions constitue le Langage machine (ou
code machine).
certaines instructions spécifiques donnent l’adresse de
l’instruction suivante
Chaque modèle de processeur a son propre langage machine
(on dit que le langage machine est natif)
−→ rupture de séquence
Modèle de Von Neumann
Introduction
Codage des instructions : langage machine
les instructions sont normallement exécutées dans l’ordre où
elles sont écrites en mémoire
Carrier, Devismes (Grenoble I)
Carrier, Devismes (Grenoble I)
9 janvier 2015
39
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
40
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Architectures Logicielles et Matérielles
Introduction
Notion de modèle
La mémoire (centrale)
Les entrées /sorties
Le processeur
Les ordinateurs actuels
Informatique omniprésente (Ubiquitous Computing)
Téléphone portable
Architecture logicielle (ISA, Instruction Set Architecture)
PDA
−→ organisation du langage machine et son utilisation
Console de jeux
Lecteur de cartes magnétiques
Capteur (sensor)
Architecture matérielle
Puce RFID
−→ comment le langage machine est exécuté par du matériel
Voiture intelligente ...
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
41
Les ordinateurs actuels
Ordinateurs personnels
Carrier, Devismes (Grenoble I)
Introduction
Notion de modèle
Modèle de Von Neumann
La mémoire (centrale)
Les entrées /sorties
9 janvier 2015
Le processeur
43
Les ordinateurs actuels
Supercalculateurs
Classement (novembre 2011)
Multi-coeurs (voir Multi-processeurs)
Puissance : plusieurs gigahertz
1
K computer (Fujitsu, RIKEN, Japon)
2
Tianhe-IA (NUDT, Tianjin, Chine)
3
Jaguar (CRAY, USA)
Mémoire centrale : plusieurs Gigaoctets
Caractéristiques du K computer :
Disque dur : plusieurs centaines de Gigaoctets
Performance maximale : 10,51 pétaflops (10,51 ×1015 opérations à virgule
flottante /seconde)
Sur les PC : des pentium, AMD, ou des compatibles.
1 Péta-Octets de mémoire vive (1015 octets)
Sur les Macintosh : des 68000, PowerPC, et maintenant des
pentiums
88 128 processeurs (SPARC64) de 2GHz (8 cœurs chacun)
Puissance : 9,89 Méga Watt
Sur certaines consoles de jeux : des ARM
Budget final de 1,2 milliard de dollars
Sur nougat : biprocesseur type Intel(R) Xeon(R)
Remarque
Sur les PC du DLST : processeur Intel Pentium
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
La tendance actuelle est de remplacer les supercalculateurs par des grappes de pc
(cluster, grid-computing)
9 janvier 2015
44
Carrier, Devismes (Grenoble I)
Modèle de Von Neumann
9 janvier 2015
45
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Plan
Langage d’assemblage, langage machine
Fabienne Carrier
Stéphane Devismes
Université Joseph Fourier, Grenoble I
1
Vie d’un programme
2
Les langages
3
Langage machine
4
Langage d’assemblage
9 janvier 2015
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
1
Langage d’assemblage
Exemple
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
2
Langage d’assemblage
Etapes de compilation
monprog.c :
#include "malib.h"
#define max(a,b) ((a)>(b)?(a):(b))
main()
{
int x,y,z;
x = 10; y = 15;
z = max(x,y);
plus (&z);
}
Précompilation :
malib.c :
void plus (int *ai) {
*ai = (*ai) + 1;
}
arm-eabi-gcc -E monprog.c > monprog.i
source : monprog.c −→ source enrichi monprog.i
Compilation : arm-eabi-gcc -S monprog.i
source enrichi −→ langage d’assemblage : monprog.s
Assemblage : arm-eabi-gcc -c monprog.s
langage d’assemblage −→ binaire translatable : monprog.o
malib.h :
même processus pour malib.c −→ malib.o
#ifndef MALIB
#define MALIB
Edition de liens : arm-eabi-gcc monprog.o malib.o -o
monprog
/* incrementation d’un mot memoire */
extern void plus (int *);
#endif
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
un ou plusieurs fichiers −→ binaire exécutable, objet : monprog
9 janvier 2015
4
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
5
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Exemple : arm-eabi-gcc -E monprog.c > monprog.i (2/2)
Précompilation (pre-processing)
monprog.i :
arm-eabi-gcc -E monprog.c > monprog.i
#
#
#
#
produit monprog.i
extern void plus (int *);
# 3 "monprog.c" 2
suppression des commentaires.
main()
{
int x,y,z;
x = 10;
y = 15;
z = ((x)>(y)?(x):(y));
plus (&z);
}
inclusion des profils des fonctions des bibliothèques dans le
fichier source.
traitement des directives de compilation.
remplacement des macros
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
"monprog.c"
"<built-in>"
"<command line>"
"monprog.c"
# 1 "malib.h" 1
La précompilation réalise plusieurs opérations de substitution sur le
code, notamment :
Carrier, Devismes (Grenoble I)
1
1
1
1
6
Langage d’assemblage
Compilation
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
7
Langage d’assemblage
Exemple : arl-eabi-gcc -S monprog.i
monprog.s :
.file "monprog.c"
.text
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 12
@ frame_needed = 1, uses_..._args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #12
mov r3, #10
str r3, [fp, #-16]
mov r3, #15
str r3, [fp, #-20]
ldr r2, [fp, #-20]
ldr r3, [fp, #-16]
arm-eabi-gcc -S monprog.i
produit monprog.s
Le code source enrichi est transformé en langage d’assemblage
instructions et données.
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
8
Carrier, Devismes (Grenoble I)
cmp r2, r3
movge r3, r2
str r3, [fp, #-24]
sub r3, fp, #24
mov r0, r3
bl plus
mov r0, r3
sub sp, fp, #12
ldmfd sp, {fp, sp, pc}
.size main, .-main
.ident "GCC: (GNU) 3.4.3"
Langage d’assemblage, langage machine
9 janvier 2015
9
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Assemblage
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Exemple : arm-eabi-gcc -c monprog.s
monprog.o :
0000000
0000020
0000040
0000060
0000100
0000120
0000140
0000160
0000200
0000220
0000240
0000260
0000300
0000320
*
0000360
0000400
0000420
0000440
0000460
0000500
0000520
0000540
0000560
0000600
0000620
0000640
arm-eabi-gcc -c monprog.s
produit monprog.o
Le code en langage d’assemblage (lisible) est transformé en code
machine.
Le code machine se présente comme une succession de vecteurs
binaires.
Le code machine ne peut pas être directement édité et lu. On peut le
rendre lisible en utilisant une commande od -x monprog.o.
Le fichier monprog.o contient des instructions en langage machine et
des données mais il n’est pas exécutable. On parle de binaire
translatable.
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
10
Langage d’assemblage
Edition de liens
457f
0001
00cc
0009
d00c
3014
3002
fffe
4700
0033
6261
2e6c
0073
0000
464c
0028
0000
0006
e24d
e50b
a1a0
ebff
4343
2e00
2e00
6574
632e
0000
0101
0001
0000
c00d
300a
2014
3018
0003
203a
7973
6873
7478
6d6f
0000
6101
0000
0000
e1a0
e3a0
e51b
e50b
e1a0
4728
746d
7473
2e00
656d
0000
0000
0000
0034
d800
3010
3010
3018
d00c
554e
6261
7472
6164
746e
0000
0000
0000
0000
e92d
e50b
e51b
e24b
e24b
2029
2e00
6261
6174
0000
0000
0000
0000
0000
b004
300f
0003
0003
a800
2e33
7473
2e00
2e00
0000
0000
0000
0000
0028
e24c
e3a0
e152
e1a0
e89d
2e34
7472
6572
7362
0000
0000
0000
0000
0000
0009
0008
0008
0000
0000
0008
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
001f
0034
0004
0000
0007
0025
0080
0001
0003
0000
0030
0080
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0001
004c
0000
0000
0001
0001
0000
0000
0000
0000
0001
0012
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0006
0000
001b
02dc
0004
0003
0000
002b
0080
0001
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
Vie d’un programme
Les langages
Langage machine
9 janvier 2015
11
Langage d’assemblage
Exemple : arm-eabi-gcc monprog.o malib.o -o monprog
monprog :
0000000
0000020
0000040
0000060
0000100
0000120
0000140
*
0100000
0100020
0100040
0100060
0100100
0100120
0100140
0100160
0100200
0100220
0100240
0100260
0100300
0100320
0100340
0100360
0100400
0100420
arm-eabi-gcc monprog.o malib.o -o monprog
produit monprog
L’édition de liens permet de rassembler le code de différents fichiers.
A l’issue de cette phase le fichier produit contient du binaire
exécutable.
remarque : ne pas confondre exécutable, lié à la nature du fichier, et
muni du droit d’être exécuté , lié au système d’exploitation.
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
12
457f
0002
d010
0018
8000
8000
0000
464c
0028
0001
0015
0000
0000
0000
0101
0001
0002
0001
2a3c
0000
0000
6101
0000
0000
0000
0000
0000
0000
0000
8110
0034
8000
2b4c
0000
0000
0000
0000
0020
0000
0000
0000
0000
0000
0034
0001
8000
0007
0000
0000
0000
0000
0028
0000
0000
0000
0000
c00d
07fd
d830
b004
3000
f002
fff6
e00f
a830
aa24
a800
d800
e00f
0000
a800
aa24
c00d
0016
e1a0
eb00
e92d
e24c
e594
e1a0
1aff
11a0
e89d
0000
e89d
e92d
11a0
e353
089d
0000
e1a0
e3a0
dff0
6ff0
5058
a830
3004
3000
3020
f003
aa3c
c00d
3040
0034
f003
a800
6800
aa40
d800
10e4
e92d
e91b
e59f
189d
e283
e594
e59f
11a0
0000
e1a0
e59f
e59f
11a0
089d
e89d
0000
e92d
e28f
b004
f00e
3000
4048
3000
2000
0000
3001
a180
d800
c00d
b004
0028
301c
dfc4
aa38
b004
3456
e24c
e1a0
e5d5
e59f
e584
e593
e353
e3a0
0000
e92d
e1a0
e24c
e59f
e59f
eaff
0000
e24c
ef12
0024
c00d
0000
0004
e00f
0000
001c
3000
0000
b004
0000
1030
3000
0000
0000
0000
a800
00dc
eb00
e1a0
e353
ea00
e1a0
e352
159f
e5c5
0000
e24c
e353
e59f
e590
e353
0000
0000
e89d
e59f
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
13
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Comment exécuter un programme ? (1/3)
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Comment exécuter un programme ? (2/3)
Sur un ordinateur dont le binaire est connu du processeur :
Sur un ordinateur qui ne connait pas le binaire que l’on produit
Ex : le fichier monprog contient du binaire Intel et je suis sur un
PC dont la carte mère est équipée d’un processeur Intel.
Ex : arm-eabi-gcc monprog.c produit du binaire arm qui n’est pas
exécutable sur un PC Intel.
je lance le programme depuis un terminal ou l’interface
graphique,
le système d’exploitation installe le contenu du fichier exécutable
dans la mémoire centrale (transfert depuis le disque dur +
chargement en mémoire),
On utilise un émulateur, c’est-à-dire un programme qui mimique le
comportement du système pour lequel le binaire est destiné
(arm-eabi-run monprog).
puis il met l’adresse de début dans le compteur programme,
L’émulateur simule l’exécution du binaire dans une mémoire qui lui est
propre.
et enfin le processeur commence l’exécution. . .
Remarque : l’emplacement de stockage du programme en mémoire
est choisit par le système d’exploitation.
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
14
Langage d’assemblage
Comment exécuter un programme ? (3/3)
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
15
Langage d’assemblage
Caractéristiques d’un langage
Sur les automatismes : ex. lecteur de carte électronique
un lexique : les mots que l’on peut écrire,
Quand il écrit le programme, le programmeur connait précisément
l’architecture. Il peut produire directement une image du programme
dans la mémoire à une adresse fixe et ranger le binaire dans une
EPROM.
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
une syntaxe : l’organisation des mots qui est permise,
une sémantique : le sens des phrases, c’est-à-dire des
successions de mots.
16
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
18
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Classification
Langage d’assemblage
Langage d’assemblage (assembleur) : comme le langage
machine mais sous une forme lisible par un humain : les
combinaisons de bits du langage machine sont représentées par
des symboles dits mnémoniques .
Remarque : Il est la plupart du temps utilisé comme
intermédiaire (lors de la compilation) entre un langage de
haut-niveau et le langage machine.
Langage de bas-niveau :
le programmeur est obligé de prendre en compte des concepts
proches du fonctionnement de la machine (adresse de
l’instruction courante, place des valeurs en mémoire, . . . ).
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
19
Langage d’assemblage
Lexicographie
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
20
Langage d’assemblage
Syntaxe
Lexique : liste des mots du langage, la façon dont ils s’écrivent (leur
codage)
Syntaxe : Règles définissant la manière d’écrire et de placer les mots.
Quels sont les groupements valides d’instructions (pour constituer des
programmes) ?
Pour le langage machine, les mots sont des suites de 0 et de 1 qui
représentent des instructions ou des données. Les suites de 0 et de 1
sont organisées par champs pour former les instructions.
En général, très souple : Il existe plusieurs façon de coder la même
chose.
Exemple : l’instruction 3684210 dit qu’il faut ajouter le nombre
actuellement dans le registre 17 avec celui qui est dans le registre AB
et ranger le résultat en mémoire à l’adresse 27. Les informations 17,
AB, 27 seront codées dans des champs différents du vecteur de bits
représentant l’instruction.
Carrier, Devismes (Grenoble I)
Langage machine
Langage machine : suite de bits, interprétée par le processeur de
l’ordinateur lors de l’exécution d’un programme.
Remarque : Aujourd’hui, on ne programme plus directement en
binaire mais c’était le cas pour les premiers ordinateurs !
le programmeur peut s’abstraire des détails de fonctionnement
de la machine, il peut manipuler des concepts élaborés (objet,
structure. . .).
Exemples : Java, Python, ADA, LISP. . .
Vie d’un programme
Les langages
Langages bas-niveaux
Langage de haut-niveau :
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
9 janvier 2015
remarque : si une donnée se retrouve, suite à une erreur, repérée par
le compteur programme, alors le processeur essaie de l’exécuter.
21
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
22
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Sémantique (signification)
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Un langage machine par processeur
Pour tout processeur il existe un langage machine caractéristique
(langage natif). Même s’il existe une compatibilité entre processeurs
de la même famille.
Quel est le sens du programme ?
Un programme est une suite (ou séquence, liste) de vecteurs de bits
qui représentent des instructions.
Remarques :
Si il y a 237 instructions dans le langage machine d’un certain
processeur, elles peuvent être codées par un vecteur binaire de 8
bits (27 = 128 ; 28 = 256) et donc il y a 19 vecteurs invalides.
Que doit alors faire le processeur ?
Il y a un ordre.
Les instructions sont exécutées dans l’ordre où elles sont écrites.
On verra qu’il peut y avoir des ruptures de séquence.
Une instruction est une chaı̂ne de bits, une donnée aussi . . .
Lorsque l’on considère une chaı̂ne de bits, on ne sait pas s’il
s’agit d’une instruction ou d’une donnée. le code n’est pas dans
l’information codée.
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
23
Langage d’assemblage
Instructions en langage machine
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
24
Langage d’assemblage
Instruction de calcul entre des informations mémorisées
L’instruction désigne la(les) source(s) et le destinataire. Les sources sont des cases
mémoires, registres ou des valeurs. Le destinataire est un élément de mémorisation.
L’instruction code : destinataire, source1, source2 et l’opération.
2 types d’instructions :
désignation
du destinataire
mém, reg
Instructions de calcul (ou de déplacement d’information) entre
des informations mémorisées.
←
désignation
de source1
mém, reg
oper
désignation
de source2
mém, reg, valIMM
Instructions de rupture de séquence
mém signifie que l’instruction fait référence à un mot dans la mémoire
reg signifie que l’instruction fait référence à un registre (nom ou numéro)
valIMM signifie que l’information source est contenue dans l’instruction
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
26
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
27
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Exemples
Langage machine
Langage d’assemblage
Fonctionnement standard : Une instruction est écrite à l’adresse
X ; l’instruction suivante (dans le temps) est l’instruction écrite à
l’adresse X+1. C’est implicite pour toutes les instructions de
calcul.
registre4 ← le mot mémoire d’adresse 36000 + le registre A
reg5 ← reg5 - 1
le mot mémoire d’adresse 564 ← registre7
Rupture de séquence : Une instruction de rupture de séquence
peut désigner la prochaine instruction à exécuter (à une autre
adresse).
Convention de noms
move, load, store
Vie d’un programme
Les langages
Instruction de rupture de séquence
reg12 ← reg14 + reg1
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
28
Langage d’assemblage
Exemples
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
29
Langage d’assemblage
Utilisation des instructions de rupture de séquence
Branch 125 : l’instruction suivante est désignée par une adresse
fixe .
Les ruptures de séquence permettent de modifier le déroulement
séquentiel de l’exécution des instructions.
Branch -40 : l’instruction suivante est une adresse calculée.
Branch SiZero +10 : si le résultat du calcul précédent est
Les ruptures de séquence servent à coder des choix ou des boucles.
ZERO, alors la prochaine instruction à exécuter est celle
d’adresse adresse courante+10 , sinon la prochaine
instruction à exécuter est la suivante dans l’ordre d’écriture,
c’est-à-dire à l’adresse adresse courante +1.
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
Remarques : si l’instruction suivante d’une instruction est elle-même
alors le processeur part en boucle infinie .
30
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
31
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Caractéristiques et Avantages
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Langage textuel, notation des instructions
Caractéristiques :
Langage textuel (au lieu de binaire) mais correspondance :
une instruction en assembleur ↔ une instruction en langage
machine.
Une instruction =
Séparation données/instructions.
mot conventionnel = mnémonique
Pas nécessaire de manipuler les adresses réelles, on ne connait
pas les adresses des données, du programme !
désignation des instructions ou données manipulées.
A chaque notation est associée une convention d’interprétation.
Avantages :
Lisibilité du code
Niveau de langage plus facile à manipuler
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
33
Langage d’assemblage
Exemples
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
34
Langage d’assemblage
Désignation des objets (1/7)
En ARM :
add r4, r5, r6 signifie r4 ← r5 + r6.
r5 désigne le contenu du registre, on parle bien sûr du contenu
des registres, on n’ajoute pas des ressources physiques !
On parle parfois, improprement, de modes d’adressage. Il s’agit de
dire comment on écrit, par exemple, la valeur contenue dans le
registre numéro 5, la valeur -8, la valeur rangée dans la mémoire à
l’adresse 0xff, . . .
En SPARC :
add g4, g5, g6 signifie g6 ← g4 + g5.
En 6800 :
Il n’y a pas de standard de notations, mais des standards de
signification d’un constructeur à l’autre.
addA 5000 signifie regA ← regA + Mem[5000]
addA ]50 signifie regA ← regA + 50
add r3, r3, [5000] signifie reg3 ← reg3 + Mem[5000]
L’objet désigné peut être une instruction ou une donnée.
remarque : pas de règle générale, interprétations différentes selon les
fabricants, quelques habitudes cependant concernant les
mnémoniques (add, sub, load, store, jump, branch, clear, inc, dec) ou
la notation des opérandes (#, [xxx])
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
35
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
36
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Désignation des objets (2/7) : par registre
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Désignation des objets (3/7) : immédiate
Désignation registre/registre.
Désignation registre/valeur immédiate.
L’objet désigné (une donnée) est le contenu d’un registre. L’instruction
contient le nom ou le numéro du registre.
La donnée dont on parle est littéralement écrite dans l’instruction
En ARM : mov r4 , #5 ; signifie r4 ← 5.
En 6502 : 2 registres A et X (entre autres)
TAX signifie transfert de A dans X
X ← contenu de A (on écrira X ← A).
Remarque : la valeur immédiate qui peut être codée dépend de la
place disponible dans le codage de l’instruction.
ARM : mov r4 , r5 signifie r4 ← r5.
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
37
Langage d’assemblage
Désignation des objets (4/7) : directe ou absolue
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
9 janvier 2015
Langage machine
38
Langage d’assemblage
Désignation des objets (5/7) : indirect par registre
Désignations registre/directe ou absolue.
Désignation registre/indirect par registre
On donne dans l’instruction l’adresse de l’objet désigné. L’objet
désigné peut être une instruction ou une donnée.
L’objet désigné est dans une case mémoire dont l’adresse est dans un
registre précisé dans l’instruction.
En 68000 : move.l D3, $FF9002 signifie Mem[FF9002] ← D3.
la deuxième opérande (ici une donnée) est désigné par son
adresse en mémoire.
add r3, [r5] signifie r3 ← r3 + (le mot mémoire dont l’adresse est
contenue dans le registre 5)
On note r3 ← r3 + mem[r5].
En SPARC : jump 0x2000 signifie l’instruction suivante (qui est
l’instruction que l’on veut désigner) est celle d’adresse 0x2000.
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
39
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
40
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Désignation des objets (6/7) : indirect par registre et
déplacement
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Désignation des objets (7/7) : relatif au compteur programme
Désignation registre/indirect par registre et déplacement
L’adresse de l’objet désigné est obtenue en ajoutant le contenu d’un
registre précisé dans l’instruction et d’une valeur (ou d’un autre
registre) précisé aussi dans l’instruction.
Désignation relative au compteur programme
L’adresse de l’objet désigné (en général une instruction) est obtenue
en ajoutant le contenu du compteur de programme et une valeur
précisée aussi dans l’instruction.
add r3, [r5, #4] signifie r3 ← r3 + mem[r5 + 4].
La notation [r5 + #4] désigne le mot mémoire (une donnée ici)
d’adresse r5 + #4.
En ARM : bal 20 signifie pc ← pc + 20
En 6800 : jump [PC - 12] = le registre est PC, le déplacement -12.
L’instruction suivante (qui est l’instruction que l’on veut désigner)
est celle à l’adresse obtenue en calculant, au moment de
l’exécution, PC - 12.
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
41
Langage d’assemblage
Séparation données/instructions
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
42
Langage d’assemblage
Exemple (1/2)
Dans l’exemple suivant on utilise la directive org. On suppose que les
instructions sont toutes codées sur 4 octets :
Le texte du programme est organisé en zones (ou segments) :
zone TEXT : code, programme, instructions
zone TEXT, org 0x2000
move r4, #5004
load r5, [r4]
jump 0x2000
.......
zone DATA, org 0x5000
entier sur 4 octets : 0x56F3A5E2
entier sur 4 octets : 0xAAF43210
....
zone DATA : données initialisées
zone BSS : données non initialisées, réservation de place en
mémoire
On peut préciser où chaque zone doit être placée en mémoire : la
directive ORG permet de donner l’adresse de début de la zone
(ne fonctionne pas toujours !).
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
43
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
44
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Exemple (2/2)
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Etiquettes (1/4) : définition
Quelle est la représentation en mémoire du programme ?
2000 -->
2004 -->
2008 -->
5000 -->
memoire
|
|
| move...
| load...
| jump...
|
|
|
|56 f3 a5 e2
|aa f4 32 10
|
|
Etiquette : nom choisi librement (quelques règles lexicales quand
même) qui désigne une case mémoire. Cette case peut contenir une
donnée ou une instruction.
|
|
|
|
|
|
|
|
|
|
|
|
Une étiquette correspond à une adresse.
Pourquoi ?
L’emplacement des programmes et des données n’est à priori
pas connu
la directive ORG ne peut pas toujours être utilisée
Plus facile à manipuler
Quel est l’effet de ce programme ?
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
45
Langage d’assemblage
Etiquettes (2/4) : exemple
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
46
Langage d’assemblage
Etiquettes (3/4) : avantages
zone TEXT
DD: move r4, #42
load r5, [YY]
jump DD
Le programmeur n’a pas besoin de connaitre les adresses réelles
pour comprendre ce que fait son programme.
Le programme est plus facile à lire, à écrire.
zone DATA
XX: entier sur 4 octets : 0x56F3A5E2
YY: entier sur 4 octets : 0xAAF43210
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
47
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
48
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Etiquettes (4/4) : correspondance étiquette/adresse
Les langages
Langage machine
Langage d’assemblage
Statiquement, dans un fichier si l’adresse de début de chaque
zone est connue de l’outil d’assemblage (ou d’édition de liens)
→ de plus en plus rare
contenu de Mem[2000], ...
move r4, #42
load r5, [5004]
jump 2000
Langage d’assemblage, langage machine
Vie d’un programme
Langage machine
Correspondance étiquette ↔ adresse
Dynamiquement, juste avant l’exécution ; l’adresse de début est
déterminée par le système, le programmeur ne la connaı̂t pas
La phase de chargement consiste à installer un programme en
mémoire.
L’adresse de début de la zone mémoire dans laquelle est installé le
programme est appelée adresse de chargement.
zone DATA
XX: entier sur 4 octets : 0x56F3A5E2
YY: entier sur 4 octets : 0xAAF43210
Carrier, Devismes (Grenoble I)
Les langages
Chargement
Supposons les adresses de début des zones TEXT et DATA
respectivement 2000 et 5000
Il faut remplacer DD par 2000 et YY par 5004.
zone TEXT
DD: move r4, #42
load r5, [YY]
jump DD
Vie d’un programme
9 janvier 2015
49
Langage d’assemblage
Étiquette, application en ARM (lecture et écriture d’une
variable
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
50
Langage d’assemblage
Autre exemple d’application : es.s
Nous considérons le schéma de programme suivant :
.data
.data
A:
B:
.word 10
.word 15
.global
main :
main
X:
.byte 3
.byte 2
.hword 1
.global
main :
main
.text
ptr A :
ptr B :
ldr r0,ptr A
ldr r1,[r0]
ldr r0,ptr B
str r1,[r0]
bal exit
.word A
.word B
.text
@ charge le contenu de l’adresse ptr A (adresse de A) dans r0
@ charge le contenu de l’adresse A (10) dans r1
@ charge le contenu de l’adresse ptr B (adresse de B) dans r0
@ copie le contenu de r0 (10) à l’adresse B
...
@ adresse de la variable A
@ adresse de la variable B
ptrX :
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
51
Carrier, Devismes (Grenoble I)
bal exit
.word X
Langage d’assemblage, langage machine
9 janvier 2015
52
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Vie d’un programme
Les langages
Langage machine
Autre exemple d’application : es.s
Autre exemple d’application : es.s
Qu’est-ce qu’affiche ce programme ?
Qu’est-ce qu’affiche ce programme ?
ldr r0,ptrX
ldr r1,[r0]
bl EcrNdecimal32
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
ldr r0,ptrX
ldrh r1,[r0]
bl EcrNdecimal32
9 janvier 2015
53
Langage d’assemblage
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
Autre exemple d’application : es.s
Autre exemple d’application : es.s
Qu’est-ce qu’affiche ce programme ?
Qu’est-ce qu’affiche ce programme ?
ldr r0,ptrX
ldrb r1,[r0]
bl EcrNdecimal32
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
Langage d’assemblage
9 janvier 2015
54
Langage d’assemblage
ldr r0,ptrX
ldrb r1,[r0,#1]
bl EcrNdecimal32
9 janvier 2015
55
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
56
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Autre exemple d’application : es.s
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Autre exemple d’application : es.s
Qu’est-ce qu’affiche ce programme ?
Qu’est-ce qu’affiche ce programme ?
ldr r0,ptrX
mov r1,#2
strb r1,[r0]
ldr r1,[r0]
bl EcrNdecimal32
ldr r0,ptrX
ldrb r1,[r0,#2]
bl EcrNdecimal32
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
9 janvier 2015
57
Langage d’assemblage
Carrier, Devismes (Grenoble I)
Vie d’un programme
Langage d’assemblage, langage machine
Les langages
Langage machine
Autre exemple d’application : es.s
Autre exemple d’application : es.s
Qu’est-ce qu’affiche ce programme ?
Qu’est-ce qu’affiche ce programme ?
ldr r0,ptrX
mov r1,#2
strh r1,[r0]
ldr r1,[r0]
bl EcrNdecimal32
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
58
Langage d’assemblage
ldr r0,ptrX
mov r1,#2
str r1,[r0]
ldr r1,[r0]
bl EcrNdecimal32
9 janvier 2015
59
Carrier, Devismes (Grenoble I)
Langage d’assemblage, langage machine
9 janvier 2015
60
Vie d’un programme
Les langages
Langage machine
Langage d’assemblage
Autre exemple d’application : es.s
Vie d’un programme
Les langages
En supposant que l’on donne 1 en entrée, qu’est-ce qu’affiche ce
programme ?
ldr r1,ptrX
bl LireCar
ldrb r2,[r1]
mov r1,r2
bl EcrNdecimal8
ldr r1,ptrX
bl Lire8
ldrb r2,[r1]
mov r1,r2
bl EcrNdecimal8
Langage d’assemblage, langage machine
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Langage d’assemblage
Autre exemple d’application : es.s
En supposant que l’on donne 1 en entrée, qu’est-ce qu’affiche ce
programme ?
Carrier, Devismes (Grenoble I)
Langage machine
Conditions complexes
9 janvier 2015
Codage du choix
61
Exercice
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Langage d’assemblage, langage machine
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
62
Exercice
Plan
1
Fonc. séquentiel/Rupture de séquence
2
Inst. conditionnelles
3
Itérations
4
Conditions complexes
5
Codage du choix
6
Exercice
Programmation des structures de contrôles
Fabienne Carrier
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
1
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
2
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Exécution séquentielle vs. rupture de séquence : rôle du PC
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Différents types de séquencement
registre PC : Compteur de programme, repère l’instruction à exécuter
initialisation ou lancement d’un programme
A chaque cycle :
séquencement normal 1
bus d’adresse ← PC ; bus de contrôle ← lecture
2
bus de donnée ← Mem[PC] = instruction courante
3
Décodage et exécution
4
Mise à jour de PC (par défaut, incrémentation)
rupture de séquence inconditionnelle
rupture de séquence conditionnelle
appels et retours de procédure/fonction
interruptions
exécution parallèle Les instructions sont exécutées séquentiellement
sauf ruptures de séquence !
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
4
Exercice
Séquencement (1/7)
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
5
Exercice
Séquencement (2/7)
Séquencement normal Après chaque instruction le registre PC est incrémenté.
Initialisation ou lancement d’un programme
Initialisation (boot)
Si l’instruction est codée sur k octets : PC ← PC + k
PC forcé à une valeur pré-établie (0)
Cela dépend des processeurs, des instructions et de la taille des mots.
Lancement d’un programme (chargement)
PC forcé à l’adresse de début de programme
En ARM, toutes les instructions sont codées sur 4 octets. Les
adresses sont des adresses d’octets. PC progresse de 4 en 4
Sur certaines machines (ex. Intel), les instructions sont de
longueur variable (1, 2, ou 3 octets). PC donne successivement
les adresses des différents octets de l’instruction
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
6
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
7
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Séquencement (3/7)
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Séquencement (4/7)
Rupture conditionnelle
Si une condition est vérifiée, alors
PC est modifié
sinon
PC est incrémenté normalement.
Rupture inconditionnelle
Une instruction de branchement inconditionnel force une adresse adr
dans PC.
la condition est interne au processeur :
expression booléenne portant sur les codes de conditions
arithmétiques
La prochaine instruction exécutée est celle située en Mem[adr ]
Cas TRES particulier : les premiers RISC (Sparc, MIPS) exécutaient
quand même l’instruction qui suit le branchement.
Z : nullité,
N : bit de signe,
C : débordement (naturel) et
V : débordement (relatif).
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
8
Exercice
Séquencement (5/7)
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
9
Exercice
Séquencement (6/7)
Interruption
Appels ou retours de procédures/fonctions
Mécanisme essentiel permettant entre autres de gérer les
périphériques . . .
Il y aura un chapitre dédié au codage des procédures et fonctions
Si un certain signal physique externe est actif, PC prend une valeur
lue en mémoire à une adresse conventionnelle.
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
10
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
11
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Séquencement (7/7)
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Désignation de l’instruction suivante
Désignation directe : l’adresse de l’instruction suivante est
donnée dans l’instruction.
Exécution parallèle Désignation relative : l’adresse de l’instruction suivante est
obtenue en ajoutant un certain déplacement (peut être signé) au
compteur programme.
Par ex. une machine superscalaire exécute plusieurs instructions en
même temps Remarques :
D’autres types de séquences seront étudiés en cours d’architecture
avancée
le mode de désignation en ARM est uniquement relatif.
en général, le déplacement est ajouté à l’adresse de l’instruction
qui suit la rupture. C’est-à-dire, PC + 4+ déplacement.
En ARM, PC + 8+ déplacement.
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
9 janvier 2015
Conditions complexes
Codage du choix
12
Exercice
Exemple : Assembleur type ARM
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
13
Exercice
Utilisation typique des sauts ou branchements
Rappel : instructions codées sur 4 octets
etiquette
e1 :
e2 :
adresse correspondant
a l’etiquette
0x1028
0x102C
0x1030
0x1034
0x1038
0x103C
0x1040
0x1044
Carrier, Devismes (Grenoble I)
instruction
assembleur
CLR Reg6
BRANCH si cond e2
xxx
xxx
xxx
yyy
xxx
xxx
Rupture de séquence et structures de contrôle
Programmation systématique en language d’assemblage de 3 types
de constructions algorithmiques :
codage effectif de
l’instruction
0x********
Structures de contrôle de la programmation classique :
si . . . alors . . . sinon . . . , tant que . . . faire . . .
xxx
xxx
xxx
0x********
xxx
xxx
9 janvier 2015
Automates avec actions (ou machines séquentielles avec actions)
Procédures et fonctions
14
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
15
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage des structures de contrôle : notations
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage des structures de contrôle : exemples traités
I1; si ExpCondSimple alors {I2; I3; I4;} I5;
I1; si ExpCondSimple alors {I2; I3;} sinon {I4; I5;
I6;} I7;
On dispose de sauts et de sauts conditionnels notés :
I1; tantque ExpCond faire {I2; I3;} I4;
branch etiquette et
I1; répéter {I2; I3;} jusqu’à ExpCond; I4;
branch si cond etiquette.
I1; pour (i←0 à N) {I2; I3; I4;} I5;
cond est une expression booléenne portant sur Z , N, C, V
Toute autre instruction (affectation, addition, . . . ) est notée Ik
si C1 ou C2 ou C3 alors {I1;I2;} sinon {I3;}
si C1 et C2 et C3 alors {I1;I2;} sinon {I3;}
selon a,b
a<b : I1;
a=b : I2;
a>b : I3;
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
16
Exercice
Instruction Si simple Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
17
Exercice
Une première solution
I1; si A=B alors {I2; I3; I4;} I5;
I1
calcul de A-B + positionnement de ZNCV
branch si (egal a 0) a etiq_alors
branch a etiq_suite
etiq_alors: I2
I3
I4
etiq_suite: I5
I1; si A=B alors {I2; I3; I4;} I5;
A et B deux entiers dont les valeurs sont rangées respectivement dans
les registres R1 et R2.
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
19
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
20
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage en ARM
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Une autre solution
x←0;A←5;B←6; si A=B alors {x←1;} x←x+1;
I1; si A=B alors {I2; I3; I4;} I5;
A et B dans r0, r2, x dans r1
I1
calcul de A-B + positionnement de ZNCV
branch si (non egal a 0) a etiq_suite
I2
I3
I4
etiq_suite: I5
Remarque : égal à 0 équivalent à Z
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
21
Exercice
Codage en ARM
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
22
Exercice
Instruction Si alors sinon
x←0;A←0;B←5; si A=B alors {x←1;} x←x+1;
A et B dans r0, r2, x dans r1
I1; si ExpCond alors {I2; I3;} sinon {I4; I5; I6;} I7;
Remarque : non égal à 0 équivalent à Z
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
23
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
24
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Une solution
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage en ARM
I1; si ExpCond alors {I2; I3;} sinon {I4; I5; I6;} I7;
A←5;B←6; si A=B alors {x←1;} sinon {x←0;}
I1
evaluer ExpCond + ZNCV
branch si faux a etiq_sinon
I2
I3
branch etiq_finsi
etiq_sinon: I4
I5
I6
etiq_finsi: I7
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
A et B dans r0, r2, x dans r1
9 janvier 2015
Codage du choix
25
Exercice
Une autre solution
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
26
Exercice
Codage en ARM
I1; si ExpCond alors {I2; I3;} sinon {I4; I5; I6;} I7;
I1
evaluer ExpCond + ZNCV
branch si vrai a etiq_alors
I4
I5
I6
branch etiq_finsi
etiq_alors: I2
I3
etiq_finsi: I7
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
A←5;B←6; si A=B alors {x←1;} sinon {x←0;}
A et B dans r0, r2, x dans r1
9 janvier 2015
27
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
28
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Instruction Tant que
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Une première solution
I1; tant que ExpCond faire {I2; I3;} I4;
I1
debut: evaluer ExpCond + ZNCV
branch si faux fintq
I2
I3
branch debut
fintq: I4
I1; tant que ExpCond faire {I2; I3;} I4;
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
30
Exercice
Codage en ARM
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
31
Exercice
Une autre solution
I1; tant que ExpCond faire {I2; I3;} I4;
a←0; b←5; tant que a<b faire {x←a; a←a+1;} x←b;
a, b dans r0, r2, x dans r1
Carrier, Devismes (Grenoble I)
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
I1
branch etiqcond
debutbcle: I2
I3
etiqcond: evaluer ExpCond
branch si vrai debutbcle
fintq:
I4
9 janvier 2015
32
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
33
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage en ARM
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Instruction Répéter
a←0; b←5; tant que a<b faire {x←a; a←a+1;} x←b;
a, b dans r0, r2, x dans r1
I1; répéter {I2; I3;} jusqu’à ExpCond; I4;
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
34
Exercice
Solution
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
35
Exercice
Codage en ARM
I1; répéter {I2; I3;} jusqu’à ExpCond; I4;
I1
debutbcle: I2
I3
evaluer ExpCond
branch si faux debutbcle
I4
a←0;b←5; répéter {a←a+1;} jusqu’à a>b; x←b;
a, b dans r0, r2, x dans r1
Observer les différences entre ce codage et la solution du tantque
avec test à la fin.
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
36
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
37
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Instruction Pour
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Solution
I1; pour (i←0 à N) {I2; I3;I4;} I5;
I1
i<-0
tantque i<N
I2
I3
I4
i<-i+1
I5
I1; pour (i←0 à N) {I2; I3;I4;} I5;
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
38
Exercice
Codage en ARM
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
39
Exercice
Exemple : gestion de tableaux (1/2)
Déclaration d’un tableau de 8 entiers
b←2;a←0; pour (i←0 à 3) {a←b; b←2*b;} a←b;
i dans r0, 3 dans r3, a, b dans r1, r2
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
40
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
41
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Exemple : gestion de tableaux (2/2)
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Exercice
Deux boucles imbriquées
pour (i=0 a N)
pour (j=0 a K)
I2;I3
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
42
Exercice
Exercice
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
43
Exercice
Codage en ARM
x ← 0; pour i←0 à 24 pour j←0 à 9 { x ← x+1; }
i, j dans r0, r4, 24 dans r2, 9 dans r3, x dans r1
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
44
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
45
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Expression conditionnelle complexe avec des ou
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Solution I
si C1 ou C2 ou C3 alors I1;I2 sinon I3
evaluer C1
branch si vrai etiq_alors
evaluer C2
branch si vrai etiq_alors
evaluer C3
branch si faux etiq_sinon
etiq_alors: I1
I2
branch etiq_fin
etiq_sinon: I3
etiq_fin:
si C1 ou C2 ou C3 alors I1;I2 sinon I3
Solution avec évaluation minimale des conditions
oualors en algorithmique.
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
47
Exercice
Codage en ARM
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
48
Exercice
Solution II
si C1 ou C2 ou C3 alors I1;I2 sinon I3
si r0=r1 ou r0=r2 ou r1=r2 alors r1←1; sinon r1←2;
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
evaluer C1
branch si vrai etiq_alors
evaluer C2
branch si vrai etiq_alors
evaluer C3
branch si vrai etiq_alors
etiq_sinon: I3
branch etiq_fin
etiq_alors: I1
I2
etiq_fin:
49
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
50
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage en ARM
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Expression conditionnelle complexe avec des ou
si r0=r1 ou r0=r2 ou r1=r2 alors r1←1; sinon r1←2;
si C1 ou C2 ou C3 alors I1;I2 sinon I3
Solution avec évaluation complète des conditions
Evaluer chaque Ci dans un registre
Utiliser l’instruction ORR du processeur.
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
51
Exercice
Expression conditionnelle complexe avec des et
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
52
Exercice
Solution
si C1 et C2 et C3 alors I1;I2 sinon I3
evaluer C1
branch si faux etiq_sinon
evaluer C2
branch si faux etiq_sinon
evaluer C3
branch si faux etiq_sinon
etiq_alors: I1
I2
branch etiq_fin
etiq_sinon: I3
etiq_fin:
si C1 et C2 et C3 alors I1;I2 sinon I3
Solution avec évaluation minimale des conditions
etpuis en algorithmique.
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
53
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
54
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Codage en ARM
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Construction selon
selon
a<b
a=b
a>b
si r0=r1 et r1=r2 et r2=r3 alors r1←1; sinon r1←0;
a,b:
: I1
: I2
: I3
Une solution consiste à traduire en si alors sinon.
si a<b alors I1
sinon si a=b alors I2
sinon si a>b alors I3
Mais ARM offre une autre possibilité. . .
Carrier, Devismes (Grenoble I)
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
9 janvier 2015
Conditions complexes
Codage du choix
55
Exercice
Solution
Fonc. séquentiel/Rupture de séquence
Rupture de séquence et structures de contrôle
Inst. conditionnelles
Itérations
Conditions complexes
9 janvier 2015
Codage du choix
57
Exercice
Enoncé : nombre de 1
Instructions ARM conditionnelle.
Dans le codage d’une instruction, champ condition (bits 31 à 28).
Sémantique d’une instruction : si la condition est vraie exécuter
l’instruction sinon passer à l’instruction suivante.
selon
a<b
a=b
a>b
Carrier, Devismes (Grenoble I)
a,b:
: x<-x+5
: x<-x+1
: x<-x+9
a dans R0, b dans
cmp R0,R1
addlt R2, R2,
addeq R2, R2,
addgt R2, R2,
Traduisez l’algorithme suivant en ARM :
x, nb : entiers >= 0
nb<-0
tantque x<>0 faire
si x mod 2 <> 0 alors nb<-nb+1
x<-x div 2
fin tantque
R1, x dans R2
#5
#1
#9
afficher nb
Que se passe-t-il si on remplace le addeq par un addeqs ?
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
58
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
9 janvier 2015
60
Fonc. séquentiel/Rupture de séquence
Inst. conditionnelles
Itérations
Conditions complexes
Codage du choix
Exercice
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Solution
.data
.word 7
.text
.global main
X:
Programmation à partir d’automates reconnaisseurs
main:
Fabienne Carrier
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
ptrX:
bal exit
.word X
Carrier, Devismes (Grenoble I)
Rupture de séquence et structures de contrôle
Automate avec actions à nombre fini d’états
Exemple
9 janvier 2015
61
Mise en œuvre logicielle
Plan
Carrier, Devismes (Grenoble I)
Automates
Automate avec actions à nombre fini d’états
Exemple
9 janvier 2015
1
Mise en œuvre logicielle
Définition
Un automate avec actions à nombre fini d’états
est un 6-uplet hE , S , s0 , O , f , g i :
1
Automate avec actions à nombre fini d’états
2
Exemple
3
1
E, ensemble fini non-vide : vocabulaire d’entrée, les éléments sont les
symboles d’entrées. Les entrées peuvent aussi être des conditions
portant sur les valeurs de variables.
2
S, ensemble fini non-vide : les états.
3
s0 ∈ S : l’état initial.
4
O, ensemble fini non-vide : vocabulaire de sortie. Les éléments sont
des actions sur les variables considérées.
5
f , fonction de transition : f : E × S → S.
6
g, fonction de sortie : g : S → O.
Mise en œuvre logicielle
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
2
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
4
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Transitions
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Pourquoi utiliser le modèle des automates ?
On parle aussi de :
Si f (ei , sj ) = sk on dit que l’état sk est le successeur, ou état suivant
de sj pour l’entrée ei .
machines séquentielles
On peut aussi parler d’une relation R (au lieu de la fonction f )
comportant, notamment, le triplet (ei , sj , sk ). Cela revient au même si
l’on précise des conditions sur les triplets permis.
et en anglais : Finite State Machine
automate d’état fini étendu
Intérêt du modèle :
Décrire le fonctionnement d’un système séquentiel
Simuler le fonctionnement d’un système séquentiel
Quand le vocabulaire d’entrée comporte des conditions booléennes
portant sur les variables, le changement d’état peut avoir lieu
seulement si la condition est vraie.
Carrier, Devismes (Grenoble I)
Automate avec actions à nombre fini d’états
Automates
Exemple
9 janvier 2015
Faire des preuves (équivalence, état atteignable) avant de passer
à une réalisation logicielle ou matérielle.
5
Mise en œuvre logicielle
Actions associées aux états ou aux transitions
Carrier, Devismes (Grenoble I)
Automate avec actions à nombre fini d’états
Automates
Exemple
9 janvier 2015
6
Mise en œuvre logicielle
Utilisation des automates dans ce cours
Actions associées aux états (automate de Moore)
fonction de sortie : S → O.
A chaque état correspond une ou plusieurs actions. Quand
l’automate est dans cet état, les actions sont exécutées.
Simultanément ou dans l’ordre, il faut le préciser !
Dans ce cours :
Montrer une programmation systématique avec organisation d’un
programme en mémoire.
Différence par rapport aux automates étendus vus au premier
semestre dans le cours de Langage et Automates. Les actions
étaient associées aux transitions.
Pour décrire le fonctionnement d’un processeur, on utilisera le
modèle d’automate avec actions.
Actions associées aux transitions (automate de Mealy)
fonction de sortie : E × S → O.
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
7
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
8
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Exemple (1/2)
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Exemple (2/2)
On considère des nombres à virgule, écrits en binaire, avec les
caractères {0, 1, •, t}.
Des nombres et leurs valeurs :
nombre
L’ensemble des caractères possibles est donc {0, 1, •, t}
• est la virgule, t est l’espace final.
valeur
t
011t
•1001t
101•01t
101100•01t
On se limite à des nombres avec au plus 4 chiffres avant la virgule
et 4 après.
Pour simplifier on supposera (dans un premier temps) qu’il n’y a
pas d’erreurs.
Carrier, Devismes (Grenoble I)
Automate avec actions à nombre fini d’états
Automates
Exemple
9 janvier 2015
10
Mise en œuvre logicielle
Evaluation des nombres à virgule
Carrier, Devismes (Grenoble I)
Automates
Automate avec actions à nombre fini d’états
Exemple
9 janvier 2015
Modélisation
On définit les variables suivantes :
L’algorithme permettant :
E est la valeur de la partie entière naturelle du nombre représenté.
la reconnaissance d’un nombre
D est la valeur de la partie naturelle après la virgule du nombre
représenté.
le calcul des valeurs E, D et N
est exprimé sous forme d’un automate avec actions.
Etats = {Ini , E0, E1, Poi , D1, D0, Fin}.
L’automate atteint les états :
N est le nombre de chiffres après la virgule du nombre représenté.
Exemple :
0110•1010t représente
E0 et E1 après avoir reconnu respectivement un 0 ou un 1 situé
avant le •
Erreurs :
Poi après avoir reconnu le •
On pourrait détecter des erreurs :
D0 et D1 après avoir reconnu respectivement un 0 ou un 1 situé
après le •
si E > 15 (il y aurait plus de 4 chiffres avant la virgule), ou
Des actions sont attachées aux états pour réaliser les calculs.
si N > 4.
Carrier, Devismes (Grenoble I)
11
Mise en œuvre logicielle
Automates
9 janvier 2015
12
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
13
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Modélisation : Graphe étiqueté
état de d épart
1
1
Poi
0
.
1
D0
0
’’
D1
0
1
E1
.
1
’’
E0
’’
1
(erreur)
Etat
Ini
E0
E1
Poi
D0
D1
Fin
’’
F IGURE: Automate évaluateur
Automates
Automate avec actions à nombre fini d’états
9 janvier 2015
Exemple
14
Mise en œuvre logicielle
Exemple
0
E0
E0
E0
D0
D0
D0
Fin
1
E1
E1
E1
D1
D1
D1
Fin
•
t
Poi
Poi
Poi
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Carrier, Devismes (Grenoble I)
Automate avec actions à nombre fini d’états
action
E ← 0, D ← 0, N ← 0
E ← 2×E
E ← 2×E +1
rien
D ← 2×D ; N ← N +1
D ← 2×D+1; N ← N +1
rendre la main
Automates
9 janvier 2015
Exemple
15
Mise en œuvre logicielle
En langage haut-niveau
Etat <- Ini
While (Etat <> Fin (et non Erreur s’il y a lieu)) do
switch Etat
case Ini:
E<-0; D<-0; N<-0
READ entree
switch entree
case ’0’: Etat<-E0
case ’1’: Etat<-E1
case ’.’: Etat<-Poi
case ’ ’: Etat<-Fin
(case default: Etat<-Erreur)
end switch
case E0:
...
...
end switch
done
Message de fin : Evaluation correct (ou incorrect s’il y a lieu)
Supposons que les symboles en entrée sont 101.110t.
Etat
Ini
E1
E0
E1
Poi
D1
D1
D0
Fin
Mise en œuvre logicielle
’’
Fin
Carrier, Devismes (Grenoble I)
symbole
Ini
E0
E1
Poi
D0
D1
Fin
0
.
0
Exemple
Table de transitions
Ini
0
Automate avec actions à nombre fini d’états
E
0
2×0+1 = 1
2×1 = 2
2×2+1 = 5
5
5
5
5
5
Carrier, Devismes (Grenoble I)
D
0
0
0
0
0
2×0+1 = 1
2×1+1 = 3
2×3 = 6
6
Automates
N
0
0
0
0
0
0+1 = 1
1+1 = 2
2+1 = 3
3
symbole lu
1
0
1
.
1
1
0
t
9 janvier 2015
16
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
18
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
En langage d’assemblage
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Contexte de mise en oeuvre : (1/4)
adresse 1000 : (etat Ini)
mettre 0 dans la case memoire representant la variable E
mettre 0 dans la case memoire representant la variable N
mettre 0 dans la case memoire representant la variable D
lire entree
comparer entree, symbole ’0’
branch 3000 (etat E0) si egal
...
comparer entree, symbole ’ ’
branch 8000 (etat Fin) si egal
...
adresse 3000 : (etat E0)
lire la case memoire representant la variable E
multiplier son contenu par 2
ecrire le resultat dans la case memoire representant la variable E
lire entree
comparer entree, symbole ’0’
branch 3000 (etat E0) si egal
...
comparer entree, symbole ’ ’
branch 8000 (etat Fin) si egal
...
adresse 8000 : (etat Fin)
afficher sortie
rendre la main...
Carrier, Devismes (Grenoble I)
Automate avec actions à nombre fini d’états
Automates
On travaille avec un processeur relié à de la mémoire.
Les adresses mémoires sont des mots de 16 bits. La mémoire est
organisée en octets.
Le processeur a 1 registre accumulateur Acc de taille 8 bits.
Il y a un registre d’état qui comporte un bit : Z. La comparaison de
l’accumulateur avec une valeur immédiate positionne le bit du mot
d’état.
Le compteur de programme (pc) repère l’instruction qui suit celle
qui est en cours d’exécution.
9 janvier 2015
Exemple
19
Mise en œuvre logicielle
Contexte de mise en oeuvre : (2/4)
Carrier, Devismes (Grenoble I)
Automates
Automate avec actions à nombre fini d’états
9 janvier 2015
Exemple
20
Mise en œuvre logicielle
Contexte de mise en oeuvre : (3/4)
Opérations sur l’accumulateur :
MEM
1 octet
load# charger l’accumulateur avec une valeur immédiate
0x0100
PROCESSEUR
load charger l’accumulateur avec un mot de la mémoire
PC
add# une valeur immédiate à l’accumulateur
lsl décaler le contenu de l’accumulateur d’1 position binaire à
gauche
peut être
adresse mémoire
− incrémenté de 1
− incrémenté d’une valeur
MA
codée sur 8 bits
− forcé à une adresse
registre instruction
0x0900
0x8000
0x8001
0x8002
registre d’etat
store ranger le contenu de l’accumulateur dans la mémoire
ACC
Deux types d’instructions de rupture de séquence :
peut être :
− incrémenté
− décalé
− remis à zéro
− comparé à un mot de 8 bits
Z
donnée mémoire
interface
8
branchement inconditionnel : jmp
branchement absolu, opérande = adresse sur 16 bits
Automates
0xc000
MB
branchement conditionnel : bne ou beq
branchement relatif, opérande = déplacement sur 8 bits
Carrier, Devismes (Grenoble I)
programme
16
clavier
9 janvier 2015
21
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
22
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Le code opération est toujours sur 1 octet (le premier), l’opérande quand elle existe est sur 1
octet (vi, depl) ou 2 octets (adr, le premier représente les poids forts de l’adresse).
signification
load adr
load# vi
store adr
add# vi
lsl
cmp vi
beq depl
bne depl
jmp adr
Acc <-- Mem[adr]
Acc <-- vi
Mem[adr] <-- Acc
Acc <-- Acc + vi
Acc <-- Acc * 2
Acc - vi
si Z=1 pc <-- pc + depl
si Z=0 pc <-- pc + depl
pc <-- adr
codage
3 octets
2 octets
3 octets
2 octets
1 octet
2 octets
2 octets
2 octets
3 octets
0100
...
0123
0200
...
0223
0300
...
0311
0400
...
???
0500
...
???
0800
...
???
0900
...
0902
On range les valeurs E, D et N aux adresses 0x8000, 0x8001 et 0x8002.
Le système donne la main à notre programme qui débute à l’adresse 0x0100.
Automate avec actions à nombre fini d’états
Automates
Exemple
Mise en œuvre logicielle
Le code de chaque état est installé en mémoire à une adresse différente pour chaque état. Le
passage d’un état à un autre est fait par une rupture de séquence. On suppose qu’on implante le
code des états Ini, E0, E1, D0, D1, Poi et Fin aux adresses 100, 200, 300, 400, 500, 800 et 900.
On convient que la lecture à l’adresse 0xC000 fournit un octet qui est le code ASCII du
caractère courant.
Carrier, Devismes (Grenoble I)
Exemple
Dans un langage d’assemblage particulier : schéma de
solution
Contexte de mise en oeuvre : (4/4)
instruction
Automate avec actions à nombre fini d’états
9 janvier 2015
23
Mise en œuvre logicielle
etat Ini
...
fin de etat Ini
etat E0
fin de etat E0
etat E1
fin de etat E1
etat D0
fin de etat D0
etat D1
fin de etat D1
Poi
fin de Poi
Fin
fin de Fin
Carrier, Devismes (Grenoble I)
Automate avec actions à nombre fini d’états
Automates
Exemple
9 janvier 2015
24
Mise en œuvre logicielle
Dans un langage d’assemblage particulier : solution (Pour
D0)
Dans un langage d’assemblage particulier : exercice
Ecrire les parties de programmes correspondants aux états :
Poi, D0 et D1.
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
25
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
26
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
Sujet de réflexion
Automate avec actions à nombre fini d’états
Exemple
Mise en œuvre logicielle
En ARM (1/3)
1
Que faudrait-il modifier si on ajoutait un état d’erreur ? Indiquer
les modifications de l’automate et du programme.
2
Indiquer comment on pourrait modifier l’automate pour n’accepter
que des octets avec 4 bits avant le • et 4 bits après.
.data
E:
D:
N:
.word 0
.word 0
.word 0
.bss
C:
.word
Pour la lecture d’un caractère
.text
.global main
main :
...
bal exit
ptrE :
ptrD :
ptrN :
ptrC :
Carrier, Devismes (Grenoble I)
Automates
Automate avec actions à nombre fini d’états
Exemple
9 janvier 2015
27
Mise en œuvre logicielle
En ARM (2/3)
.word E
.word D
.word N
.word C
Carrier, Devismes (Grenoble I)
Automates
Automate avec actions à nombre fini d’états
Exemple
9 janvier 2015
28
Mise en œuvre logicielle
En ARM (3/3)
main :
E0 :
ini :
ldr r0,ptrE
ldr r1,[r0]
@ lecture E
mov r1,r1,lsl #1
str r1,[r0]
@Ex2
@ écriture de E
ldr r1,ptrC
bl LireCar
ldrb r0,[r1]
@ adresse où écrire
@ lit un caractère et l’écrit à l’adresse précédente
@ récupère le caractère lu dans r0
...
E0 :
...
E1 :
...
Poi :
@ test
cmp r0,#48
beq E0
cmp r0,#49
beq E1
cmp r0,#46
beq Poi
bal FIN
...
D0 :
...
D1 :
...
@ ou #’0’
@ ou #’1’
@ ou #’.’
FIN :
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
29
Carrier, Devismes (Grenoble I)
Automates
9 janvier 2015
30
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Plan
Programmation des appels de procédure et fonction
Première séance
Fabienne Carrier
9 janvier 2015
Introduction-Vocabulaire
Fonctions et procédures
Codage en ARM
Introduction-Vocabulaire
2
Codage en ARM
3
Problématique de l’appel et du retour
4
Problèmes
Stéphane Devismes
Université Joseph Fourier, Grenoble I
Carrier, Devismes (Grenoble I)
1
9 janvier 2015
Problématique de l’appel et du retour
1
Problèmes
Un exemple en langage de haut niveau (1 /2)
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
2
Problèmes
Un exemple en langage de haut niveau (2 /2)
Il y a deux appels à la fonction PP
int PP(int x) {
int z, p;
z = x + 1;
p = z + 2;
return (p);
}
Le main, nommé appelant fait
appel à la fonction PP, nommée
appelée
main()
int i,
i =
j =
j =
k =
}
La fonction PP calcule une valeur
de type entier, le résultat de la
fonction
La fonction PP a un paramètre
qui constitue une donnée, on
parle de paramètre formel
{
j, k;
0;
i + 3;
PP(i + 1);
PP(2 * (i + 5));
Carrier, Devismes (Grenoble I)
int PP(int x) {
int z, p;
z = x + 1;
p = z + 2;
return (p);
}
main()
int i,
i =
j =
j =
k =
}
Les variables z et p sont
appelées variables locales à la
fonction PP
Fonctions et procédures
9 janvier 2015
4
Lors de l’appel PP(i + 1), la
valeur de l’expression i+1 est
passée à la fonction, c’est le
paramètre effectif que l’on
appelle aussi argument
Après l’appel le résultat de la
fonction est rangé dans la
variable j : j = PP(i+1)
{
j, k;
0;
i + 3;
PP(i + 1);
PP(2 * (i + 5));
Carrier, Devismes (Grenoble I)
Le 1er appel revient à exécuter le
corps de la fonction en
remplaçant x par i+1 ; le 2ème
appel consiste en l’exécution du
corps de la fonction en
remplaçant x par 2*(i+5)
Fonctions et procédures
9 janvier 2015
5
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Utilisation de registres
Introduction-Vocabulaire
retourner
On fait un choix (pour l’instant complètement arbitraire) :
@i ←0
@ j ← i +3
@ —–Début-1er-appel—–
@ x ← i +1
appeler PP
@ j ← ...
@ —–Fin-1er-appel—–
@ —–Début-2ème-appel—–
@ r7 ← i + 5
@ x ← 2 ∗ r7
appeler PP
@ k ← ...
@ —–Fin-2ème-appel—–
main :
i,j,k dans r 0,r 1,r 2
z dans r 3, p dans r 4
la valeur x dans r 5
le résultat de la fonction dans r 6
si on a besoin d’un registre pour faire des calculs on utilisera r 7
Remarque :
Une fois, ces conventions fixées, on peut écrire le code de la fonction
indépendemment du code correspondant à l’appel.
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
7
Problèmes
Quel est le problème ?
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
Problème :
appeler et retourner ?
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
8
Problèmes
Adresse de retour
Appel = branchement
instruction de rupture de séquence inconditionnelle (BAL) ?
Il existe une instruction de rupture de séquence particulière qui permet
au processeur de garder l’adresse de l’instruction qui suit le
branchement avant qu’il ne réalise le branchement
i.e., avant qu’il ne transfère le contrôle.
MAIS Comment revenir ensuite ?
Cette adresse est appelée adresse de retour.
Le problème du retour : comment à la fin de l’exécution du corps de
la fonction, indiquer au processeur l’adresse à laquelle il doit se
brancher ?
Carrier, Devismes (Grenoble I)
Problèmes
@ z ← x +1
@ p ← z +2
@ rendre p
PP :
Dans un premier temps, utilisons des registres.
Introduction-Vocabulaire
Problématique de l’appel et du retour
Code en langage d’assemblage
Chaque valeur représentée par une variable ou un paramètre doit être rangée
quelque part en mémoire : mémoire centrale ou registres.
Carrier, Devismes (Grenoble I)
Codage en ARM
Fonctions et procédures
9 janvier 2015
10
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
11
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Où est gardée cette adresse ?
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Rappel
Dans le processeur ARM, l’instruction BL réalise un branchement
inconditionnel avec sauvegarde de l’adresse de retour dans le
registre nommé lr (i.e., r14).
On a déjà utilisé l’instruction BL en Travaux Pratiques :
MOV r 1, #12
BL EcrHexa32
BL signifie branch and link
Attention : BL n’a rien à voir avec BAL
Attention : il ne faut pas modifier le registre lr pendant l’exécution de
la fonction.
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
12
Problèmes
Codage complet de l’exemple
add r 3, r 5, #1
add r 4, r 3, #2
mov r 6, r 4
@ z ← x +1
@ p ← z +2
@ rendre p
retour
main :
mov r 0, #0
add r 1, r 0, #3
@i ←0
@ j ← i +3
mov r 1, r 6
Introduction-Vocabulaire
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
13
Problèmes
Exercice
PP :
@ —–Début-1er-appel—–
add r 5, r 0, #1
Carrier, Devismes (Grenoble I)
En supposant que la fonction PP est stockée à partir de l’adresse
0x8000 (hexadécimal) et que la fonction main est stockée
immédiatement après la fonction PP.
@ x ← i +1
appel
@ j ← PP(x )
Donnez la valeur du registre lr à chacun des deux appels de PP.
—–Fin-1er-appel—–
@
@ —–Début-2ème-appel—–
add r 7, r 0, #5
mov r 5, r 7, lsl #1
mov r 2, r 6
@ —–Fin-2ème-appel—–
Carrier, Devismes (Grenoble I)
@ r7 ← i + 5
@ x ← 2 ∗ r7
appel
@ k ← PP(x )
Fonctions et procédures
9 janvier 2015
14
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
15
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Solution
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Valeurs temporaires-problème de cohérence
PP :
add r 3, r 5, #1
add r 4, r 3, #2
mov r 6, r 4
mov pc, lr
main :
mov r 0, #0
add r 1, r 0, #3
add r 5, r 0, #1
bl PP
mov r 1, r 6
add r 7, r 0, #5
mov r 5, r 7, lsl #1
bl PP
mov r 2, r 6
Supposons que dans la fonction PP on ait un calcul compliqué à faire
et que l’on utilise pour cela le registre r 7.
PP : . . .
modifie r 7
...
Supposons qu’après l’appel k= PP(2 * (i + 5)) on ait besoin de la
valeur i+5 et qu’on veuille la prendre dans r 7 . . .
main :
...
@ r7 ← i + 5
@ r5 ← 2 ∗ r7
@ modification de r 7
add r 7, r 0, #5
mov r 5, r 7, lsl #1
bl PP
mov r 2, r 6
...
utilisation de r 7 qui contient i + 5
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
Problèmes
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
16
Problèmes
Conclusion
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
@ c’est incorrect ! ! !
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
17
Problèmes
Problèmes à résoudre
1
Appels en cascade
2
Gestion de la récursivité
3
Gestion des variables et paramètres
les paramètres données, le résultat, les variables locales, les
variables temporaires
4
Passage de paramètre (par adresse ou par valeur)
Paramètres : il faut une zone de stockage commune à l’appelant et à l’appelé
L’appelant y range les valeurs avant l’appel et l’appelé y prend ces valeurs et
les utilise
Variables locales : il faut une zone de mémoire privée pour chaque procédure
pour y stocker ses variables locales : il ne faut pas que cette zone interfère les
variables globales ou locales à l’appelant
Variables temporaires : ne doivent pas interférer avec les autres variables
Généralisation : Il faut que la méthode choisie soit généralisable afin de pouvoir
générer du code
Remarque : on a généralement peu de registre à notre disposition
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Point important : Les solutions proposées doivent être systématiques
dans le sens où ce sont celles qui permettent à un compilateur de
générer automatiquement le code assembleur des fonctions
9 janvier 2015
18
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
20
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Un premier problème : appels en cascade
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Conclusion : appels en cascade
Un programme appelle une procédure P qui elle-même appelle une
procédure Q
programme
α
...
...
appel P
...
...
...
procédure P
β
...
...
appel Q
...
...
retour
procédure Q
Stockage de l’adresse de retour
...
...
...
retour
On ne peut pas travailler avec un seul registre pour sauvegarder les
différentes adresses de retour.
Il faut sauvegarder une adresse pour chacun des différents appels.
Problème
Lors de l’appel de P, l’adresse α est rangée dans lr et lors de l’appel de Q,
l’adresse β est rangée aussi dans lr et écrase la valeur précédemment
sauvegardée.
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
21
Problèmes
Un deuxième problème : fonctions récursives (1/2)
Carrier, Devismes (Grenoble I)
Introduction-Vocabulaire
Fonctions et procédures
Codage en ARM
9 janvier 2015
Problématique de l’appel et du retour
22
Problèmes
Fonctions récursives (2/2)
Même chose avec les variables locales !
Supposons que x est stocké dans r 0 et
le résultat de la fonction fact dans r 1
int fact (int x) {
if (x==0) then return 1
else return x * fact(x-1);
int fact (int x) {
int loc;
if x==0
loc = 1;
else {
loc = fact (x-1);
loc = x * loc;
};
return loc;
}
Considérons l’appel fact(3)
fact(3)
// appel principal
int n, y;
.... lecture d’un entier dans n
y = fact(n);
.... utilisation de la valeur de y
Carrier, Devismes (Grenoble I)
r0 ← 3
fact(2)
r0 ← 2
On a perdu la valeur 3
Fonctions et procédures
9 janvier 2015
22
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
22
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Conclusion : fonctions récursives
Introduction-Vocabulaire
Codage en ARM
Problématique de l’appel et du retour
Problèmes
Solutions
Conclusion 1
On ne peut pas travailler avec une seule zone de paramètres, il en faut
une pour chaque appel et pas pour chaque fonction.
Les paramètres effectifs (ou arguments) sont attachés à l’appel
d’une fonction et pas à l’objet fonction lui-même
Solution au prochain cours !
Conclusion 2
On ne peut pas travailler avec une seule zone pour les variables
locales, il en faut une pour chaque appel et pas pour chaque fonction.
Les variables locales sont attachées à l’appel d’une fonction et
pas à l’objet fonction lui-même
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
23
Gestion des variables et paramètres
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
24
Gestion des variables et paramètres
Plan
Programmation des appels de procédure et fonction
Deuxième séance
Fabienne Carrier
1
Problème du retour
2
Gestion des variables et paramètres
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
1
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
2
Problème du retour
Gestion des variables et paramètres
Appels en cascade : un exemple
Problème du retour
Gestion des variables et paramètres
Exécutions possibles
X est faux
A1 A2 ( B1 B2 B3 ) A3 ( C1 ( B1 B2 B3 ) C2 C3 C4 ) A4
Soit Ai , Bi , Ci des instructions élémentaires
Soit A, B, C des procédures, A étant la principale
X est vrai la première fois puis faux
A1 A2 (B1 B2 B3) A3 ( C1 (B1 B2 B3) C2
( C1 (B1 B2 B3) C2 C3 C4 ) C3 C4 ) A4
Soit X une expression booléenne
Considérons le programme suivant :
procédure A
A1
A2
B
A3
C
A4
procédure B
B1
B2
B3
procédure C
C1
B
C2
si X alors C
C3
C4
X est vrai deux fois de suite puis faux
A1 A2 (B1 B2 B3) A3 (C1 (B1 B2 B3) C2
( C1 (B1 B2 B3) C2 ( C1 (B1 B2 B3) C2 C3 C4 )
C3 C4 ) C3 C4 ) A4
Problème : Comment mettre en place de tels enchaı̂nements en
langage machine ?
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
4
Gestion des variables et paramètres
Solution partielle
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
5
Gestion des variables et paramètres
Notion de pile
En ARM, l’adresse de retour est sauvegardée dans le registre lr.
Pour résoudre le problème précédent, il faut plusieurs registres ou
cases mémoire.
Problèmes :
Le nombre de registres disponibles est limité.
Le nombre de places nécessaires n’est pas connu à l’avance.
Remarque : Une pile est un mécanisme dit LIFO : Last In First Out
(Dernier entré, premier sorti)
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
6
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
7
Problème du retour
Gestion des variables et paramètres
Mécanisme de pile
Problème du retour
Gestion des variables et paramètres
Comment réaliser une pile ? (1 /3)
Une zone de mémoire,
Notion de tête de pile : dernier élément entré
L’élément en tête de pile est appelé sommet.
Un repère sur la tête de la pile
SP : pointeur de pile, stack pointer
Deux choix indépendants :
Deux opérations possibles :
Comment progresse la pile : le sommet est en direction des
adresses croissantes (ascending) ou décroissantes
(descending)
Le pointeur de pile pointe vers une case vide (empty) ou pleine
(full)
Dépiler : suppression de l’élément en tête de la pile
Empiler : ajout d’un élément en tête de la pile
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
Problème du retour
8
Gestion des variables et paramètres
Comment réaliser une pile ? (2 /3)
Carrier, Devismes (Grenoble I)
Fonctions et procédures
dépiler reg
Comment réaliser une pile ? (3 /3)
Mem
Mem
0
0
sommet de pile
croissant
croissant
décroissant
décroissant
1er vide
Mem[sp]←reg
sp←sp+1
sp←sp-1
reg←Mem[sp]
derer plein
sp←sp+1
Mem[sp]←reg
reg←Mem[sp]
sp←sp-1
1er vide
Mem[sp]←reg
sp←sp-1
sp←sp+1
reg←Mem[sp]
derer plein
sp ←sp-1
Mem[sp]←reg
reg←Mem[sp]
sp←sp+1
avant
Fonctions et procédures
9 janvier 2015
après
SP
SP
max
Remarque : Il existe des instructions ARM dédiées à l’utilisation de la
pile (exemple : pour la gestion full descending on utilise STMFD pour
empiler et LDMFD pour dépiler)
Carrier, Devismes (Grenoble I)
9
Gestion des variables et paramètres
Mem désigne la mémoire
sp désigne le pointeur de pile
reg désigne un registre quelconque
sens
évolution
repère
empiler reg
9 janvier 2015
Problème du retour
max
empiler
10
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
11
Problème du retour
Gestion des variables et paramètres
Appel/retour : utilisation d’une pile
Problème du retour
Gestion des variables et paramètres
Application sur l’exemple
La taille de codage d’une instruction est supposée être égale à 1
Appel de procédure, deux actions exécutées par le processeur :
10
11
12
13
14
15
sauvegarde de l’adresse de retour dans une pile
c’est-à-dire empiler la valeur PC + taille
modification du compteur programme (rupture de séquence)
c’est-à-dire PC ← adresse de la procédure
A1
A2
empiler 13 ; sauter à 20 (B)
A3
Fonctions et procédures
30
31
32
33
34
35
36
9 janvier 2015
12
Gestion des variables et paramètres
Trace d’exécution
Carrier, Devismes (Grenoble I)
retour: dépiler PC
A4
Remarque : Ce n’est pas la solution utilisée par le processeur ARM.
Problème du retour
B1
B2
B3
empiler 15 ; sauter à 30 (C)
Au retour, PC prend pour valeur l’adresse en sommet de pile puis le
sommet est dépilé : PC ← depiler().
Carrier, Devismes (Grenoble I)
20
21
22
23
Carrier, Devismes (Grenoble I)
C1
empiler 32; sauter à 20 (B)
C2
si X alors empiler 34 ; sauter à 30
C3
C4
retour: dépiler PC
Fonctions et procédures
Problème du retour
9 janvier 2015
13
Gestion des variables et paramètres
Trace d’exécution
Fonctions et procédures
9 janvier 2015
14
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
15
Problème du retour
Gestion des variables et paramètres
Appel/retour : solution utilisée avec le processeur ARM
C’est le programmeur qui doit gérer les sauvegardes dans la pile !
si nécessaire . . .
Fonctions et procédures
Problème du retour
9 janvier 2015
Gestion des variables et paramètres
Application à l’exemple
Lors de l’appel, l’instruction BL réalise un branchement inconditionnel
avec sauvegarde de l’adresse de retour dans le registre nommé lr
(i.e., r14).
Carrier, Devismes (Grenoble I)
Problème du retour
16
Gestion des variables et paramètres
Remarque
10
11
12
13
14
15
A1
A2
bl B
A3
bl C
A5
20.0
20.1
21
22
23.0
23.1
empiler lr
30.0
30.1
31
32
empiler lr
36.0
36.1
dépiler vers lr
mov pc, lr
= (sauver 13 dans lr ; sauter à 20.0)
= (sauver 15 dans lr ; sauter à 30.0)
B1
B2
B3
depiler dans lr
mov pc, lr
C1
bl B
..
...
Carrier, Devismes (Grenoble I)
(restaure lr dans le compteur programme)
= (sauver 32 dans lr ; sauter à 20.0)
(restaure lr dans le compteur programme)
Fonctions et procédures
Problème du retour
9 janvier 2015
17
Gestion des variables et paramètres
Gestion des variables, des paramètres : généralisation
Lorsqu’une procédure n’en appelle pas d’autres,
on parle de procédure feuille
la sauvegarde dans la pile n’est pas nécessaire.
La gestion des appels en cascade nous a montré que les adresses de
retour nécessitent une gestion en pile C’est le cas de la procédure B dans l’exemple.
En fait, c’est le fonctionnement général des appels de procédure qui a
cette structure : chaque variable locale et/ou paramètre est rangé
dans la pile et la case mémoire associée est repérée par son adresse.
20
21
22
23
Carrier, Devismes (Grenoble I)
B1
B2
B3
mov pc, lr
Fonctions et procédures
9 janvier 2015
18
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
20
Problème du retour
Gestion des variables et paramètres
Exemple
Problème du retour
Gestion des variables et paramètres
Flot d’exécution en partant de A
procedure A {procedure principale, sans parametre}
var u : entier
u=2; B(u+3); u=5+u; B(u)
procedure B(donnee x : entier)
var s, v : entier
s=x+4 ; C(s+1); v=2; C(s+v)
procedure C(donnee y : entier)
var t : entier
t=5; ecrire(t*4); t=t+1
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
21
Gestion des variables et paramètres
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
22
Gestion des variables et paramètres
Organisation des informations dans la pile lors de l’exécution
d’une procédure
Remarques
Dans l’exemple précédent, nous observons une gestion des zones de
mémoire nécessaires pour les paramètres et les variables en pile !
L’approche est identique pour tout : résultats de fonction, paramètres,
etc.
variables locales
sens
evolution
de la pile
Et il faut, dans la même pile, sauvegarder les adresses de retour
(cf. problème des appels en cascade)
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
adresse de retour
parametres
et
valeur de retour
de fonction
23
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
24
Problème du retour
Gestion des variables et paramètres
Organisation du code
appelant P :
préparer les paramètres
BL Q
libérer la place allouée aux
paramètres
Carrier, Devismes (Grenoble I)
Problème du retour
Gestion des variables et paramètres
Comment accéder aux variables locales et aux paramètres ?
On pourrait utiliser le pointeur de pile SP :
accès indirect avec déplacement : [SP , ]dpl ]
dpl >= 0
appelé Q :
sauver l’adresse de retour
allouer la place pour les variables
locales
corps de la fonction
libérer la place réservée pour les
variables locales
récupérer adresse de retour
retour
Fonctions et procédures
Problème du retour
9 janvier 2015
Mais si on utilise la pile, par exemple pour sauvegarder la valeur d’un
registre que l’on souhaite utiliser, il faut re-calculer les déplacements.
Pas pratique !
Pose des problèmes de généralisation
25
Gestion des variables et paramètres
Accès aux variables et paramètres : frame pointer (1/2)
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
26
Gestion des variables et paramètres
Accès aux variables et paramètres : frame pointer (2/2)
Utiliser un repère sur l’environnement courant (paramètres et variables
locales) qui reste fixe pendant toute la durée d’exécution de la
procédure.
variables locales
Ce repère est traditionnellement appelé frame pointer en compilation
FP
Accès à un paramètre :
[fp, ]dpl param]
dpl param > 0
Accès à une variable locale :
[fp, ]dpl varloc ]
dpl varloc < 0
adresse de retour
Un registre frame pointer existe dans la plupart des architectures de
processeur : il est noté fp dans le processeur ARM.
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
parametres
et
valeur de retour
de fonction
27
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
28
Problème du retour
Gestion des variables et paramètres
Organisation du code en utilisant le registre frame pointer
Problème du retour
Gestion des variables et paramètres
Organisation de la pile lors de l’exécution avec frame pointer
Comme pour le registre mémorisant l’adresse de retour, le registre fp
doit être sauvegardé avant d’être utilisé.
appelant P :
préparer les paramètres
BL Q
libérer la place allouée aux
paramètres
Carrier, Devismes (Grenoble I)
appelé Q :
sauver l’adresse de retour
sauver l’ancienne valeur de fp
placer fp pour repérer les nouvelles
variables
allouer la place pour les variables locales
corps de la fonction
libérer la place réservée pour les variables
locales
restaurer fp
récupérer adresse de retour
retour
Fonctions et procédures
Problème du retour
9 janvier 2015
var loc
FP
paramètres
D’où si les adresses sont sur 4 octets :
Accès aux variables locales :
adresse de la forme fp − 4 − déplacement
Accès aux paramètres :
adresse de la forme fp +8+ déplacement
29
Gestion des variables et paramètres
En ARM : code de B
B:
@ sauvegarde adresse retour
sub sp, sp, #4
str lr, [sp]
@ sauvegarde ancien fp
sub sp,sp,#4
str fp,[sp]
@ mise en place nouveau fp
mov fp,sp
@ reservation variables locales s,v
sub sp,sp,#8
@ s <- x+4
ldr r1, [fp,#+8]
add r1,r1,#4
str r1,[fp,#-4]
@ passage de s+1 en parametre de C
ldr r1, [fp,#-4]
add r1,r1,#1
sub sp,sp,#4
str r1,[sp]
bl C @ appel C
Carrier, Devismes (Grenoble I)
ancien fp
adresse ret
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème du retour
9 janvier 2015
30
Gestion des variables et paramètres
Exercice
add sp,sp,#4 @ depile le parametre
@ v<-2
mov r1,#2
str r1,[fp,#-8]
@ passe de s+v en parametre de C
ldr r1, [fp,#-4]
ldr r2, [fp,#-8]
add r1,r1,r2
sub sp,sp,#4
str r1,[sp]
Ecrire en ARM le code des procédures A et C
Montrer l’évolution de la pile, pc, sp, fp, r 1, r 2 au cours de
l’exécution du programme proposé.
bl C @ appel C
add sp,sp,#4 @ depile parametre
add sp,sp,#8 @ depile s,v
@ retour a l’ancien fp
ldr fp,[sp]
add sp,sp,#4
@ recuperation adresse retour
ldr lr, [sp]
add sp,sp,#4
mov pc,lr @ retour
Fonctions et procédures
9 janvier 2015
31
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
32
Problème du retour
Gestion des variables et paramètres
Solution : code de A
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
Problème du retour
Gestion des variables et paramètres
Solution : code de C
Fonctions et procédures
Problème des variables temporaires
33
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
9 janvier 2015
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
9 janvier 2015
34
Passage de paramètre par adresse
Plan
Programmation des appels de procédure et fonction
Troisième séance
Fabienne Carrier
Stéphane Devismes
1
Gestion du résultat de fonction
2
Problème des variables temporaires
3
Passage de paramètre par adresse
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
1
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
2
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Rappel : les paramètres données
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Résultat d’une fonction
Les valeurs des paramètres effectifs sont calculées avant l’appel
C’est la procédure appelante qui connait les informations.
Deux étapes avant l’appel :
1
Le résultat d’une fonction est calculé par l’appelée
2
Le résultat doit être rangé à un emplacement accessible par
l’appelante de façon à ce que cette dernière puisse le récupérer.
Il faut donc utiliser une zone mémoire commune à l’appelante et
l’appelée.
Evaluation des paramètres,
Stockage des valeurs des paramètres dans la pile.
Par l’exemple, la pile.
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
4
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
Gestion du résultat de fonction
9 janvier 2015
Résultat dans la pile (1/3)
Fonctions et procédures
Problème des variables temporaires
9 janvier 2015
5
Passage de paramètre par adresse
Résultat dans la pile (2/3)
Avant l’appel d’une fonction qui a deux paramètres données
Les valeurs des deux paramètres sont empilés
1
avant l’appel, L’appelant réserve une place pour le résultat dans
la pile
2
L’appelée rangera son résultat dans cette case dont le contenu
sera récupéré par l’appelant après le retour
Une case est réservée pour le résultat de la fonction
SP
adresse retour
Une place pour le résultat de la fonction
paramètre donnée
paramètre donnée
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
6
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
7
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Gestion du résultat de fonction
Problème des variables temporaires
Structure du code de l’appel de la fonction et du corps de la
fonction
Résultat dans la pile (3/3)
Lors de l’exécution du corps de la fonction.
1
Les variables locales sont accessibles par une adresse de la forme :
fp − depl avec depl ≥ 4,
2
Les paramètres données par les adresses : fp + 8 + 4 et fp + 8 + 8 et
3
La case résultat par l’adresse fp + 8.
appelant P :
empiler les paramètres
réserver une place dans la pile pour le
résultat
appelée Q :
sauver l’adresse de retour
sauver l’ancienne valeur de fp
placer fp pour repérer les nouvelles variables
allouer la place pour les variables locales
corps de la fonction
le résultat est rangé en fp+8
libérer la place réservée pour les variables
locales
restaurer fp
récupérer adresse de retour
retour
BL Q
SP
FP
récupérer le résultat
libérer la place allouée aux paramètres
et au résultat
var locale
ancien fp
adresse retour
Une place pour le résultat de la fonction
paramètre donnée
paramètre donnée
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
Passage de paramètre par adresse
8
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
9 janvier 2015
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
9 janvier 2015
9
Passage de paramètre par adresse
Application : état de la pile lors de l’exécution du corps de
fact
Application : codage de la fonction factorielle
int fact (int x) {
if (x==0) then return 1
else return x * fact(x-1);}
fp(fact)
fp(main)
adresse retour
Case pour le résultat de la fonction
param x
y
n
main(){
int n, y;
...
y = fact(n);
...
}
Carrier, Devismes (Grenoble I)
fp(main)
Remarque : Dans cet exemple comme il n’y a pas de variables locales
on pourrait se passer de mettre en place fp pour la fonction appelée.
On l’a tout de même utilisé de façon à adresser les paramètres
toujours de la même façon.
Fonctions et procédures
9 janvier 2015
10
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
11
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Application : la fonction main
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Application : la fonction fact
@ empiler x-1
fact:
main:
@ empiler lr
@ place pour resultat
@ r1 ← n
...
@ sequence d’appel de fact(n)
@ empiler la valeur de n, parametre donnee
bl fact
@ sauvegarde ancien fp et place fp(fact)
@ recuperer le resultat de l’appel r1=fact(x-1)
@ liberation parametre et resultat
@ recuperer la valeur du parametre x : r0=x
alors:
@ r1 = x-1
sub r 1, r 0, #1
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
12
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
Gestion du résultat de fonction
9 janvier 2015
@ r0 * r1 = x * fact(x-1)
mul r 3, r 0, r 1
@ ranger le resultat
@ ranger le resultat (1)
mov r 1, #1
@ appel
bal fsi
@ recuperation du resultat dans r1
sinon:
@ r0 contient x
@ on range le resultat dans y
@ appel de fact(x-1)
@ preparer parametre et resultat
@ on recupere la place allouee au resultat et au parametre
bl fact
@ r0=x
cmp r 0, #0
bne sinon
@ reserver la place pour le resultat de fact
fsi:
@ recuperer fp
@ retour
Fonctions et procédures
Problème des variables temporaires
9 janvier 2015
13
Passage de paramètre par adresse
Application : codage d’une fonction factorielle avec des
variables locales
Exercice
int fact (int x) {
int loc, r;
if x==0 { r = 1; }
else {
loc = fact (x-1); r = x * loc; }
return r;
}
Dérouler l’exécution avec n = 3 en dessinant les différents états de la
pile, c’est-à-dire la zone de mémoire repérée par sp.
main () {
int n, y;
...
y = fact(n);
...
}
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
14
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
15
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Etat de la pile lors de l’exécution du corps de factorielle juste
après l’appel dans main
Gestion du résultat de fonction
Problème des variables temporaires
Nouvelle version de la fonction fact
@ empiler adr retour
fact:
@ case resultat
@ appel
@ recuperer resultat
@ desallouer param et res
@ mise en place fp
@ place pour loc et r
Case pour r
sp
@ apres l’appel
@ loc=fact(x-1)
@ r0=x
@ r1=loc
@ x*loc
@ r=x*loc
@ if x==0 ...
Case pour loc
fp
@ r0=x
ancien fp
adresse retour
finsi:
@ return r
alors:
Case pour le résultat
Passage de paramètre par adresse
@r=1
@ recuperer place var loc
param x
sinon:
@ recuperer fp
@ appel fact(x-1)
@ preparer param et resultat
@ retour
@ r0=x
@ r1=x-1
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
16
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
Gestion du résultat de fonction
9 janvier 2015
Méthode
9 janvier 2015
17
Passage de paramètre par adresse
Application à l’exemple de la fonction fact
Problème :
Le code de la fonction fact utilise les registres r0, r1, r2.
Les registres utilisés par une procédure ou une fonction pour des
calculs intermédiaires locaux sont modifiés
fact:
Or il serait sain de les retrouver inchangés après un appel de
procédure ou fonction
@ empiler adr retour
sub sp, sp, #4
str lr , [sp]
@ mise en place fp et allocation loc et r
sub sp, sp, #4
str fp, [sp]
mov fp, sp
sub sp, sp, #8
@ sauvegarde de r0, r1, et r2 (empiler)
Solution :
Sauvegarder les registres utilisés : r0, r1, r2... dans la pile.
Et cela doit être fait avant de les modifier donc en tout début du
code de la procédure ou fonction.
Carrier, Devismes (Grenoble I)
Fonctions et procédures
Problème des variables temporaires
Fonctions et procédures
9 janvier 2015
@ if x==0 ...
...
19
Carrier, Devismes (Grenoble I)
@ restaurer les registres r0, r1, r2 (depiler)
@ desallouer var locales
add sp, sp, #8
ldr fp, [sp] @ ancien fp
add sp, sp, #4
@ depiler adr retour dans lr
ldr lr , [sp]
add sp, sp, #4
mov pc, lr @ retour
Fonctions et procédures
9 janvier 2015
20
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Vocabulaire
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Notations
On se place maintenant dans le cas d’une procédure ayant des paramètres de type donnée et
des paramètres de type résultat.
Il existe différentes façons de gérer le paramètre z. Nous n’en étudions
qu’une seule : la méthode dite du passage par adresse.
procedure XX (donnees x, y : entier; resultat z : entier)
u,v : entier
...
u=x;
v=y+2;
...
z=u+v;
...
Nous utilisons la notation suivante :
procedure XX (donnees x, y : entier; adresse z : entier)
u,v : entier
...
u=x;
v=y+2;
...
mem[z]=u+v;
...
Les paramètres données ne doivent pas être modifiés par l’exécution de la
procédure : les paramètres effectifs associés à x et y sont des expressions qui sont
évaluées avant l’appel, les valeurs étant substituées aux paramètres formels lors de
l’exécution du corps de la procédure.
@ mem[z] designe le contenu de la memoire d’adresse z
Le paramètre effectif associé au paramètre formel résultat est une variable dont la valeur
n’est significative qu’après l’appel de la procédure ; cette valeur est calculée dans le
corps de la procédure et affectée à la variable passée en argument.
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
Fonctions et procédures
Problème des variables temporaires
22
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
Gestion du résultat de fonction
9 janvier 2015
Fonctions et procédures
9 janvier 2015
Problème des variables temporaires
23
Passage de paramètre par adresse
Solution : état de la pile lors de l’exécution de la procédure
L’exemple d’appel traité
XX
a,b,c : entier
sp
b=3;
....
XX (b, 7, adresse de c);
Carrier, Devismes (Grenoble I)
Fonctions et procédures
fp
9 janvier 2015
24
Carrier, Devismes (Grenoble I)
v
u
ancien fp
adresse retour
adresse de c
7
b
Fonctions et procédures
z
y
x
9 janvier 2015
25
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Problème des variables temporaires
Passage de paramètre par adresse
Procédure XX
main
XX:
.bss
a:
b:
c:
Gestion du résultat de fonction
.skip 4
.skip 4
.skip 4
...
@u←x
.text
main:
...
@ v ← y +2
...
@ r 0 ← valeur de b
ptr a:
ptr b:
ptr c:
@ empiler b
@ r0 ← 7
bl XX
...
@ empiler 7
@ calcul de u + v
@ r 0 ← adresse de c
@ r 2 ← z, i.e., adresse c
@ mem[z ] ← u + v , i.e., mem[adresse c ] ← u + v
@ empiler adresse de c
...
Carrier, Devismes (Grenoble I)
Gestion du résultat de fonction
bal exit
.word a
.word b
.word c
Fonctions et procédures
Problème des variables temporaires
...
26
Carrier, Devismes (Grenoble I)
Passage de paramètre par adresse
9 janvier 2015
Gestion du résultat de fonction
Exercice
Fonctions et procédures
Problème des variables temporaires
9 janvier 2015
27
Passage de paramètre par adresse
Solution : la procédure principale
Codez en ARM le programme suivant :
procedure swap(adresse x : entier, adresse y : entier)
z : entier
z=mem[x]
si z > mem[y]
mem[x]=mem[y]
mem[y]=z
fin procedure
procedure main()
a,b : entier
a=9
b=7
afficher a
afficher b
swap(adresse a,adresse b)
afficher a
afficher b
fin procedure
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
28
Carrier, Devismes (Grenoble I)
Fonctions et procédures
9 janvier 2015
29
Gestion du résultat de fonction
Problème des variables temporaires
Passage de paramètre par adresse
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Solution : la procédure swap
Introduction à la structure interne des processeurs :
une machine à 5 instructions
Fabienne Carrier
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Introduction
Fonctions et procédures
Le processeur vu du programmeur
Interprétation
Organisation
9 janvier 2015
Automate d’interprétation
30
Déroulement d’un programme
Plan
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
1
Déroulement d’un programme
Aujourd’hui
1
Introduction
2
Le processeur vu du programmeur
3
Carrier, Devismes (Grenoble I)
Aujourd’hui nous allons étudier comment un processeur exécute
un programme.
Interprétation
Pour cela, nous allons considérer une machine simpliste :
4
Organisation
5
Automate d’interprétation
6
Déroulement d’un programme
Carrier, Devismes (Grenoble I)
un processeur à 5 instructions.
Introduction à la structure interne des processeurs
9 janvier 2015
2
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
4
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Structure
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Les instructions
Les instructions sont décrites ci-dessous. On donne pour chacune une
syntaxe de langage d’assemblage et l’effet de l’instruction.
On considère un processeur comportant un seul registre de
données directement visible par le programmeur : ACC (pour
accumulateur).
clr : mise à zéro du registre ACC.
ld #vi : chargement de la valeur immédiate vi dans ACC.
La taille du codage d’une adresse et d’une donnée est 4 bits.
st ad : rangement en mémoire à l’adresse ad du contenu de
ACC.
Quelle est la taille de la mémoire ?
jmp ad : saut à l’adresse ad.
add ad : mise à jour de ACC avec la somme du contenu de ACC
et du mot mémoire d’adresse ad.
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
6
Déroulement d’un programme
Codage des instructions
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
7
Déroulement d’un programme
Exemple de programme (1/2)
Les instructions sont codées sur 1 ou 2 mots de 4 bits chacuns :
le premier mot représente le code de l’opération (clr, ld, st,
jmp, add) ;
le deuxième mot, s’il existe, contient une adresse ou bien une
constante.
et :
Le codage est le suivant :
clr
ld #vi
st ad
jmp ad
add ad
Carrier, Devismes (Grenoble I)
1
2
3
4
5
Que contient la mémoire après assemblage (traduction en binaire) et
chargement en mémoire ? On suppose que l’adresse de chargement est 0.
vi
ad
ad
ad
Introduction à la structure interne des processeurs
ld #3
st 8
add 8
jmp et
9 janvier 2015
8
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
9
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Exemple de programme (2/2)
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Interprétation des instructions ?
L’interprétation c’est la description de l’exécution du programme.
et :
Reprenons l’exemple précédent :
ld #3
st 8
add 8
jmp et
L’exécution du programme commence par l’interprétation de la
première instruction, dont le code est en mémoire à l’adresse 0.
Ce code étant celui de l’instruction ld, l’interprète lit une
information supplémentaire (ici, une valeur) dans le mot
d’adresse 1.
Que calcule ce programme ?
La valeur est alors chargée dans le registre ACC.
Finalement, le compteur programme (PC) est modifié de façon à
traiter l’instruction suivante.
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
9 janvier 2015
Automate d’interprétation
10
Déroulement d’un programme
Algorithme d’interprétation
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
12
Déroulement d’un programme
Exécution du programme
En adoptant un point de vue fonctionnel, en considérant les
ressources du processeur comme les variables d’un programme,
l’algorithme d’interprétation des instructions peut être décrit de la
façon suivante :
pc ← 0
tantque vrai
selon mem[pc]
mem[pc]=1 {clr} :
mem[pc]=2 {ld} :
mem[pc]=3 {st} :
mem[pc]=4 {jmp} :
mem[pc]=5 {add} :
acc ← 0
acc ← mem[pc+1]
mem[mem[pc+1]] ← acc
acc ← acc + mem[mem[pc+1]]
pc ← pc+1
pc ← pc+2
pc ← pc+2
pc ← mem[pc+1]
pc ← pc+2
Exercice : Dérouler l’exécution du programme précédent en utilisant
cet algorithme.
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
13
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
14
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Partie opérative
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Structure de la partie opérative
Le processeur comporte une partie qui permet de stocker des informations dans des
registres (visibles ou non du programmeur), de faire des calculs (+, -, and,...). Cette
partie est reliée à la mémoire par les bus adresses et données. On l’appelle Partie
Opérative.
Selon l’organisation de cette partie opérative, un certain nombre
d’actions de base sont possibles : on les appelle des
micro-actions.
opérations UAL
res=0
res=op1
res=op1+1
res=op1+op2
Bus Adr
Dans la partie opérative on a des registres : pc, acc, rinst, ma
(memory address), md (memory data),...
MA
op1
0
PC
1
UAL
res
ACC
La partie opérative donne aussi des infos qui servent à élaborer
les conditions (flag).
op2
Bus Don
Rinst
Carrier, Devismes (Grenoble I)
Introduction
MD
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
16
Déroulement d’un programme
Micro-actions et micro-conditions
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
17
Déroulement d’un programme
Introduction
On fait des hypothèses FORTES sur les transferts possibles :
md ← mem[ma]
mem[ma] ← md
rinst ← md
reg0 ← 0
reg0 ← reg1
lecture d’un mot mémoire.
écriture d’un mot mémoire
affectation
affectation
affectation
reg0 ← reg1 + 1
incrémentation
reg0 ← reg1 + reg2
opération
C’est la seule possibilité en lecture !
C’est la seule possibilité en écriture !
C’est la seule affectation possible dans rinst
reg0 est pc, acc, ma, ou md
reg0 est pc, acc, ma, ou md
reg1 est pc, acc, ou md
reg0 est pc, acc, ou md
reg1 est pc, acc, ou md
reg0 est pc, acc, ou md
reg1 est pc, acc, ou md
reg2 est pc, acc, ou md
Le processeur comporte une partie qui permet :
d’enchainer des calculs et/ou
des manipulations de registres et/ou
des accès à la mémoire.
C’est la Partie Contrôle, aussi appelée algorithme d’interprétation des
instructions du processeur.
C’est une machine séquentielle (automate) avec actions.
On fait aussi des hypothèses sur les tests : (rinst = entier)
Ces 3 types de transferts et les tests constituent le langage des
micro-actions et des micro-conditions.
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
18
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
20
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Une première version
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Réalisation et optimisation
pc <! 0
ma <! pc
Cet automate est réalisé de manière systématique avec du matériel
(des transistors).
md <! Mem[ma]
rinst <! md
load,add, jmp, stor
clear
pc <! pc+1
Optimisation : minimiser le nombre d’états pour réduire la taille du
processeur et accélérer le temps d’exécution d’une instruction.
acc <! 0
ma <! pc
pc <! pc+1
add
md <! Mem[ma]
load
store
jmp
acc <! md
md <! Mem[ma]
md <! acc
pc <! pc+1
Quelques pistes :
ma <! md
ma <! md
pc <! md
pc <- pc +1 peut être fait en avance.
acc <! acc + md
Mem[ma] <! md
ma <- md commun à plusieurs chemins.
pc <! pc+1
pc <! pc+1
Remarque : La notation de la condition clear doit être comprise comme le booléen rinst = 1.
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
Interprétation
Organisation
9 janvier 2015
Automate d’interprétation
21
Déroulement d’un programme
Version amélioration
ma <! pc
md <! Mem[ma]
load
8
Carrier, Devismes (Grenoble I)
1
ma <! pc
2
md <! Mem[ma]
3
rinst <! md
4
debut :
pc <! pc+1
ici :
clear
acc <! 0
6
Interprétation
Organisation
Automate d’interprétation
9 janvier 2015
22
Déroulement d’un programme
15
mnémonique
ou directive
.text
clr
ld
st
add
jmp
référence
mode adressage
#8
xx
xx
ici
immédiat
absolu ou direct
absolu ou direct
absolu ou direct
7
add, store
jmp
acc <! md
Introduction à la structure interne des processeurs
Le processeur vu du programmeur
étiquette
pc <! 0
5
pc <! pc+1
Introduction
Exemple de code
0
load,add, jmp, stor
Carrier, Devismes (Grenoble I)
10
.data
ma <! md
pc <! md
9
store
add
11
md <! acc
md <! Mem[ma]
12
Mem[ma] <! md
acc <! acc + md
Introduction à la structure interne des processeurs
xx :
13
14
9 janvier 2015
Exercice : Que contient la mémoire après chargement en supposant
que l’adresse de chargement est 0 et que xx est l’adresse 15.
23
Carrier, Devismes (Grenoble I)
Introduction à la structure interne des processeurs
9 janvier 2015
25
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Contenu en mémoire
Introduction
Le processeur vu du programmeur
Interprétation
Organisation
Automate d’interprétation
Déroulement d’un programme
Déroulement
état
pc
ma
md
rinst
acc
mem[15]
Exercice : Donnez le déroulement au cycle près du programme.
Carrier, Devismes (Grenoble I)
Introduction
Introduction à la structure interne des processeurs
Compilation haut-niveau
Compilation en assembleur
Traduction
9 janvier 2015
Assembleur
26
Editeur de liens
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
Introduction à la structure interne des processeurs
Compilation en assembleur
Traduction
9 janvier 2015
Assembleur
27
Editeur de liens
Plan
1
Introduction
2
Compilation haut-niveau
3
Compilation en assembleur
4
Traduction
5
Assembleur
6
Editeur de liens
La vie des programmes
Fabienne Carrier
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
1
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
2
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Aujourd’hui
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Un exemple en langage C
/* fichier fonctions.c */
int somme (int *t, int n) {
int i, s;
s = 0;
for (i=0;i<n;i++) s = s + t[i];
return (s); }
Nous allons étudier en détail les différentes étapes de compilation
permettant de produire un exécutable à partir d’un ou plusieurs
fichiers sources.
int max (int *t, int n) {
int i, m;
m = t[0];
for (i=1;i<n;i++) if (m < t[i]) m = t[i];
return (m); }
Dans le fichier main.c les fonctions
somme et max sont dites importées :
elles sont définies dans un autre
fichier.
==================================
Remarque : lorsque l’on compile plusieurs fichiers sources en un seul
exécutable, on parle de compilation séparée.
Dans le fichier fonctions.c, somme
et max sont dites exportées : elles
sont utilisables dans un autre fichier.
/* fichier main.c */
extern int somme (int *t, int n);
extern int max (int *t, int n);
#define TAILLE 10
static int TAB [TAILLE];
main
int
for
u =
v =
Carrier, Devismes (Grenoble I)
Introduction
La vie des programmes
Compilation haut-niveau
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
4
Editeur de liens
Compilation
() {
i,u,v;
(i=0;i<TAILLE;i++) scanf ("%d", &TAB[i]);
somme (TAB, TAILLE);
max (TAB, TAILLE); }
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
6
Editeur de liens
Exemple avec ARM : essai.s et lib.s
essai.s
fonctions.c
main.c
traducteur
traducteur
fonctions.s
main.s
Pour compiler , produire un exécutable, on enchaine
premiere
phase
de la
compilation
assembleur
assembleur
fonctions.o
main.o
editeur de
liens
exec
Remarque : la phase de traduction comporte une phase de
pré-traitement dite phase de pré-compilation où le
code source est transformé en code source enrichi (les
directives de pré-compilations — # — sont traitées)
Carrier, Devismes (Grenoble I)
les commandes :
gcc -c fonctions.c
gcc -c main.c
gcc -o exec main.o fonctions.o
La commande gcc -c main.c produit un fichier
appelé main.o.
La commande gcc -c fonctions.c produit un fichier
fonctions.o.
Les fichiers fonctions.o et main.o contiennent du
binaire translatable, c’est-à-dire, du code binaire qui ne
peut pas directement être exécuté en mémoire.
La commande gcc -o exec main.o fonctions.o
produit le fichier exec qui contient du binaire
exécutable. Ce fichier résulte de la liaison des deux
fichiers objets (.o). On parle d’édition de liens.
Remarque : gcc cache l’appel à différents outils
(logiciels).
La vie des programmes
9 janvier 2015
7
.text
.global main
main:
mov r0, #0
bcle: cmp r0, #10
beq fin
ldr r3, adr_xx
ldr r2, [r3]
bl add1
str r2, [r3]
add r0, r0, #1
bal bcle
fin:
bal exit
adr_xx: .word xx
.data
.word 99
xx: .word 3
Carrier, Devismes (Grenoble I)
lib.s
.global add1
.text
add1 : add r2, r2, #1
mov pc, lr
La vie des programmes
9 janvier 2015
9
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Compilation
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Du langage C vers l’assembleur
Pour compiler , on enchaine les commandes :
lib.s
essai.s
assembleur
assembleur
arm-eabi-gcc -c essai.s
arm-eabi-gcc -c lib.s
arm-eabi-gcc -o essai essai.o lib.o
L’objectif d’un langage de haut niveau type langage C est de
permettre au programmeur de s’abstraire des détails inhérents
au fonctionnement de la machine.
Les commandes arm-eabi-gcc -c essai.s et arm-eabi-gcc -c
lib.s produisent les fichiers essai.o et lib.o.
Il permet de manipuler des concepts bien plus élaborés.
Les fichiers essai.o et lib.o contiennent du binaire translatable.
essai.o
lib.o
editeur de liens
Mais il empêche la gestion de certains de ces détails.
La commande arm-eabi-gcc -o essai essai.o lib.o produit
le fichier essai qui contient du binaire exécutable. Ce fichier résulte
de la liaison des deux fichiers objets (.o). On parle d’édition de liens.
La première phase de la compilation consiste en la traduction
systématique d’une syntaxe complexe en un langage plus simple
et plus proche de la machine.
Remarque : arm-eabi-gcc cache différents outils.
essai
La commande arm-eabi-gcc appliqué à un fichier .s avec
l’option -c correspond à la commande arm-eabi-as.
La commande arm-eabi-gcc avec l’option utilisée avec -o
correspond à la commande d’édition de liens arm-eabi-ld.
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
10
Editeur de liens
Problématique
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
12
Editeur de liens
Premier cas
L’objectif de l’assembleur est de produire du code binaire à partir du
langage d’assemblage.
.text
.global main
main:
mov r0, #0
bcle: cmp r0, #10
beq fin
ldr r3, adr_xx
ldr r2, [r3]
bl add1
str r2, [r3]
add r0, r0, #1
bal bcle
fin:
bal exit
adr_xx: .word xx
.data
.word 99
xx: .word 3
Il n’est pas toujours possible de produire du binaire qui puisse être
directement copié en mémoire pour deux raisons principalement :
Cas 1 On ne connaı̂t pas en général l’adresse à laquelle les zones text et
data doivent être rangées en mémoire.
Cas 2 Le programme peut faire référence à des noms qui ne sont pas définis
dans le fichier en cours de traduction.
Dans le premier cas, on peut produire une image du binaire à partir de
l’adresse 0, à charge du matériel de translater l’image à l’adresse de
chargement pour l’exécution (il faut garder les informations permettant
de savoir quelles sont les adresses à translater)
Dans le deuxième cas on ne peut rien faire.
Carrier, Devismes (Grenoble I)
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
14
Carrier, Devismes (Grenoble I)
L’adresse associée au symbole xx est :
adresse de début de la zone data + 4
mais encore faut-il connaı̂tre l’adresse
de début de la zone data !
Si on considère que la zone data est
chargée à l’adresse 0, l’adresse
associée à xx est alors 4. Si on doit
translater le programme à l’adresse
2000, il faut se rappeler que à l’adresse
adr xx on doit modifier la valeur 4 en
2000 + 4.
Cette information à mémoriser est
appelée une donnée de translation
(relocation en anglais).
La vie des programmes
9 janvier 2015
15
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Deuxième cas
Introduction
Compilation haut-niveau
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Que contient un fichier .s ?
Dans le fichier essai.o il n’est
pas possible de calculer le
déplacement de l’instruction bl
add1 puisque l’on ne sait pas où
est l’étiquette add1 quand
l’assembleur traite le fichier
essai.s. En effet l’étiquette est
dans un autre fichier : lib.s
.text
.global main
main:
mov r0, #0
bcle: cmp r0, #10
beq fin
ldr r3, adr_xx
ldr r2, [r3]
bl add1
str r2, [r3]
add r0, r0, #1
bal bcle
fin:
bal exit
adr_xx: .word xx
.data
.word 99
xx: .word 3
Carrier, Devismes (Grenoble I)
Introduction
.text
.global main
main:
mov r0, #0
bcle: cmp r0, #10
beq fin
ldr r3, adr_xx
ldr r2, [r3]
bl add1
str r2, [r3]
add r0, r0, #1
bal bcle
fin:
bal exit
adr_xx: .word xx
.data
.word 99
xx: .word 3
Reprenons l’exemple en
langage C. Suite à la traduction
en langage d’assemblage, dans
le fichier main.s les références
aux fonctions somme et max ne
peuvent être complétées car les
fonctions en question ne sont pas
définies dans le fichier main.c
mais dans fonctions.c.
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
16
Editeur de liens
Que contient un fichier .o ?
des directives : .data, .bss,
.text, .word, .hword, .byte,
.skip, .asciz, .align
des étiquettes appelés aussi
symboles
des instructions du processeur
des commentaires : @ blabla
Note : Parfois une directive (.org)
permet de fixer l’adresse où sera logé
le programme en mémoire. Cette
facilité permet alors de calculer
certaines adresses dès la phase
d’assemblage.
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
17
Editeur de liens
Exemple : essai.o, entête
un entête contenant la taille du fichier, les adresses des
différentes tables, la taille de la zone de données non initialisées
(bss), etc.
On obtient l’entête avec la commande arm-eabi-readelf -a essai.o.
ELF Header:
Magic:
7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class:
ELF32
Data:
2’s complement, little endian
Version:
1 (current)
OS/ABI:
ARM
ABI Version:
0
Type:
REL (Relocatable file)
Machine:
ARM
Version:
0x1
Entry point address:
0x0
Start of program headers:
0 (bytes into file)
Start of section headers:
184 (bytes into file)
Flags:
0x0
Size of this header:
52 (bytes)
Size of program headers:
0 (bytes)
Number of program headers:
0
Size of section headers:
40 (bytes)
Number of section headers:
9
Section header string table index: 6
la zone de données (data) parfois incomplète
la zone des instructions (text) parfois incomplète
les informations associées à chaque symbole rangées dans une
section appelée : table des symboles.
les informations permettant de compléter ce qui n’a pu être
calculé... On les appelle informations de translation et l’ensemble
de ces informations est rangé dans une section particulière
appelée table de translation.
une table des chaines à laquelle la table des symboles fait
référence.
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
18
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
19
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Exemple : essai.o, organisation des tables
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Exemple : essai.o, zone data
On obtient l’entête avec la commande arm-eabi-readelf -a essai.o.
On obtient la zone .data avec la commande arm-eabi-objdump -s
-j .data essai.o.
Section Headers:
[Nr] Name
Type
Addr
Off
Size
ES Flg Lk Inf Al
[ 0]
NULL
00000000 000000 000000 00
0
0 0
[ 1] .text
PROGBITS
00000000 000034 00002c 00 AX 0
0 1
[ 2] .rel.text
REL
00000000 00033c 000018 08
7
1 4
[ 3] .data
PROGBITS
00000000 000060 000008 00 WA 0
0 1
[ 4] .bss
NOBITS
00000000 000068 000000 00 WA 0
0 1
[ 5] .ARM.attributes
ARM_ATTRIBUTES 00000000 000068 000010 00
0
0 1
[ 6] .shstrtab
STRTAB
00000000 000078 000040 00
0
0 1
[ 7] .symtab
SYMTAB
00000000 000220 0000f0 10
8 12 4
[ 8] .strtab
STRTAB
00000000 000310 000029 00
0
0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
Carrier, Devismes (Grenoble I)
Introduction
La vie des programmes
Compilation haut-niveau
Compilation en assembleur
essai.o:
Contenu de la section .data:
0000 63000000 03000000
9 janvier 2015
Traduction
format de fichier elf32-littlearm
Assembleur
20
Editeur de liens
Exemple : essai.o, zone text
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
21
Editeur de liens
Exemple : essai.o, zone text
La zone .text avec désassemblage avec la commande arm-eabi-objdump -j .text -d essai.o.
On obtient la zone .text avec la commande arm-eabi-objdump -j
.text -s essai.o.
essai.o:
Disassembly of section .text:
00000000 <main>:
0: e3a00000 mov r0, #0
00000004 <bcle>:
4: e350000a cmp r0, #10
8: 0a000005 beq 24 <fin>
c: e59f3014 ldr r3, [pc, #20] ; 28 <adr_xx>
10: e5932000 ldr r2, [r3]
14: ebfffffe bl 0 <add1>
18: e5832000 str r2, [r3]
1c: e2800001 add r0, r0, #1
20: eafffff7 b 4 <bcle>
format de fichier elf32-littlearm
Contenu de la section .text:
0000 0000a0e3 0a0050e3 0500000a 14309fe5
0010 002093e5 feffffeb 002083e5 010080e2
0020 f7ffffea feffffea 04000000
00000024 <fin>:
24: eafffffe b 0 <exit>
00000028 <adr_xx>:
28: 00000004 .word 0x00000004
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
22
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
23
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Exemple : essai.o, table des symboles
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Exemple : essai.o, table de translation
On obtient l’entête avec la commande arm-eabi-readelf -s essai.o.
Symbol table ’.symtab’
Num:
Value Size
0: 00000000
0
1: 00000000
0
2: 00000000
0
3: 00000000
0
4: 00000000
0
5: 00000004
0
6: 00000024
0
7: 00000028
0
8: 00000028
0
9: 00000004
0
10: 00000000
0
11: 00000000
0
12: 00000000
0
13: 00000000
0
14: 00000000
0
contains 15 entries:
Type
Bind
Vis
NOTYPE LOCAL DEFAULT
SECTION LOCAL DEFAULT
SECTION LOCAL DEFAULT
SECTION LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
SECTION LOCAL DEFAULT
NOTYPE GLOBAL DEFAULT
NOTYPE GLOBAL DEFAULT
NOTYPE GLOBAL DEFAULT
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
Ndx
UND
1
3
4
1
1
1
1
1
3
3
5
1
UND
UND
Name
On obtient la table de translation avec la commande arm-eabi-readelf -a
essai.o.
$a
bcle
fin
adr_xx
$d
xx
$d
Relocation section
Offset
Info
00000014 00000d01
00000024 00000e01
00000028 00000202
main
add1
exit
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
24
Editeur de liens
Exemple : lib.o, organisation des tables
La vie des programmes
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
25
Editeur de liens
Exemple : lib.o, tables des symboles
Symbol table ’.symtab’
Num:
Value Size
0: 00000000
0
1: 00000000
0
2: 00000000
0
3: 00000000
0
4: 00000000
0
5: 00000000
0
6: 00000000
0
Section Headers:
[Nr] Name
Type
Addr
Off
Size
ES Flg Lk Inf Al
[ 0]
NULL
00000000 000000 000000 00
0
0 0
[ 1] .text
PROGBITS
00000000 000034 000008 00 AX 0
0 1
[ 2] .data
PROGBITS
00000000 00003c 000000 00 WA 0
0 1
[ 3] .bss
NOBITS
00000000 00003c 000000 00 WA 0
0 1
[ 4] .ARM.attributes
ARM_ATTRIBUTES 00000000 00003c 000010 00
0
0 1
[ 5] .shstrtab
STRTAB
00000000 00004c 00003c 00
0
0 1
[ 6] .symtab
SYMTAB
00000000 0001c8 000070 10
7
6 4
[ 7] .strtab
STRTAB
00000000 000238 000009 00
0
0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
Carrier, Devismes (Grenoble I)
’.rel.text’ at offset 0x33c contains 3 entries:
Type
Sym.Value Sym. Name
R_ARM_PC24
00000000
add1
R_ARM_PC24
00000000
exit
R_ARM_ABS32
00000000
.data
9 janvier 2015
26
Carrier, Devismes (Grenoble I)
contains 7 entries:
Type
Bind
Vis
NOTYPE LOCAL DEFAULT
SECTION LOCAL DEFAULT
SECTION LOCAL DEFAULT
SECTION LOCAL DEFAULT
NOTYPE LOCAL DEFAULT
SECTION LOCAL DEFAULT
NOTYPE GLOBAL DEFAULT
La vie des programmes
Ndx Name
UND
1
2
3
1 $a
4
1 add1
9 janvier 2015
27
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Etapes d’un assembleur
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Rôle de l’éditeur de liens
Le travail de l’éditeur de liens consiste à :
Identifier les symboles définis et exportés d’un côté et les
symboles non définis de l’autre (importés).
1
Reconnaissance de la syntaxe (lexicographie et syntaxe) et
repérage des symboles. Fabrication de la table des symboles
utilisée par la suite dès qu’une référence à un symbole apparait.
2
Traduction = production du binaire.
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
Rassembler les zones de même type et effectuer les corrections
nécessaires.
Remarque : L’édition de liens rassemble des fichiers objets.
L’assembleur ne peut pas produire du binaire exécutable, il produit un
binaire incomplet dans lequel il conserve des informations permettant
de le compléter plus tard.
La phase d’édition de liens bien qu’elle permette de résoudre les
problèmes de noms globaux produit elle aussi du binaire incomplet car
les adresses d’implantation des zones text et data ne sont pas
connues.
28
Editeur de liens
Phase de chargement : production de binaire exécutable
édition de liens au moment de l’exécution (appel de la fonction)
ce qui permet de partager des fonctions et de ne pas charger en
mémoire plusieurs fois le même code.
9 janvier 2015
Compilation haut-niveau
La vie des programmes
Compilation en assembleur
9 janvier 2015
Traduction
Assembleur
30
Editeur de liens
ELF Header:
Magic:
7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class:
ELF32
Data:
2’s complement, little endian
Version:
1 (current)
OS/ABI:
ARM
ABI Version:
0
Type:
EXEC (Executable file)
Machine:
ARM
Version:
0x1
Entry point address:
0x810c
Start of program headers:
52 (bytes into file)
Start of section headers:
144432 (bytes into file)
Flags:
0x2, has entry point, GNU EABI
Size of this header:
52 (bytes)
Size of program headers:
32 (bytes)
Number of program headers:
2
Size of section headers:
40 (bytes)
Number of section headers:
24
Section header string table index: 21
édition de liens au moment du chargement en mémoire (au lieu
de rassembler le contenu de deux fichiers complets, on ne
charge que le code des fonctions utilisées, par ex. pour les
bibliothèques) ou
La vie des programmes
Introduction
Que contient un fichier exécutable ? entête
Le calcul des adresses définitives peut avoir lieu de façon statique ou
de façon dynamique au moment ou on en a besoin.
Deux solutions possibles :
Carrier, Devismes (Grenoble I)
Carrier, Devismes (Grenoble I)
31
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
32
Introduction
Compilation haut-niveau
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Que contient un fichier exécutable ? organisation des tables
Section Headers:
[Nr] Name
[ 0]
[ 1] .init
[ 2] .text
[ 3] .fini
[ 4] .rodata
[ 5] .eh_frame
[ 6] .ctors
[ 7] .dtors
[ 8] .jcr
[ 9] .data
[10] .bss
[11] .comment
[12] .debug_aranges
[13] .debug_pubnames
[14] .debug_info
[15] .debug_abbrev
[16] .debug_line
[17] .debug_str
[18] .debug_loc
[19] .debug_ranges
[20] .ARM.attributes
[21] .shstrtab
[22] .symtab
[23] .strtab
Type
NULL
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
NOBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
PROGBITS
ARM_ATTRIBUTES
STRTAB
SYMTAB
STRTAB
Carrier, Devismes (Grenoble I)
Introduction
Compilation haut-niveau
Addr
00000000
00008000
00008020
0000a520
0000a53c
0000a548
00012d84
00012d8c
00012d94
00012d98
000136f4
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
Off
000000
008000
008020
00a520
00a53c
00a548
00ad84
00ad8c
00ad94
00ad98
00b6f4
00b6f4
00b8e0
00bc30
00c2cc
01ad1f
01d675
01fab9
020ef2
023058
023340
023350
0237f0
024bd0
Size
000000
000020
002500
00001c
00000c
00083c
000008
000008
000004
00095c
000108
0001e6
000350
00069c
00ea53
002956
002444
001439
002163
0002e8
000010
0000df
0013e0
0007d1
9 janvier 2015
Traduction
Assembleur
33
Editeur de liens
Que contient un fichier exécutable ? section data
12ea8 00000000 00000000 63000000 03000000
......................
La vie des programmes
Compilation en assembleur
Traduction
Assembleur
Editeur de liens
Que contient un fichier exécutable ? table des symboles
Carrier, Devismes (Grenoble I)
Introduction
Ndx Name
UND
1
2
3
2
2
2
2
9
2 add1
La vie des programmes
Compilation haut-niveau
Compilation en assembleur
bcle
fin
adr_xx
$d
xx
9 janvier 2015
Traduction
Assembleur
34
Editeur de liens
Que contient un fichier exécutable ? section text
Contents of section .data:
......................
Carrier, Devismes (Grenoble I)
Compilation haut-niveau
Symbol table ’.symtab’ contains 318 entries:
Num:
Value Size Type
Bind
Vis
0: 00000000
0 NOTYPE LOCAL DEFAULT
1: 00008000
0 SECTION LOCAL DEFAULT
2: 00008020
0 SECTION LOCAL DEFAULT
3: 0000a520
0 SECTION LOCAL DEFAULT
.........................
74: 0000821c
0 NOTYPE LOCAL DEFAULT
75: 0000823c
0 NOTYPE LOCAL DEFAULT
76: 00008240
0 NOTYPE LOCAL DEFAULT
77: 00008240
0 NOTYPE LOCAL DEFAULT
78: 00012eb4
0 NOTYPE LOCAL DEFAULT
.........................
230: 00008244
0 NOTYPE GLOBAL DEFAULT
.........................
ES Flg Lk Inf Al
00
0
0 0
00 AX 0
0 4
00 AX 0
0 4
00 AX 0
0 4
00
A 0
0 4
00
A 0
0 4
00 WA 0
0 4
00 WA 0
0 4
00 WA 0
0 4
00 WA 0
0 4
00 WA 0
0 4
00
0
0 1
00
0
0 8
00
0
0 1
00
0
0 1
00
0
0 1
00
0
0 1
01 MS 0
0 1
00
0
0 1
00
0
0 8
00
0
0 1
00
0
0 1
10
23 213 4
00
0
0 1
La vie des programmes
Compilation en assembleur
Introduction
9 janvier 2015
35
00008218 <main>:
8218: e3a00000
mov r0, #0
0000821c <bcle>:
821c: e350000a
8220: 0a000005
8224: e59f3014
8228: e5932000
822c: eb000004
8230: e5832000
8234: e2800001
8238: eafffff7
cmp r0, #10
beq 823c <fin>
ldr r3, [pc, #20] ; 8240 <adr_xx>
ldr r2, [r3]
bl 8244 <add1>
str r2, [r3]
add r0, r0, #1
b 821c <bcle>
0000823c <fin>:
823c: ea000007
b 8260 <exit>
00008240 <adr_xx>:
8240: 00012eb4
.word 0x00012eb4
00008244 <add1>:
8244: e2822001
8248: e1a0f00e
add r2, r2, #1
mov pc, lr
Carrier, Devismes (Grenoble I)
La vie des programmes
9 janvier 2015
36
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Plan
Organisation d’un ordinateur
Fabienne Carrier
1
Introduction
2
Contrôleur d’entrées-sorties
3
Décodage d’adresses
Stéphane Devismes
Université Joseph Fourier, Grenoble I
9 janvier 2015
Carrier, Devismes (Grenoble I)
Introduction
Organisation d’un ordinateur
Contrôleur d’entrées-sorties
9 janvier 2015
1
Décodage d’adresses
Organisation de l’ordinateur
Organisation d’un ordinateur
Contrôleur d’entrées-sorties
9 janvier 2015
2
Décodage d’adresses
Peut-on ajouter des programmes et les lancer ? (cartouche de
jeu, par exemple ...)
Peut-on ajouter des programmes en langage machine écrits,
compilés et assemblés soi-même ?
Y-a-t-il des mémoires secondaires ? (disque dur, clé USB,
CD-Rom, . . .)
Les PC
Les ordinateurs portables
Les serveurs
Les super-calculateurs
Les téléphones portables
Il y a des points communs :
Dans l’électro-ménager, . . .
Processeur
Mémoire
Bus adresses, données
Signaux de contrôle (Read /Write, autres),
...
Contrôleurs d’entrées-sorties
Décodeur
On parle souvent de systèmes embarqués pour désigner un
ordinateur qui ne ressemble pas à un ordinateur ! C’est-à-dire, pas
de clavier, pas de souris, pas de disque, pas d’écran, mais un
processeur avec un programme
Exemple : Le contrôleur de distribution d’essence d’une station
service.
Organisation d’un ordinateur
Introduction
Critères de classification
Il existe différentes sortes d’ordinateurs :
Carrier, Devismes (Grenoble I)
Carrier, Devismes (Grenoble I)
9 janvier 2015
4
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
5
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Vision externe
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Lectures/écriture
Ecriture Lors d’une écriture (instruction STORE) dans un des trois registres
Mcommande, Métat, Mdonnéessort, le processeur envoie la
donnée à écrire dans le bus de donnée puis la donnée est
transférée du bus de donnée au registre du circuit contrôleur
d’Entrées-Sorties.
Un simple circuit avec 4 registres
Le circuit est vu par le processeur (espace d’adressage) comme
4 mots :
Mcommande (un mot de commande)
Métat (un mot d’état)
Mdonnéessort (données sortantes)
Mdonnéesentr (données entrantes)
Lecture Lors d’une lecture (instruction LOAD) dans le registre
Mdonnéesentr ou dans le registre Métat, le processeur
récupère le contenu du registre Mdonnéesentr (resp. Métat) via
le bus de donnée.
Les 4 mots (Mcommande, Métat, Mdonnéessort, Mdonnéesentr)
seront supposés aux adresses CNTRL, CNTRL+1, +2, +3.
Attention : CNTRL est une adresse constante, pas déterminée par
l’assembleur. Elle a un sens physique qu’on va voir. . .
Carrier, Devismes (Grenoble I)
Introduction
Organisation d’un ordinateur
Contrôleur d’entrées-sorties
9 janvier 2015
7
Décodage d’adresses
Notations
Carrier, Devismes (Grenoble I)
Introduction
Organisation d’un ordinateur
9 janvier 2015
Contrôleur d’entrées-sorties
8
Décodage d’adresses
Utilisation du contrôleur d’entrées-sorties : exemple
Dans la documentation technique d’un contrôleur, certaines valeurs
sont prédéfinies.
Commande
Signification
LOAD reg, Métat
Considérons ici l’exemple (simpliste) d’un contrôleur graphique avec
les valeurs prédéfinies suivantes :
METTRE l’adresse CNTRL
dans un registre regad
puis LOAD reg, [regad+1]
STORE reg, Mdonnéessort
libre : cette valeur dans le mot d’état signifie que le contrôleur
est prêt à accepter une commande. Le contrôleur tient à jour son
état de disponibilité pour que le processeur puisse savoir si il est
occupé ou non.
METTRE l’adresse CNTRL
dans un registre regad
puis STORE reg, [regad+2]
fond écran : cette valeur, envoyée vers le mot de commande,
affiche un fond d’écran de la couleur contenue dans le registre de
données sortantes.
rouge : code de la couleur rouge, peut être contenu dans le
registre de données sortantes.
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
9
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
10
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Exercice
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Etude du matériel d’entrées-sorties : les entrées
Ecrire un programme qui change la couleur de fond d’écran en rouge via le
contrôleur graphique.
bus données (lié au processeur)
bus données
bus adresses
ext
2 bits faibles
entrantes
commande
état
sortantes
proc
entrantes
commande
état
sortantes
proc
ext
L’adresse est
dans [CNTRL, CNTRL+3]
connexion des données
lire/ecrirebar
Remarque : On aurait de même des actions d’envoi :
ad dans [toto, toto+15]
entrantes
commande
état
envoi
sortantes
acquittement
acquittement
proc
d’un caractère à l’écran,
4 bits faibles
clock, reset,..
de positionnement de la tête de lecture d’un disque dur,
selection
autre
contrôleur
connexion des adresses
ensemble des signaux de contrôle
connexion du contrôle
...
Fig. 1 – Connexions entre processeur, contrôleur d’entrées sorties et monde extérieur ; le dessin est en trois
parties pour mettre en évidence les trois types d’informations véhiculées par les fils, mais bien sûr les fils
sont tous présents dans l’assemblage.
Les contrôleurs réels sont parfois très simples, parfois très complexes
deux bits de bus adresses (pour sélectionner
l’un des 4 mots CNTRL +0, +1, +2 ou +3)
un signal de sélection provenant du décodeur
d’adresses
le signal Read /Write du processeur
un paquet de données (8 fils) venant du monde
extérieur. Disons pour simplifier 8 interrupteurs
le signal d’horloge (par exemple le même que le
processeur). On peut raisonner comme si, à
chaque front de l’horloge la valeur venant des
interrupteurs était échantillonnée dans le
registre Mdonnéesentr.
une entrée ACQUITTEMENT si c’est un
contrôleur de sortie.
(simple affichage comme ci-dessus, contrôleur réseau. . .) parfois pour une
hexadécimaux. On note val x une valeur représentée en hexa. On dira, pour simplifier, que l’entrée A
”vaut” 67 x pour dire que les 8 fils sont dans les états 0110 0111.
L’ordinateur est organisé ainsi : (Voir figure 2
seule commande, plusieurs données. . .
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
Introduction
Contrôleur d’entrées-sorties
9 janvier 2015
11
Décodage d’adresses
Etude du matériel d’entrées-sorties : les sorties
bus données
proc
ext
connexion des données
lire/ecrirebar
proc
bus adresses
ext
entrantes
commande
état
sortantes
entrantes
commande
état
envoi
sortantes
acquittement
acquittement
clock, reset,..
proc
2 bits faibles
entrantes
commande
état
sortantes
selection
L’adresse est
dans [CNTRL, CNTRL+3]
ad dans [toto, toto+15]
4 bits faibles
autre
contrôleur
connexion des adresses
ensemble des signaux de contrôle
connexion du contrôle
Fig. 1 – Connexions entre processeur, contrôleur d’entrées sorties et monde extérieur ; le dessin est en trois
parties pour mettre en évidence les trois types d’informations véhiculées par les fils, mais bien sûr les fils
sont tous présents dans l’assemblage.
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
1. Le mot
(lu ou écrit) est pris dans une mémoire morte (ROM)Contr
ssi l’entrée
A est ées-sorties
telle que 0 x
Introduction
ôleur d’entr
<= A <= 3F x
c’est à dire A7 A6 A5 A4 A3 A2 A1 A0 sont compris entre
0 0 0 0 0 0 0 0 et
00111111
Ceci couvre les 64 monômes canoniques pour lesquels A7 =0 et A6 =0.
Le boı̂tier physique de ROM, qui contient 64 mots reçoit deux types d’information
– les 6 fils A5 A4 A3 A2 A1 A0 qui permettent d’adresser un des 64 mots
– UN FIL de sélection selrom qui vaut 1 ssi A7 =0 et A6 =0. On voit que selrom=A7 ’.A6 ’.
9 janvier 2015
12
Décodage d’adresses
Exemple
Il délivre sur le bus données du processeur le
contenu du registre Mdonnéesentr si il y a
sélection, lecture et adressage de
Mdonnéesentr, c’est-à-dire si le processeur
exécute une instruction LOAD à l’adresse CNTRL
+3
Il délivre sur le bus données du processeur le
contenu du registre Métat si il y a sélection,
lecture et adressage de Métat, c’est-à-dire si le
processeur exécute une instruction LOAD à
l’adresse CNTRL +1.
On peut raisonner comme si le contenu du
registre Mdonnéessort était affiché en
permanence sur 8 pattes de sorties vers
l’extérieur (8 diodes, par exemple).
2. Le mot (lu ou écrit) est pris dans le contrôleur d’entrées sorties (vu précédemment) ssi l’entrée
A est telle que 58 x <= A <= 5B x
(On a choisi que CNTRL = 58 x)
c’est à dire ssi A7 A6 A5 A4 A3 A2 A1 A0 sont compris entre
0 1 0 1 1 0 0 0 et
01011011
Ceci couvre
00 les 4 monômes canoniques pour lesquels A7 =0, A6 =1, A5=0, A4 =1, A3 =1, A2=0.
5C 4 /////
Le boı̂tier physique de contrôleur, qui contient
mots, reçoit deux types d’information
- les 201
fils A1 A0 qui permettent d’adresser
. . . un des 4 mots
– UN 02
FIL de sélection selcntr qui vaut 1 ssi A7 =0, A6 =1, A5 =0, A4 =1, A3 =1, A2 =0.
/////
On voit que selcntr=A7’.A6 .A5 ’.A4 .A5F
3 .A2 ’
On raisonne avec des adresses sur 8
bits.
selrom
selrom
selrom
L’adresse A est codé sur 8 bits
A7,. . .,A0.
...
3. Le mot (lu ou écrit) est pris dans le boı̂tier
mémoire vive ssi l’entrée A est telle que 80 x
60 de /////
<= A3E
<= FF x c’est à dire ssi A7 A6 A5 A4 A3 A2 A1 A0 sont compris entre
.
.
.
1 0 0 0 0 0 0 0 et
3F
40
...
57
58
59
5A
5B
selrom
selrom
/////
/////
selcntr
selcntr
selcntr
selcntr
Une sortie ENVOI si c’est un contrôleur de
sortie.
7E
7F
80
81
...
FE
FF
3
/////
/////
selram
selram
selram
selram
On représente les valeurs portées par
ces 8 fils par deux chiffres
hexadécimaux.
On note valx une valeur représentée en
hexa.
On dira que l’entrée A vaut 67x pour
dire que les 8 fils sont dans les états
0110 0111.
hexadécimaux. On note val x une valeur représentée en hexa. On dira, pour simplifier, que l’entrée A
”vaut” 67 x pour dire que les 8 fils sont dans les états 0110 0111.
L’ordinateur est organisé ainsi : (Voir figure 2
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
13
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
15
Introduction
Contrôleur d’entrées-sorties
Décodage d’adresses
Sélecteur pour la ROM
Décodage d’adresses
Le mot (lu ou écrit) est pris dans le contrôleur d’entrées-sorties (vu
précédemment) si et seulement si :
Le boı̂tier physique de contrôleur, qui contient 4 mots, reçoit deux types
Le boı̂tier physique de ROM, qui contient 64 mots reçoit deux types
d’information :
d’information :
Introduction
Contrôleur d’entrées-sorties
Sélecteur pour le contrôleur d’entrées-sorties
Un mot (lu ou écrit) est pris dans la mémoire morte (ROM) si et seulement
si :
Carrier, Devismes (Grenoble I)
Introduction
Organisation d’un ordinateur
9 janvier 2015
Contrôleur d’entrées-sorties
16
Décodage d’adresses
Sélecteur pour la RAM
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
Introduction
9 janvier 2015
Contrôleur d’entrées-sorties
17
Décodage d’adresses
Connexions processeur/contrôleur/mémoires/décodeur
ROM
E/S
RAM
00
A0 A1 A2 A3 A4 A5
80
5B
FF
selrom
3F
Le mot (lu ou écrit) est pris dans la mémoire vive (RAM) si et seulement si :
58
A0
A1
selcntr
A0 A1 A2 A3 A4 A5 A6
selram
A7
Le boı̂tier physique de RAM, qui contient 128 mots, reçoit deux types
d’information :
Bus de données
Bus d'adresses
A6
A5
A4
A3
A2
A1
A0
A0 A1 A2 A3 A4
A5 A6 A7
adresseinvalide
Processeur
R/-W
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
18
Carrier, Devismes (Grenoble I)
Organisation d’un ordinateur
9 janvier 2015
19
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Plan
Transistor, Portes Logiques et Circuits
Combinatoires
Stéphane Devismes
9 janvier 2015
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
Transistor
2
Portes logiques
3
Circuits combinatoires
4
Conclusion
Fabienne Carrier
Université Joseph Fourier, Grenoble I
Devismes, Carrier (Grenoble I)
1
9 janvier 2015
Circuits combinatoires
1
Conclusion
Définition
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
2
Conclusion
Type de transistors
Il y a deux principaux types de transistors :
Le transistor à jonctions (technologie dite bipolaire).
Le transistor est le composant électronique actif fondamental en
électronique utilisé principalement comme
Dans cette famille, on trouve notamment les circuits RTL
(Resistor Transistor Logic), TTL (Transistor Transistor Logic), DTL
(Diode Transistor Logic) ou encore ECL (Emitter Coupled Logic).
interrupteur commandé et
pour l’amplification, mais aussi
pour stabiliser une tension, moduler un signal
Le transistor à effet de champ (technologie dite unipolaire).
ainsi que de nombreuses autres utilisations.
Dans cette famille, on trouve notamment les circuits MOS (Metal
Oxyde Semiconductor) qui sont en général moins rapides, sauf
les plus récents comme HMOS ou XMOS3.
Remarque : Aujourd’hui, tous les processeurs sont en technologie
MOSFET, ou des améliorations.
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
4
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
5
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Fonctionnement d’un transistor
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Définition
Un transistor fonctionne comme un interrupteur (ici, un transistor à jonction NPN).
La forme la plus élémentaire de circuit est la porte logique.
Son comportement est dit binaire car il est caractérisé par deux états : l’état
0, qui représente la valeur logique faux et l’état 1, qui représente la valeur
logique vrai.
Les constructeurs utilisent dans certains cas une logique dite positive :
l’état 1 correspond à une tension comprise entre 2 et 5 volts (niveau haut) et
l’état 0 à une tension comprise entre 0 et 1 volt (niveau bas).
Dans d’autres cas, ils utilisent une logique dite négative où l’état 1
correspond au niveau bas, tandis que l’état 0 correspond au niveau haut.
Si la tension d’entrée Ve est inférieure à une valeur critique, le transistor se bloque et
n’est pas conducteur ; l’interrupteur est ouvert et la tension de sortie Vs est proche de
Vcc , donc à un niveau haut.
Si la tension d’entrée Ve est supérieure à la valeur critique, le transistor bascule, ce qui le
rend conducteur ; l’interrupteur est fermé et la tension de sortie est au niveau bas, proche
de la masse. La résistance R est conçue pour limiter le courant à travers le transistor,
dans ce dernier cas.
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
Remarque : La transmission n’est pas instantanée : le délai de traversée
d’une porte correspond au temps de propagation des signaux de l’entrée
vers la sortie (de l’ordre de quelques dixième nanosecondes pour la porte la
plus simple).
6
Conclusion
Porte NON
Devismes, Carrier (Grenoble I)
Transistor
9 janvier 2015
Circuits combinatoires
8
Conclusion
Porte NON-ET
La porte logique la plus simple est celle qui réalise une inversion
logique. Elle est symbolisée par :
La porte logique du NON-ET :
Elle est construite avec un seul transistor :
Table de vérité
V1
0
0
1
1
Table de vérité
Ve
0
1
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
Transistor, Portes Logiques et Circuits Combinatoires
Vs
1
0
9 janvier 2015
9
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
V2
0
1
0
1
Vs
1
1
1
0
9 janvier 2015
10
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Porte NON-OU
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Fonctions booléennes
La porte logique du NON-OU :
Avec les trois portes NON, NON-ET et NON-OU ont obtient une
logique complète : toute fonction booléenne peut être décrite avec ces
opérateurs !
Table de vérité
V1
0
0
1
1
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
V2
0
1
0
1
Exemple : Pour obtenir un OU il suffit de relier un NON-OU et un
NON.
Vs
1
0
0
0
9 janvier 2015
Circuits combinatoires
11
Conclusion
Autres symboles
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
12
Conclusion
Principes des circuits intégrés
Un circuit intégré est une plaquette de silicium sur laquelle sont intégrées les portes
du circuit. La plaquette est encapsulée dans un boı̂tier avec sur les côtés des broches
permettant les connexions électriques.
Ces circuits sont classés suivant la densité d’intégration, c’est-à-dire le nombre de
portes ou transistors par circuits (ou par mm2 ) :
SSI
Small Scale Integration
1 à 10 portes par circuit
MSI
Medium Scale Integration
10 à 100
LSI
Large Scale Integration
100 à 100 000
VLSI Very Large Scale Integration plus de 100 000
F IGURE: Un circuit SSI dans un boı̂tier à 14 broches : circuit TTL 7400 de Texas Instruments.
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
13
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
14
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Définition
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Circuit FPGA
Ce sont des réseaux logiques programmables (Field Programmable Logic Array ou Field
Programmable Gate Array) qui permettent de réaliser des fonctions lorsqu’elles sont sous la
forme d’une somme de produits.
Considérons par exemple 20 broches dont 12 correspondent à des entrées et 6 à des sorties.
Les 12 entrées sont inversées, ce qui fournit 24 variables internes. Ces 24 variables sont toutes
connectées à 50 portes ET, ce qui donne 1 200 fusibles, au départ intacts.
Un circuit combinatoire est un circuit comportant des entrées et des
sorties booléennes et dont les sorties sont une expression logique
des valeurs d’entrées.
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
Programmer le circuit consiste alors à détruire certains fusibles pour obtenir les produits de la
fonction à programmer. Les 6 sorties proviennent de 6 portes OU qui reçoivent chacune les
sorties des 50 portes ET. On obtient ainsi 300 fusibles dont certains sont détruits pour obtenir la
somme des termes de la fonction.
16
Conclusion
Multiplexeur
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
17
Conclusion
Décodeur
Un multiplexeur comporte 2n
entrées, 1 sortie et n lignes de
sélection. La configuration des n
lignes de sélection fournit une
valeur parmi les 2n entrées et
connecte cette entrée à la sortie.
Un décodeur comprend n
entrées et 2n sorties, la sortie
activée correspondant à la
configuration binaire du mot
formé par les n entrées. Un tel
circuit sert à sélectionner des
adresses de la mémoire.
Sélecteur
0
Sortie
1
Exemple : n = 1
Devismes, Carrier (Grenoble I)
Devismes, Carrier (Grenoble I)
Exemple : Un décodeur 3 vers
8 (n = 3).
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
18
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
19
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Comparateur
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Décaleur
Un décaleur est formé de (n + 1)
entrées D1 , ..., Dn , C et de n
sorties S1 , ..., Sn et opère un
décalage de 1 bit sur les entrées
D1 , ..., Dn . Si C = 1, il s’agit d’un
décalage à droite et si C = 0,
d’un décalage à gauche.
Un comparateur à 2 × n entrées
et 1 sortie, les 2 × n entrées
formant deux mots de n bits : A
et B. La sortie vaut 1 si le mot
A = B, 0 sinon.
Exemple : n = 2
Exemple : n = 3
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
20
Conclusion
Demi-additionneur
B
0
1
0
1
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
21
Conclusion
Additionneur
Un additionneur additionne deux
bits (A et B) et une retenue (Re )
et évalue la retenue éventuelle
(Rs ).
Un demi-additionneur additionne
deux bits (A et B) et évalue la
retenue éventuelle (R ).
A
0
0
1
1
Devismes, Carrier (Grenoble I)
S = A+B
0
1
1
0
A
0
0
0
0
1
1
1
1
R
0
0
0
1
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
22
B
0
0
1
1
0
0
1
1
Re
0
1
0
1
0
1
0
1
Devismes, Carrier (Grenoble I)
S = A+B
0
1
1
0
1
0
0
1
Rs
0
0
0
1
0
1
1
1
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
23
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Du demi-additionneur à l’additionneur
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
Transistor
Portes logiques
Circuits combinatoires
Conclusion
Addition de mots (sur 4 bits)
9 janvier 2015
Circuits combinatoires
24
Conclusion
UAL
Devismes, Carrier (Grenoble I)
Transistor
Transistor, Portes Logiques et Circuits Combinatoires
Portes logiques
9 janvier 2015
Circuits combinatoires
25
Conclusion
Conclusion
Avec des transistors on fait des portes logiques
Avec des portes logiques on fait des circuits combinatoires
Avec des circuits combinatoires on fait des UALs, des unités de
commandes. . .
Mais pour faire un processeur, il faut aussi faire des registres
Il faut aussi pouvoir faire de la mémoire
Solution : circuit séquentiel, mais c’est une autre histoire . . .
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
26
Devismes, Carrier (Grenoble I)
Transistor, Portes Logiques et Circuits Combinatoires
9 janvier 2015
28