Architecture des ordinateurs

publicité
Plan du cours
1
2
3
4
5
6
7
8
9
10
11
12
Histoire de l’ordinateur
Présentation générale
Représentation interne des informations
Encodage de l’information
Circuits logiques
Composants électroniques
Mémoires
Unité centrale de traitement
Superordinateurs et microprocesseurs
Entrées / sorties
Assembleur
Introduction au langage MIPS
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
260 / 294
De quoi allons-nous
parler et quel chemin
allons nous suivre ?
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
261 / 294
Objectifs du chapitre
1
Illustrer la programmation assembleur avec un vrai language.
2
Programmer de petits programmes MIPS et les executer dans un
simulateur.
3
Maı̂triser les appels de procédures et la récursion en MIPS. apple
4
.
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
262 / 294
Ressources
Sur la base des notes de cours de Christophe Fiorio, JeanMarc Talbot.
Computer organization and design : the hardware/software interface, David A. Patterson & John
L. Hennessy, Morgan Kaufmann, 4th edition, 2008.
Assemblers, Linkers, and the SPIM Simulator, James
R. Larus.
Documentation on the MIPS32 architecture , MIPS
Technologies, 2010.
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
263 / 294
Les machines MIPS
Le langage MIPS est l’assembleur des
processeurs MIPS
I
I
I
MIPS I à V ;
MIPS32 ;
MIPS64.
Introduit au début des années 1980 ;
Développé par MIPS Technologies ;
Processeur RISC ;
Existe en 32 et 64 bits ;
Souvent utilisé comme support dans le
milieu académique ;
Processeur des machines NEC, SGI (supercalculateurs), Sony
PS,PS2, PSP, Nintendo (console), FreeBox, NeufBox (routeur) ;
Nous allons nous intéresser à la norme du langage MIPS32.
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
264 / 294
A-t-on des machines MIPS sous la main ?
Code ass. MIPS
Non ⇒ Utilisation d’une machine virtuelle : un programme qui simule de
manière logicielle le fonctionnement
d’une machine réelle.
Il existe plusieurs logiciels qui sont
des simulateurs de machine MIPS
e.g., SPIM, MIPSter, MARS, OVPsim, GXemul.
Compilateur
prog. en langage
machine MIPS
Interpreteur
code machine local
+ exécution
Nous utiliserons :
SPIM (http://pages.cs.wisc.edu/~larus/spim.html)
MARS (http://courses.missouristate.edu/KenVollmar/
MARS/index.htm)
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
265 / 294
MARS, un environnement de programmation MIPS (1/2)
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
266 / 294
MARS, un environnement de programmation MIPS (2/2)
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
267 / 294
Généralités MIPS, règles syntaxique
Nom de fichier programme suffixé par .s ;
Toujours une seule instruction par ligne ;
# préfixe un commentaire ;
Les entiers sont notés soit en décimal soit en hexadécimal (alors
préfixé par 0x) ;
Les chaı̂nes de caractères sont simplement entre guillemets et peuvent
contenir des caractères d’échappement ;
Les labels correspondent à une adresse mémoire dans le segment texte
ou données (déclarés avec ” :”).
Instructions de 32 bits, 3 types d’instructions différentes ;
Mémoire adressable de 232 octets ;
Mot mémoire de 32 bits ;
32 registres de 32 bits + CO + ACC (hi & lo) ;
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
268 / 294
Exemple
Le opérations arithmétiques MIPS
OPA
a,b,c
# a := b OPA c avec OPA ={add, sub, ...}
f := (g + h) − (i + j)
add
add
sub
$t0,$t1,$t2
$t3,$t4,$t5
$v0,$t0,$t3
Clement Jonquet (Polytech’ Montpellier)
# $t0 := $t1+$t2
# $t3 := $t4+$t5
# $v0 := $t0-$t3
Architecture des ordinateurs
IG3 2013-2014
269 / 294
Registres MIPS
Il existe 32 registres de 32 bits numérotés $0, . . . , $31
Nom
Numéro Description
$zero
0
Constante 0
$at
1
Réservé à l’assembleur
Évaluation d’une expression et résultats d’une
$v0,$v1
2-3
fonction
$a0,. . .,$a3
4-7
Arguments de sous-programmes
$t0,. . .,$t7
8-15
Valeurs temporaires (sauvées par l’appelant)
$s0,. . .,$s7
16-23
Valeurs temporaires (sauvées par l’appelé)
$t8,$t9
24-25
Valeurs temporaires (sauvées par l’appelant)
$k0,$k1
26-27
Réservé pour les interruptions (i.e., système
d’exploitation)
$gp
28
Pointeur global
$sp
29
Pointeur de pile
$fp
30
Pointeur de bloc
$ra
31
Adresse de retour
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
270 / 294
Accès mémoire MIPS
Il existe des instructions de
transfert vers/de la mémoire
centrale (e.g., lw et sw) ;
La mémoire est vue comme un
tableau où l’adresse serait
l’indice du tableau ;
Mot mémoire de 32 bits ;
Mémoire adressable de 232
octets (4Go) ⇒ 230
(=1073741824) mots de 32
bits ;
Adresse sur 1 octet ⇒ Les mots mémoires sont adressés par des
multiples de 4 (i.e., le CO est incrémenté de 4 à chaque cycle).
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
271 / 294
Adressage des opérandes
Direct - L’instruction contient des labels ;
j etiquette1 # prochain instruction à l’étiquette1
Immédiat - L’instruction contient la valeur ;
addi $a0, $t1, 4 # a0:= t1+4
Registre - Le registre contient la valeur ;
add $a0, $t1, $t2 # a0:= t1+t2
Implicite - Le code opération indique où se trouve l’opérande ;
mult $t1, $t2 # acc:= t1*t2
Indirect Registre avec déplacement - L’adresse de la valeur est
obtenue par l’addition d’un entier a la valeur du registre ;
lw $t0,4($a1) # Le contenu de à l’adresse dans $a1+4
est chargé dans $t0
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
272 / 294
Organisation de la mémoire
Un programme utilisateur utilise 3
sous-segments :
Le segment texte contient le code
exécutable (i.e., chargé en mémoire).
Le segment données contient les
données globales manipulées par le
programme (adresse croissante).
Le segment pile contient la pile
d’execution du programme (adresse
décroissante).
La mémoire n’est pas infinie
Attention à la rencontre entre la pile et le
tas !
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
273 / 294
Instructions MIPS
Une instruction MIPS est codée en binaire par un mot de 32 bits ;
Les 32 bits sont décomposés en champs, chaque partie ayant une
signification particulière, codant ainsi soit l’opération, soit un
opérande numérique, soit une adresse ;
Avoir un nombre fixe d’opérande est plus simple à gérer ;
3 types d’instructions différentes :
I
I
I
Instruction de type R (registre) ;
Instruction de type I (transfert) ;
Instruction de type J (saut) ;
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
274 / 294
Format des instructions MIPS (1/3)
Instruction de type R (registre)
Les 32 bits sont décomposés de la manière suivante :
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
decval
5bits
fonction
6bits
op : code opération correspondant à l’instruction
rs : premier registre opérateur source
rt : deuxième registre opérateur source
rd : registre opération destination (reçoit le résultat de l’opération)
decval : valeur du décalage
fonction : variante de l’opération décrite par op
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
275 / 294
Format des instructions MIPS (2/3)
Instruction de type I (transfert)
Les 32 bits sont décomposés de la manière suivante :
op
6 bits
rs
5 bits
rt
5 bits
adresse
16 bits
op : code opération correspondant à l’instruction
rs : premier registre opérateur source
rt : deuxième registre opérateur source
adresse : adresse mémoire
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
276 / 294
Format des instructions MIPS (3/3)
Instruction de type J (saut)
Les 32 bits sont décomposés de la manière suivante :
op
6 bits
adresse
26 bits
op : code opération correspondant à l’instruction
adresse : adresse mémoire
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
277 / 294
Exemples d’instructions MIPS
Exemple d’instruction de type R
000000 10001 10010 01000 00000 100000
0
⇒ add
17
18
8
0
32
$8,$17,$18 en MIPS
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
278 / 294
Type d’instructions : arithmétiques
type
instruction
add Rd,Rs,Rt
addu Rd,Rs,Rt
addi Rd,Rs,Imm
addiu Rd,Rs,Imm
sub Rd,Rs,Rt
mult Rs,Rt
multu Rs,Rt
mul Rd,Rs1,Rs2
arithmétiques
div Rs,Rt
div
divu
rem
abs
neg
rol
ror
Rd,Rs1,Rs2
Rd,Rs1,Rs2
Rd,Rs1,Rs2
Rd,Rs
Rd,Rs
Rd,Rs1,Rs2
Rd,Rs1,Rs2
Clement Jonquet (Polytech’ Montpellier)
addition
addition - sans déb.
addition d’un immédiat
addition - sans déb.
soustraction
multiplication
multiplication non signée
multiplication - sans déb.
division
division
division non signée - sans déb.
reste de la division
valeur absolue
opposé d’une valeur
rotation vers la gauche
rotation vers la droite
Architecture des ordinateurs
commentaire
Rd←Rs+Rt
Rd←Rs+Rt
Rd←Rs+Imm
Rd←Rs+Imm
Rd←Rs-Rt
[hi,lo]←Rs×Rt
[hi,lo]←Rs×Rt
Rd←Rs1×Rs2
lo←Rs ÷ Rt
hi←Rs mod Rt
Rd←Rs1 ÷ Rs2
Rd←Rs1 ÷ Rs2
Rd←Rs1 mod Rs2
Rd←|Rs|
Rd←-Rs
Rd←rot de Rs1
de la distance
dans Rs2
IG3 2013-2014
279 / 294
Type d’instructions : logiques
logiques
and Rd,Rs,Rt
andi Rd,Rs,Imm
or Rd,Rs,Rt
ori Rd,Rs,Rt
nor Rd,Rs,Rt
xor Rd,Rs,Rt
xori Rd,Rs,Imm
not Rd,Rs
et logique
et logique immédiat
ou logique
ou logique immédiat
nor logique
xor logique
xor logique immédiat
non logique
sll Rd,Rs,Sa
sllv Rd,Rt,Rs
srl Rd,Rs,Sa
srlv Rd,Rt,Rs
sra Rd,Rs,Sa
srav Rd,Rt,Rs
décalage
décalage
décalage
décalage
décalage
décalage
Clement Jonquet (Polytech’ Montpellier)
logique à gauche immédiat
logique à gauche
logique à droite immédiat
logique à droite
arith. à droite immédiat
arith. à droite
Architecture des ordinateurs
Rd←Rs.Rt
Rd←Rs.Imm
Rd←Rs+Rt
Rd←Rs+Imm
Rd←Rs + Imm
Rd←Rs⊕Rt
Rd←Rs⊕Imm
Rd←Rs ; négation
bit à bit
rang du décalage
défini par Rs
idem
idem
IG3 2013-2014
280 / 294
Type d’instructions : chargement et rangement mémoire
lb Rt,@
chargement lw Rt,@
ld Rt,@
sw Rt,@
sd Rt,@
chargt de la partie gauche
chargt de la partie droite
chargement d’un immédiat
chargement de la partie de
poids faible d’un immédiat
dans la partie de poids fort
d’un registre
chargement d’une adresse
rangement de l’octet de poids
faible d’un registre
rangement d’un mot
rangement d’un mot double
swl Rt,@
swt Rt,@
rangt de la partie gauche
rangt de la partie droite
lwl Rt,@
lwt Rt,@
li Rd,Imm
lui Rt,Imm
la Rt,@
sb Rt,@
rangement
chargement d’un octet dans
l’octet de poids faible d’un registre
chargement d’un mot
chargement d’un mot double
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
Rt←M[@]
Rt←(M[@],M[@+4])
Rt←(M[@],M[@+4])
Rt+1←(M[@+4],M[@+8])
Rt←(M[@],M[@+2])
Rt←(M[@+2],M[@+4])
Rd←Imm
Rt←Imm×216
Rt←@
M[@] ←Rt
(M[@],M[@+4]) ←Rt
(M[@],M[@+4])
←Rt(M[@+4],M[@+8])
←Rt+1
(M[@],M[@+2]) ←Rt
(M[@2],M[@+4]) ←Rt
IG3 2013-2014
281 / 294
Type d’instructions : transfert de données
transfert
de données
move Rd,Rs
transfert
Rd←Rs
mfhi Rd
mflo Rd
transfert depuis hi
transfert depuis lo
Rd←hi
Rd←lo
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
282 / 294
Type d’instructions : comparaison
comparaison
seq Rd,Rs1,Rs2
sne Rd,Rs1,Rs2
sgt Rd,Rs1,Rs2
sge Rd,Rs1,Rs2
slt Rd,Rs1,Rs2
sle Rd,Rs1,Rs2
slti Rd,Rs,Imm
Clement Jonquet (Polytech’ Montpellier)
positionner
positionner
positionner
positionner
positionner
positionner
positionner
si
si
si
si
si
si
si
égal
différent
supérieur
supérieur ou égal
inférieur
inférieur ou égal
inférieur à l’immédiat
Architecture des ordinateurs
Rd=Rs1==Rs2?1:0;
Rd=Rs1!=Rs2?1:0;
Rd=Rs1>=Rs2?1:0;
Rd=Rs1>=Rs2?1:0;
Rd=Rs1<=Rs2?1:0;
Rd=Rs1<=Rs2?1:0;
Rd=Rs<=Imm?1:0;
IG3 2013-2014
283 / 294
Type d’instructions : branchement conditionnel et saut
beq Rs,Rt,label
branchement
conditionnel bne Rs,Rt,label
bgt Rs,Rt,label
bge Rs,Rt,label
blt Rs,Rt,label
ble Rs,Rt,label
j label
saut
jal label
jr Rs
Clement Jonquet (Polytech’ Montpellier)
branchement si égal
if(Rs==Rt) $pc ←@
branchement si différent
branchement si supérieur
branchement si supérieur ou égal
branchement si inférieur
branchement si inférieur ou égal
saut inconditionnel
saut inconditionnel avec lien
saut inconditionnel par registre
if(Rs!=Rt) $pc ←@
if(Rs>Rt) $pc ←@
if(Rs>=Rt) $pc ←@
if(Rs<Rt) $pc ←@
if(Rs<=Rt) $pc ←@
$pc ←@
$pc ←@ $ra←@retour
$pc ←@dans Rs
Architecture des ordinateurs
IG3 2013-2014
284 / 294
Type d’instructions : exception et interruption
exception
rfe
et
interruption
syscall
nop
Clement Jonquet (Polytech’ Montpellier)
retour d’exception
restitue le registre
État
appel système
le
registre
$v0
contient le numéro
de l’appel système
ne rien faire !
aucune opération
Architecture des ordinateurs
IG3 2013-2014
285 / 294
Type d’instructions : virgule flottante (1/2)
valeur absolue flottante simple
Fd←|Fs|
abs.d Fd,Fs
instructions add.s Fd,Fs,Ft
flottantes
add.d Fd,Fs,Ft
bc1t label
valeur absolue flottante double
addition flottante simple
addition flottante double
branchement si drapeau flottant vrai
bc1f
branchement si drapeau flottant faux
Fd←|Fs|
Rd←Rs+Rt
Rd←Rs+Rt
branchement conditionnel à l’adresse
du label
branchement conditionnel à l’adresse
du label
drapeau flottant à 1
si Fs==Ft
drapeau flottant à 1
si Fs==Ft
drapeau flottant à 1
si Fs<Ft
drapeau flottant à 1
si Fs<=Ft
drapeau flottant à 1
si Fs<Ft
drapeau flottant à 1
si Fs<=Ft
abs.s Fd,Fs
label
c.eq.s Fs,Ft
test si égalité simple
c.eq.d Fs,Ft
test si égalité double
c.lt.s Fs,Ft
test si inférieur simple
c.le.s Fs,Ft
test si inférieur ou égal simple
c.lt.d Fs,Ft
test si inférieur double
c.le.d Fs,Ft
test si inférieur ou égal double
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
286 / 294
Type d’instructions : virgule flottante (2/2)
cvt.d.s Fd,Fs
conversion simple en double
cvt.s.d Fd,Fs
instructions
flottantes
cvt.s.w Fd,Fs
conversion double en simple
cvt.d.w Fd,Fs
conversion entier en double
cvt.w.s Fd,Fs
conversion simple en entier
cvt.w.d Fd,Fs
conversion double en entier
mul.s
mul.d
div.s
div.d
neg.s
neg.d
l.s
l.d
mov.s
Fd,Fs,Ft
Fd,Fs,Ft
Fd,Fs,Ft
Fd,Fs,Ft
Fd,Fs,Ft
Fd,Fs,Ft
Fd,@
Fd,@
Fd,Fs
mov.d
Fd,Fs
multiplication flottante simple
multiplication flottante double
division flottante simple
division flottante double
opposé d’un nombre simple flottant
opposé d’un nombre simple flottant
chargement flottant simple précision
chargement flottant double précision
transfert d’un nombre flottant simple
précision
transfert d’un nombre flottant
double précision
Clement Jonquet (Polytech’ Montpellier)
conversion entier en simple
Architecture des ordinateurs
simple Fs;
Fd←(double)Fs
double Fs;
Fd←(simple)Fs
int Fs;
Fd←(simple)Fs
int Fs;
Fd←(double)Fs
simple Fs;
Fd←(int)Fs
double Fs;
Fd:=(int)Fs
Fd←Fs×Ft
Fd←Fs×Ft
Fd←Fs/Ft
Fd←Fs/Ft
Fd←- Fs
Fd←- Fs
Fd←M[@]
Fd←M[@]
Fd←Fs
Fd←Fs
IG3 2013-2014
287 / 294
e
Exemple de branchement
Les instructions de test s’appelle, en langage
conditionnels : beq, bne, bgt, bge, blt, ble
exercice : coder le programme suivant en la
if i/=j then
f :=f+h ;
end if
f :=f-i ;
Rs mod Rt
s1 ou Rs2
dépend de
L1 :
beq
add
sub
$19,$20,L1
$16,$16,$18
$16,$16,$19
39/112
Clement Jonquet (Polytech’ Montpellier)
#aller en L1 si i=j
#f :=f+h
Christophe Fiorio, EPU Montpellier
Architecture des ordinateurs
2008-2009
IG3 2013-2014
288 / 294
Sous-programmes
MIPS ne fournit pas d’instruction permettant de définir des
sous-programmes ou des macros. On doit utiliser des sauts/branchements
qui modifient le CO :
jal saute à une étiquette et garde un lien sur le lieu d’exécution dans
le registre $31 ;
j saute sans sauvegarder l’adresse de retour ;
jr saute à une adresse stockée dans un registre.
Lors de l’appel de sous-programmes :
On utilise les registres 4 à 7 pour le passage de paramètres ;
$t0-$t9 sont sauvés par l’appelant ;
$s0-$s7 sont sauvés par l’appelé.
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
289 / 294
Appels de sous-programmes imbriqués
Utilisation d’une pile (LIFO) pour le passage de paramètre et la sauvegarde
de l’adresse de retour.
On utilise le registre $29 comme sommet de pile (registre SP) ;
Il n’y a pas d’instruction PUSH et POP ;
Équivalent de PUSH et POP en MIPS
push :
pop :
addi
sw
jal
lw
subi
$29,$29,4
$31,0($29)
procedure
$31,0($29)
$29,$29,4
Clement Jonquet (Polytech’ Montpellier)
#
#
#
#
#
sommet de pile ajusté
sauvegarde de l’adresse de retour
saut à la procédure
restauration de $31
ajustement du sommet de pile
Architecture des ordinateurs
IG3 2013-2014
290 / 294
Appels de sous-programmes : exemple [Talbot] (1/2)
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
291 / 294
Appels de sous-programmes : exemple [Talbot] (2/2)
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
292 / 294
Retour sur les objectifs du cours
1
Décrire l’organisation interne des ordinateurs et son evolution.
2
Modéliser le fonctionnement des ordinateurs.
3
Représenter des données alphanumériques.
4
Modéliser le calcul arithmétique et logique.
5
Écrire un petit programme en language assembleur.
6
Appréhender les principes généraux sous-jacents à la programmation.
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
293 / 294
Clement Jonquet (Polytech’ Montpellier)
Architecture des ordinateurs
IG3 2013-2014
294 / 294
Téléchargement