Histoire de lordinateur
Presentation generale
Circuits logiques
Memoires
Assembleur
Entrees / sorties
IG3 2010-2011
201 / 238
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.
IG3 2010-2011
202 / 238
IG3 2010-2011
203 / 238
Compilateur
prog. en langage
machine MIPS
Interpreteur
IG3 2010-2011
204 / 238
Generalites MIPS
IG3 2010-2011
205 / 238
Exemple
a,b,c
f := (g + h) (i + j)
add
add
sub
$t0,$t1,$t2
$t3,$t4,$t5
$v0,$t0,$t3
# $t0 := $t1+$t2
# $t3 := $t4+$t5
# $v0 := $t0-$t3
IG3 2010-2011
206 / 238
Registres MIPS
Il existe 32 registres de 32 bits numerotes $0, . . . , $31
Nom
Numero Description
$zero
0
Constante 0
$at
1
Reserve `a lassembleur
Evaluation
dune expression et resultats dune
$v0,$v1
2-3
fonction
$a0,. . .,$a3
4-7
Arguments de sous-programmes
$t0,. . .,$t7
8-15
Valeurs temporaires (non preservees)
$s0,. . .,$s7
16-23
Valeurs temporaires (preservees)
$t8,$t9
24-25
Valeurs temporaires (non preservees)
$k0,$k1
26-27
Reserve pour les interruptions (i.e., syst`eme
dexploitation)
$gp
28
Pointeur global
$sp
29
Pointeur de pile
$fp
30
Pointeur de bloc
$ra
31
Adresse de retour
Clement Jonquet (Polytech Montpellier)
IG3 2010-2011
207 / 238
IG3 2010-2011
208 / 238
Instructions MIPS
IG3 2010-2011
209 / 238
rs
5 bits
rt
5 bits
rd
5 bits
decval
5bits
fonction
6bits
IG3 2010-2011
210 / 238
rs
5 bits
rt
5 bits
adresse
16 bits
IG3 2010-2011
211 / 238
adresse
26 bits
IG3 2010-2011
212 / 238
17
18
32
$8,$17,$18 en MIPS
IG3 2010-2011
213 / 238
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
etiquesdiv Rs,Rt
addition
addition - sans d
eb.
addition dun imm
ediat
addition - sans d
eb.
soustraction
multiplication
multiplication non sign
ee
multiplication - sans d
eb.
division
div Rd,Rs1,Rs2
divu Rd,Rs1,Rs2
rem Rd,Rs1,Rs2
division
division non sign
ee (sans d
eb.)
reste de la division
abs
neg
rol
ror
valeur absolue
oppos
e dune valeur
rotation vers la gauche
rotation vers la droite
Rd,Rs,Rt
Rd,Rs
Rd,Rs1,Rs2
Rd,Rs1,Rs2
commentaire
RdRs+Rt
RdRs+Rt
RdRs+Imm
RdRs+Imm
RdRs-Rt
[hi,lo]RsRt
[hi,lo]RsRt
RdRs1Rs2
loRsRt ;
hiRs mod Rt
RdRs1Rs2
RdRs1Rs2
RdRs1Rs2 si
Rs1 ou Rs2 est n
egatif
Rd Rs
IG3 2010-2011
214 / 238
logiques
instruction
and Rd,Rs,Rt
andi Rd,Rs,Imm
or Rd,Rs,Rt
ori Rd,Rs,Rt
nor Rd,Rs,Rt
et logique
et logique imm
ediat
ou logique
ou logique imm
ediat
nor logique
xor Rd,Rs,Rt
xori Rd,Rs,Imm
not Rd,Rs
xor logique
xor logique imm
ediat
non logique
sll Rd,Rs,Sa
sllv Rd,Rt,Rs
d
ecalage logique `
a gauche
d
ecalage logique `
a gauche
srl Rd,Rs,Sa
srlv Rd,Rt,Rs
d
ecalage logique `
a droite
d
ecalage logique `
a droite
sra Rd,Rs,Sa
srav Rd,Rt,Rs
d
ecalage arithm
etique `
a droite
d
ecalage arithm
etique `
a droite
commentaire
RdRsRt
RdRsImm
RdRsRt
RdRsImm
le non ou
RdRs Imm
RdRsRt
RdRsImm
RdRs ; n
egation
bit `
a bit
rang du d
ecalage
d
efini par Rs
rang du d
ecalage
d
efini par Rs
rang du d
ecalage
d
efini par Rs
IG3 2010-2011
215 / 238
instruction
lb Rt,@
chargement
et rangement
commentaire
chargement doctet
RtM[@]
lw Rt,@
ld Rt,@
Rt(M[@],M[@+1])
(Rt,Rt+1)
(M[@],M[@+1],M[@+2],
lwl Rt,@
la Rt,@
sb Rt,@
sw Rt,@
sd Rt,@
rangement doctet
rangement dun mot
rangement dun mot double
swl Rt,@
lwt Rt,@
li Rd,Imm
lui Rt,Imm
swt Rt,@
Clement Jonquet (Polytech Montpellier)
RdImm
RtImm21 6
Rt@
(utilisee
avec un label)
M[@]Rt
(M[@],M[@+1])Rt
(M[@],M[@+1],M[@+2],M[
(Rt,Rt+1)
IG3 2010-2011
216 / 238
type
transfert
de donn
ees
instruction
move Rd,Rs
mfhi Rd
mflo Rd
mfc1.d Rd,Fs
transfert
transfert depuis hi
transfert depuis lo
Transfert dun mot double depuis le
coprocesseur 1
commentaire
RdRs
Rdhi
Rdlo
[Rd,Rd+1][Fs,Fs+1]
IG3 2010-2011
217 / 238
type
instruction
seq Rd,Rs1,Rs2
sne Rd,Rs1,Rs2
sgt Rd,Rs1,Rs2
comparaison sge Rd,Rs1,Rs2
slt Rd,Rs1,Rs2
sle Rd,Rs1,Rs2
slti Rd,Rs,Imm
positionner
positionner
positionner
positionner
positionner
positionner
positionner
si
si
si
si
si
si
si
egal
diff
erent
sup
erieur
sup
erieur ou
egal
inf
erieur
inf
erieur ou
egal
inf
erieur `
a limm
ediat
commentaire
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 2010-2011
218 / 238
instruction
beq Rs,Rt,label
branchement
conditionnel
bne Rs,Rt,label
et saut
branchement si
egal
branchement si diff
erent
bgt Rs,Rt,label
branchement si sup
erieur
bge Rs,Rt,label
branchement si sup
erieur ou
egal
blt Rs,Rt,label
branchement si inf
erieur
ble Rs,Rt,label
branchement si inf
erieur ou
egal
j label
jal label
saut
saut avec lien
jr Rs
commentaire
if(Rs==Rt) goto
label
if(Rs!=Rt) goto
label
if(Rs>Rt) goto
label
if(Rs>=Rt) goto
label
if(Rs<Rt) goto
label
if(Rs<=Rt) goto
label
saut inconditionnel
saut incond. avec
$31@retour
saut inconditionnel
`
a ladresse stock
ee
dans Rs
IG3 2010-2011
219 / 238
type
instruction
exception
rfe
et
interruption
syscall
nop
retour dexception
appel syst`
eme
aucune op
eration
commentaire
restitue le registre
Etat
le
registre
$v0
contient le num
ero
de lappel syst`
eme
ne rien faire !
IG3 2010-2011
220 / 238
Fd|Fs|
abs.d Fd,Fs
instructions add.s Fd,Fs,Ft
flottantes
add.d Fd,Fs,Ft
bc1t label
bc1f
Fd|Fs|
RdRs+Rt
RdRs+Rt
branchement conditionnel `
a ladresse
du label
branchement conditionnel `
a ladresse
du label
drapeau flottant `
a1
si Fs==Ft
drapeau flottant `
a1
si Fs==Ft
drapeau flottant `
a1
si Fs<Ft
drapeau flottant `
a1
si Fs<=Ft
drapeau flottant `
a1
si Fs<Ft
drapeau flottant `
a1
si Fs<=Ft
abs.s Fd,Fs
label
c.eq.s Fs,Ft
test si
egalit
e simple
c.eq.d Fs,Ft
test si
egalit
e double
c.lt.s Fs,Ft
test si inf
erieur simple
c.le.s Fs,Ft
test si inf
erieur ou
egal simple
c.lt.d Fs,Ft
test si inf
erieur double
c.le.d Fs,Ft
test si inf
erieur ou
egal double
IG3 2010-2011
221 / 238
cvt.s.d Fd,Fs
instructions
flottantes
cvt.s.w Fd,Fs
cvt.d.w Fd,Fs
cvt.w.s Fd,Fs
cvt.w.d Fd,Fs
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
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
FdFsFt
FdFsFt
FdFs/Ft
FdFs/Ft
Fd- Fs
Fd- Fs
FdM[@]
FdM[@]
FdFs
FdFs
IG3 2010-2011
222 / 238
Exemple de branchement
Les instructions de test sappelle, en langage
Rs mod Rt
s1 ou Rs2
dpend 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
2008-2009
IG3 2010-2011
223 / 238
Sous-programmes
MIPS ne fournit pas dinstruction permettant de definir des
sous-programmes ou des macros. On doit utiliser des sauts/branchements
qui modifient le CO :
jal saute `a une etiquette et garde un lien sur le lieu dexecution dans
le registre $31 ;
j saute sans sauvegarder ladresse de retour ;
jr saute `a une adresse stockee dans un registre.
Lors de lappel de sous-programmes :
On utilise les registres 4 `a 7 pour le passage de param`etres ;
$t0-$t9 sont sauves par lappelant ;
$s0-$s7 sont sauves par lappele.
IG3 2010-2011
224 / 238
Equivalent
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
#
#
#
#
#
IG3 2010-2011
225 / 238
IG3 2010-2011
226 / 238
IG3 2010-2011
227 / 238
IG3 2010-2011
228 / 238
IG3 2010-2011
229 / 238
IG3 2010-2011
230 / 238