Licence Sciences et technologies
Informatique/Informatique-Physique
Architecture des ordinateurs
TD num´ero 5 : Assembleur MIPS
Universit´e de Provence
Ann´ee 2007-2008
On rappelle les quelques instructions de l’assembleur MIPS suivantes :
Instruction Nom Signification
add $1, $2, $3 addition $1 $2 + $3
sub $1, $2, $3 soustraction $1 $2 - $3
addi $1, $2, val addition imm´ediate $1 $2 + val
mul $1, $2, $3 multiplication $1 $2 * $3
div $1, $2, $3 quotient $1 $2 / $3
rem $1, $2, $3 reste $1 $2 % $3
srl $1, $2, sa d´ecalage `a droite de sa bits $1 $2/2sa
xor $1, $2, $3 ou exclusif $1 $2 xor $3
ori $1, $2, val ou imm´ediat $1 $2 or val
li $1, val chargement imm´ediat $1 val
move $1, $2 copie de registres $1 $2
bne $1, $2, label branchement si 6= si ($1! = $2) alors aller `a l’etiquette label
beq $1, $2, label branchement si = si ($1 == $2) alors aller `a l’etiquette label
bgt $1, $2, label branchement si >si ($1 >$2) alors aller `a l’etiquette label
ble $1, $2, label branchement si si ($1 <= $2) alors aller `a l’etiquette label
j label saut aller `a l’etiquette label
jal label appel de proc´edure aller `a l’etiquette label et $ra P C + 4
jr $ra retour de proc´edure P C $ra
Exercice 1 Consid´erons le programme assembleur suivant :
lw $t0, 0($a0)
lw $t1, 0($a1)
bne $t0, $t1, toto
add $v0, $t0, $zero
j titi
toto: add $v0, $t1, $zero
titi:
Que fait le programme suivant ? Ecrire la fonction r´ealis´ee en C.
Exercice 2 En supposant que $a0=0x1234 et que $a1=0x3 quel est la valeur de $t0 apr`es
l’ex´ecutuon du programme suivant :
add $t0, $0, $0
toto: add $t0, $t0, $a0
addi $a1, $a1, -1
bne $a1 , $zero, toto
srl $t0, $t0, 4
Exercice 3 Ecrire un programme qui calcule la factorielle d’un nombre n. On suppose que nest
initialement dans le registre $a0 et qu’`a l’issue du programme, le r´esultat se trouve dans $a0.
Exercice 4 Supposons un processeur MIPS big-endian qui ex´ecute le programme suivant :
xor $t0, $t0, $t0
addi $t1, $t0, 0x50
a: lw $t2,0($t1)
beq $t2, $zero, c
slt $t3, $t0, $t2
beq $t3, $zero, b
lw $t0, 0($t1)
b: addi $t1, $t1, 4
j a
c: sw $t0, 0($t1)
a) Expliquez quelle est la fonction du programme.
b) Si l’´etat initial de la m´emoire est celui ci-dessous, quel est l’´etat de la mˆeme portion de
m´emoire apr`es l’ex´ecution du programme ?
Adresse
0x4E0x04
0x4F0xF C
0x50 0x01
0x51 0x23
0x52 0x45
0x53 0x00
0x54 0x00
0x55 0x00
0x56 0x11
0x57 0x34
0x58 0x00
0x59 0x00
0x5A0x00
0x5B0x00
0x5C0xF C
0x5D0xA0
Exercice 5 Ecrire un programme en assembleur MIPS qui r´ealise une multiplication russe, c’est
`a dire ´equivalent au programme C suivant :
int multrusse(int a, int b)
{int p = 0;
while (b>0)
{ if (b%2 == 1) p = p + a;
a = a * 2;
b = b / 2;
}
return p;
}
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !