Académique Documents
Professionnel Documents
Culture Documents
Année 2013-2014
L2- S3
Exercice 2
Commenter le code suivant :
add $t0,$t1,$t2 # $t0 = $t1 + $t2; addition des entiers signés (complément à 2)
sub $t2,$t3,$t4 # $t2 = $t3 - $t4 ; soustraction des entiers signés (complément à 2)
addi $t2,$t3, 5 # $t2 = $t3 + 5; addition immédiat" (il n’existe pas sub immédiat)
addu $t1,$t6,$t7 # $t1 = $t6 + $t7; addition des entiers non signés
subu $t1,$t6,$t7 # $t1 = $t6 + $t7; soustraction des entiers non signés
mult $t3,$t4 # multiplication 32-bits, les nombres sont dans $t3 et $t4,
# le résultat 64-bits rangé dans des registres spéciaux Lo and Hi
# (Hi,Lo) = $t3 * $t4
div $t5,$t6 # Lo = $t5 / $t6 (quotient)
# Hi = $t5 mod $t6 (reste)
mfhi $t0 # transfert de la valeur du registre spécial Hi vers $t0: $t0 = Hi
mflo $t1 # transfert de la valeur du registre spécial Lo vers $t1: $t1 = Lo
move $t2,$t3 # $t2 = $t3
Exercice 3
Supposons que A est un ensemble de 100 mots et que le compilateur a associé les
variables g et h aux registres $s1 et $s2. Supposons aussi que l'adresse du premier élément
du tableau A est en $s3.
g = h + A[8];
Réponse
Bien qu'il y ait une seule opération dans cette déclaration d'affectation, l'un des opérandes est
en mémoire, donc il faut d'abord transférer A[8] à un registre. L'adresse de cet élément du
tableau est la somme de la base du tableau A, qui se trouve dans le registre $s3, plus le
nombre de décalage 8 pour sélectionner le premier élément de A. Les données doivent être
placées dans un registre temporaire pour une utilisation dans l'instruction suivante.
Exercice 4
Ecrire l’instruction MIPS correspondante à chaque. Dans tous les cas l’étiquette
"suite" figurera dans l’instruction de branchement.
1. if $7 < 0 then begz $7, suite slti $1, $7, 0 # Si $7< 0 alors mettre 1 dans $1
instructions beq $1, $0, suite # Si $1 =0 (c-a-d. $7>0)
end_if aller à « suite »
suite:
7. if $18 ≥ $13 then sub $1, $18, $13 slt $1, $18, $13
instructions bltz $1, suite bne $1, $0, suite
end_if
suite:
8. if $21 > $17 then sub $1, $21, $17 slt $1, $21, $17
instructions blez $1, suite bne $1, $0, suite
end_if
suite:
9. if $18 ≤ $13 then sub $1, $18, $13 slt $1, $13, $18
instructions bgtz $1, suite bne $1, $0, suite
end_if
suite:
Exercice 5
Ecrire en langage d’assemblage MIPS le fragment C suivant :
if (t1 < t2) slt $t0,$t1,$t2 # Si $t1<$t2 alors mettre 1 dans $t0
{ bne $t0, $zero, etiquette # branchement vers etiquette si $t0 ≠ 0
t3 = t1 ; move $t3, $t2 # transfert du contenu de $t2 dans $t3
else etiquette:
t3 = t2 ; move $t3, $t1 # transfert du contenu de $t1 dans $t3
}
t2 = 0; li $t2, 0 # t2 = 0
while (t1 > 0) while: # début de la boucle
{ blez $t1, fin # si t1<=0 saut vers l’étiquette fin
t2 = t2 + t1; add $t2, $t2, $t1 # t2 = t2 + t1
t1 = t1-1 ; sub $t1, $t1, 1 # t1 = t1-1
} j while # retour vers l’étiquette while
fin: # suite du programme
t2 = 0 ; li $t1, 0 # t1 = 0
for (t1=1 ; t1< N ; t1++) li $t2, 0 # t2 = 0
{ for: # début de la boucle
Département d’informatique
Année 2013-2014
L2- S3
Exercice 6
Ecrire en langage d’assemblage le fragment de code dans les cas suivants :
Exercice 7
Quelle est l’instruction MIPS du code machine suivant :
0x00AF8020
Réponse