Vous êtes sur la page 1sur 5

Polytech' Montpellier

ARCHITECTURE DES ORDINATEURS

IG3 2010-2011

TD 3 : Introduction au langage MIPS


Clment Jonquet
{jonquet@lirmm.fr}

Environnement de travail
Nous allons utiliser un simulateur pour le langage MIPS. tant donn la grande utilisation
de MIPS, plusieurs simulateurs sont disponibles (e.g., SPIM, MARS, MIPSter, etc.). Si vous
tes sur votre machine personnelle vous pouvez utiliser SPIM ou MARS ; si vous tes sur une
machine Polytech, il vous faut utiliser MARS, qui est une application Java et qui ne ncessite
pas d'installation.
 SPIM (http://pages.cs.wisc.edu/~larus/spim.html) de James R. Larus (Microsoft,
Univ. of Wisconsin) ;
 MARS (http://courses.missouristate.edu/KenVollmar/MARS/index.htm) de Ken Vollmar (Missouri State Univ.).
Les 2 environnements de programmation proposent un mode "step-by-step" qui permet d'excuter les instructions les unes aprs les autres. Ce mode va nous intresser pour comprendre les
mcanismes de la programmation assembleur. Quel que soit l'environnement choisi, les gnralits de MIPS ncessaires au TD sont rappels ci-aprs.

Gnralits MIPS
Syntaxe

 Les commentaires commencent par le symbole # et se terminent la n de la ligne.


 Un identicateur est une squence de caractres alphanumriques, de souligns (_) et de
points (.), qui ne commence pas par un chire.
 Les codes opration d'instruction sont des mots rservs qui ne peuvent pas tre utiliss
comme identicateurs.
 Les tiquettes sont dclares en les plaant au dbut d'une ligne et en les faisant suivre du
symbole :.
 Les nombres sont en base 10 par dfaut. S'ils sont prcds de 0x ils sont interprts comme
hexadcimaux.
 Les chanes de caractres sont encadres par des doubles apostrophes ".
 Certains caractres spciaux dans les chanes de caractres suivent la convention C :
 retour-chariot : \n
 tabulation : \t
 guillemet : \"
Directives

.ascii str Enregistre en mmoire la chane de caractres str, mais ne la termine pas par un

caractre nul.
.asciiz str Enregistre en mmoire la chane de caractres str et la termine par un caractre
nul.

Polytech' Montpellier

ARCHITECTURE DES ORDINATEURS

IG3 2010-2011

.data<@> Les lments qui suivent sont enregistrs dans le segment de donnes. Si l'argument

optionnel @ est prsent, les lments qui suivent sont enregistrs partir de l'adresse @.
.byte b1 , . . . ,bn Enregistre les n valeurs dans des octets conscutifs en mmoire.
.word w1 , . . . ,wn Enregistre les n quantits 32 bits dans des mots conscutifs en mmoire.
.float f1 , . . . ,fn Enregistre les n nombres ottants simples prcision dans des emplacements
mmoire conscutifs.
.text <@> Les lments qui suivent sont placs dans le segment de texte de l'utilisateur. Dans
SPIM, ces lments ne peuvent tre que des instructions ou des mots. Si l'argument optionnel @ est prsent, les lments qui suivent sont enregistrs partir de l'adresse @.
.globl sym Dclare que le symbole sym est global et que l'on peut y faire rfrence partir
d'autres chiers.
Les registres

Il existe 32 registres de 32 bits numrots $0, . . . , $31 ; les registres peuvent tre accd soit
par leur numro soit par leur nom.
Nom
$zero
$at
$v0,$v1

Numro
0
1
2-3

$a0,. . .,$a3
$t0,. . .,$t7
$s0,. . .,$s7
$t8,$t9
$k0,$k1

4-7
8-15
16-23
24-25
26-27

$gp
$sp
$fp
$ra

28
29
30
31

Description
Constante 0
Rserv l'assembleur
valuation d'une expression et rsultats
d'une fonction
Arguments de sous-programmes
Valeurs temporaires (non prserves)
Valeurs temporaires (prserves)
Valeurs temporaires (non prserves)
Rserv pour les interruptions (i.e., systme
d'exploitation)
Pointeur global
Pointeur de pile
Pointeur de bloc
Adresse de retour

Appel de procdure - conventions

 Par convention, lors de l'appel de procdure, les registres $t0,. . .,$t9 sont sauvegards par
l'appelant et peuvent donc tre utiliss sans problme par l'appel. Les registres $s0,. . .,$s7
doivent quand eux tre sauvegards et restitus exact par l'appel.
 La pile croit des adresses hautes vers les adresses basses : on soustrait $sp pour allouer
de l'espace dans la pile, on ajoute $sp pour rendre de l'espace dans la pile.
 Les dplacements dans la pile se font sur des mots mmoire entiers (multiples de quatre
octets).
 Lors du passage de passage de paramtres : tout paramtre plus petit que 32 bits est
automatiquement promu sur 32 bits.
 Les quatre premiers paramtres sont passs par les registres $a0,. . .,$a3. Les paramtres
supplmentaires sont passs dans la pile.
 Toute valeur de format infrieur ou gal 32 bits est retourne par le registre $v0 (sur 64
bits $v1 est utilis avec $v0).

Polytech' Montpellier

ARCHITECTURE DES ORDINATEURS

IG3 2010-2011

Gestion de la mmoire

Les appels systme

Les simulateurs fournissent un ensemble de services par l'intermdiaire de l'instruction d'appel syscall. Pour demander un service on charge le code du service (voir tableau ci-dessous)
dans le registre $v0 et ses arguments dans les registres $a0,...,$a3 (ou $f12 pour les valeurs
ottantes). Les appels systme qui retournent des valeurs placent leurs rsultats dans le registre
$v0 (ou $f0 pour les rsultats ottants).
service
print_int
print_oat
print_double
print_string
read_int
read_oat
read_double
read_string
sbrk
exit

code
1
2
3
4
5
6
7
8
9
10

arguments

$a0 = entier
$f12 = ottant simple prcision
$f12 = ottant double prcision
$a0 = chane de caractres

$a0 = tampon, $a1 = longueur


$a0 = quantit

rsultat

un entier dans $v0


un ottant simple dans $v0
un ottant double dans $v0
une adresse dans $v0

Par exemple, le code suivant imprime  la rponse = 5 .


str:
main:

.data
.asciiz
.text
li
la
syscall
li
li
syscall

"la rponse = "


$v0,4
$a0,str

#code appel systme print_str


#adresse chane imprimer
#on imprime la chane
#code appel systme print_int
#entier imprimer
#on l'imprime

$v0,1
$a0,5

Polytech' Montpellier

ARCHITECTURE DES ORDINATEURS

IG3 2010-2011

Questions
Question 1
Enregistrer dans un chier et excuter le code ci-dessus.
(a) A quelle adresse est charge le dbut de la chane de caractre str ?
(b) Quelle est la signication des instructions lui $1,4097 et ori $4,$1, 0, rajoutes par l'assembleur ?
(c) Rajouter une autre chane de caractre avant str dans le code. Que devient l'instruction ori ?
Question 2
Traduire en MIPS les aectations suivantes en continuant le programme ci-dessous :
.data
.asciiz ", "
.text
li
$t1,
li
$t2,
li
$t3,
add
$a0,
sub
$a0,
li
$v0,
syscall
li
$v0,
la
$a0,
syscall
(a) a0:= t1+4
(b) a0:= t1*8
(c) a0:= (t1+t2)/4+t3
sep:

10
50
15
$t1, $t2
$a0, $t3
1
4
sep

# a0:= t1+t2-t3
# a0=45

mod 2

(d) Comment viter de rpter systmatiquement le code d'achage ?


Question 3
crire le code ci-dessous en MIPS et excuter le programme avec des valeurs e.g., i=2, j=2, g=7,
h=3
if (i=j) then
f := g+h;
else
f := g-h;
endif
print f

Question 4
Considrer les tableaux T1 et T2 de taille 10 respectivement initialiss {1,2,3,4,5,6,7,8,9,10} et
{10,10,10,10,10,10,10,10,10,10}.
(a) Coder en MIPS la boucle suivante et excuter la sur les tableaux T1 et T2.
c:=10
for i in 1..10 loop
T1[i] := T2[i] + c;
end loop;

(b) Combien y-a-t-il d'instructions excutes pendant l'excution de ce code ? Combien de rfrences
(lw, sw) des donnes en mmoire seront faites pendant l'excution ?
Question 5
crire un programme MIPS qui calcule le carr d'un nombre saisi au clavier l'aide d'un procdure
square dnie une tiquette donn.
Question 6
crivez un programme MIPS inversant l'ordre des octets d'un mot de 4 octets O1 O2 O3 O4 (e.g.,
0A0B0C0D) charg au dbut du programme dans le registre $a0. A la n du programme, le registre
$v0 doit contenir le mot O4 O3 O2 O1 o les octets sont inverss (e.g., 0D0C0B0A).

Polytech' Montpellier

ARCHITECTURE DES ORDINATEURS

Question 7
crire la fonction factorielle et le code suivant en MIPS.

main () {
printf ("The factorial of 10 is ", fact (10));
}
int fact (int n) {
if (n < 1)
return (1);
else
return (n * fact (n - 1));
}

IG3 2010-2011