100% ont trouvé ce document utile (1 vote)
1K vues22 pages

Exercice MIPS

Transféré par

mabrouk ilyes
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
1K vues22 pages

Exercice MIPS

Transféré par

mabrouk ilyes
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

MACRO - INSTRUCTIONS

 Une macro-instruction est une pseudo-instruction qui ne fait pas partie du jeu
d’instructions machine, mais qui est acceptée par l’assembleur qui la traduit en une
séquence de plusieurs instructions machine. Les macro-instructions utilisent le
registre $1 si elles ont besoin de faire un calcul intermédiaire. Il ne faut donc pas
utiliser ce registre dans les programmes.
 la Chargement d’une adresse dans un registre
 Syntaxe : la $rr, adr
 Description : L’adresse considérée comme une quantité non-signée est chargée dans le
registre.
 li Chargement d’un opérande immédiat sur 32 bits dans un registre.
Syntaxe : li
 $rr, imm
 Description : La valeur immédiate est chargée dans le registre $rr
 move Move register
 Syntaxe : move rx, ry

140
MACRO - INSTRUCTIONS

141
APPELS SYSTEME

 Pour réaliser certains traitements qui ne peuvent être exécutés que sous le
contrôle du système d’exploitation (typiquement les entrées/sorties consistant
à lire ou écrire un nombre, ou une chaîne de caractère sur la console), le programme
utilisateur doit utiliser un « appel système », grâce à l’instruction syscall.
 Syscall Appel à une fonction du système (en mode noyau).
 Syntaxe : syscall
 Description : Un appel système est effectué, par un branchement inconditionnel au
gestionnaire d’exception.
 Note : par convention, le numéro de l’appel système, c.-à-d. le code de la fonction
système à effectuer, est placé dans le registre $2.
 Pc <= 0x80000080

142
APPELS SYSTEME
 Un appel système se fait par l'instruction syscall.
 Les simulateurs fournissent un ensemble de services par l'intermédiaire de l'instruction d'appel syscall, dont le comportement
dépend de la valeur du registre $v0 :
 - si $v0 = 1, alors syscall affiche l'entier contenu dans le registre $a0 ;
 - si $v0 = 4, alors syscall affiche la chaîne de caractère dont l'adresse est contenue dans le registre $a0 ;
 - si $v0 = 5, alors syscall lit un entier à l'écran et met sa valeur dans le registre $v0.
 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 flottantes).
 Les appels système qui retournent des valeurs placent leurs résultats dans le registre $v0 (ou $f0 pour les résultats flottants).

143
144
V

145
Appel de fonctions dans MIPS

146
Appel de fonctions dans MIPS

147
148
149
Directives supportées par l'assembleur mips
Les directives (ou pseudo instruction) ne sont pas des instructions exécutables par la machine, mais
permettent de donner des ordres à l’assembleur. Pour les différencier des instructions, ces directives
commencent par le caractère « . ».

 Déclaration des sections text, data et stack


 Six directives permettent de spécifier quelle section de la
mémoire est concernée par les instructions, macro-
instructions ou directives qui les suivent.
 . data : la donnée sera stockée dans le segment des
données
 .text : la donnée sera dans le segment texte (i.e. avec les
instructions du programme .
 .stack : la donnée sera sur la pile.
 .k{text,data, stack} : la donnée sera dans le segment
{texte, données} du noyau du système d’exploitation.

150
Déclaration et initialisation de variables
Les directives suivantes permettent d’initialiser les valeurs contenues dans certaines sections de la
mémoire (uniquement text, data, ktext et kdata).

151
Compilation de Programme

152
Exercices
 Exercice 1

153
Exercice2

154
Exercice2 (suite)

155
Exercice 3

156
157
 Combien d’octets sont alloués au total (incluant les octets ignorés) dans le
segment de données ?
 Rep:32 octets

158
Exercice 4
Convertissez depuis le langage C vers l’Assembleur MIPS.
for (i=0; i<n; i++)
{
loop body
}
Solution
 Supposons que la variable i est stockée dans le registre $s0 et que n est stockée dans le
registre $s1. Dans ce cas, la boucle for peut être implémentée à l’aide du code assembleur
suivant :
li $s0, 0 #i=0
ForLoop:
bge $s0, $s1, EndFor # si s0 >= s1 alors saut à EndFor
loop body
addi $s0, $ s0, 1 # i++
j ForLoop
EndFor:

159
Exercice 5
i=0;
while (i<n)
{
loop body
i++;
}

Solution
li $s0, 0 #i=0
WhileLoop:
loop body
addi $s0, $s0, 1 # i++
blt $s0, $s1, WhileLoop # si s0<s1 alors saut à WhileLoop

160
Exercice 4

161

Vous aimerez peut-être aussi