Vous êtes sur la page 1sur 5

Département d’informatique

Année 2013-2014
L2- S3

TD 5 : Architecture des ordinateurs


Solutionnaire
Exercice 1
Donner les numéros et le code binaire des registres généraux suivants :

Registres Numéro Code binaire sur 5 bits


$t0,$t1,$t2,…,$t7,$t8,$t9 8,9,10,…,15, 24, 25 01000, 01001, …, 01111,11000, 11001
$s0,…,$s7 16,17,…,23 10000,10001,…, 10111
$a0,…,$a3 4,…,7 00100,…, 00111
$v0,…,$v1 2,3 00010, 00011
$zero, $gp, $sp 0,28,29 00000, 11100, 11101
$ra 31 11111

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

 Etant donnée la séquence suivante :


f = (g + h) – (i + j);
Avec l’affectation respective des variables f, g, h, i, et j aux registres $s0, $s1, $s2, $s3, et
$s4. Quel est le code d’assemblage MIPS ?
Réponse
add $t0,$s1,$s2 # registre $t0 contient g + h
add $t1,$s3,$s4 # registre $t1 contient i + j
sub $s0,$t0,$t1 # f <- $t0 – $t1, qui est (g + h)–(i + j)

 Quelle est la différence entre les instructions de saut suivantes ?


j etiquette
jr $31
jal proc1
Réponse
- « j » saut inconditionnel vers « etiquette ».
Département d’informatique
Année 2013-2014
L2- S3

TD 5 : Architecture des ordinateurs


Solutionnaire
- « jr » (jump register) : saut vers l’adresse indiquée dans le registre.
- « jal » fait le branchement vers l’adresse proc1 de début de la procédure et mémorise
l’adresse de retour dans le registre ra (return address ou R31). Donc la procédure se
termine par l’instruction jr (jump register) avec comme argument 31 : jr $31.

 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];

Ecrire le code d’assemblage MIPS correspondant.

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.

lw $t0, 8($s3) # registre temporaire $t0  A[8]


add $s1,$s2,$t0 # g = h + A[8]

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:

2. if $15 ≥ 0 then bltz $15, suite slti $1, $15, 0


instructions bne $1, $0, suite
end_if
suite:

3. if $11 ≤ 0 then bgtz $11, suite slti $1, $11, 0


instructions beq $1, $0, suite
end_if
suite:

4. if $2 == $10 then bne $2, $10, suite


instructions
end_if
suite:
Département d’informatique
Année 2013-2014
L2- S3

TD 5 : Architecture des ordinateurs


Solutionnaire
 Ecrire les deux instructions MIPS de chaque condition de test ci-dessous. On utilisera
le registre $1 comme registre intermédiaire :
5. 1ième solution 2ième solution
6. if $21 < $17 then sub $1, $21, $17 slt $1, $21,$17
instructions bgez $1, suite beq $1, $0, suite
end_if
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
}

Même question pour le fragment suivant :

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

TD 5 : Architecture des ordinateurs


Solutionnaire
t2 = t2 +2×t1; sub $t3, $t1, N # t3 = t1 - N
} bgez $t3, fin # si t3 >= 0 saut vers l’étiquette fin
mult $t4, $t1, 2 # t4 = 2 ×t1
add $t2, $t2, $t4 # t2 = t2 + 2×t1
j for # retour vers l’étiquette for
fin: # suite du programme

Exercice 6
Ecrire en langage d’assemblage le fragment de code dans les cas suivants :

 Affichage d’un entier.


 Affichage d’une chaine de caractères.
 Lecture d’un entier.
 Lecture d’une chaine de caractère.
 Mettre fin à l’exécution du programme

Affichage Lecture Fin du programme
Entier li $v0, 1 li $v0, 5
li $a0, N syscall li $v0, 10
move $t0, $v0 Syscall
Chaine de caractères li $v0, 4 li $v0, 8
la $a0, str la $a0, buffer
li $a1, longueur de la chaîne de
caractère

Exercice 7
 Quelle est l’instruction MIPS du code machine suivant :

0x00AF8020

Réponse

0x00AF8020 = 0b0000 0000 1010 1111 1000 0000 0010 0000

Opcode rs rt rd offset fonction


000000 00101 01111 10000 00000 100000
add $s0, $a1, $t7

 Compléter le tableau suivant en précisant le format R, I ou J des opcodes puis le


langage machine des instructions à droite :

opcode format Langage machine Commentaire


add add $s1,$s2,$s3
sub sub $s1,$s2,$s3
lw lw $s1, 100($s2)
sw sw $s1, 100($s2)
Département d’informatique
Année 2013-2014
L2- S3

TD 5 : Architecture des ordinateurs


Solutionnaire
and and $s1,$s2,$s3
or or $s1,$s2,$s3
beq beq $s1,$s2, 100
bne bne $s1,$s2, 100
slt slt $s1,$s2, $s3
j j 10000
Taille du
champ
R
I
J
Réponse

opcode format Langage machine Commentaire


add R 0 18 19 17 0 32 add $s1,$s2,$s3
sub R 0 18 19 17 0 34 sub $s1,$s2,$s3
lw I 35 18 17 100 lw $s1, 100($s2)
sw I 43 18 17 100 sw $s1, 100($s2)
and R 0 18 19 17 0 36 and $s1,$s2,$s3
or R 0 18 19 17 0 37 or $s1,$s2,$s3
beq I 4 17 18 25 beq $s1,$s2, 100
bne I 5 17 18 25 bne $s1,$s2, 100
slt R 0 18 19 17 0 42 slt $s1,$s2, $s3
j J 2 2500 j 10000
Taille du 6 5 5 5 5 6
champ
R Opcode rs rt rd offset Fonction
I Opcode rs rd Adresse
J Opcode adresse

Vous aimerez peut-être aussi