Licence Sciences et technologies Informatique/Informatique

publicité
Licence Sciences et technologies
Informatique/Informatique-Physique
Architecture des ordinateurs
Université de Provence
Année 2007-2008
TD numéro 5 : Assembleur MIPS
On rappelle les quelques instructions de l’assembleur MIPS suivantes :
Instruction
add $1, $2, $3
sub $1, $2, $3
addi $1, $2, val
mul $1, $2, $3
div $1, $2, $3
rem $1, $2, $3
srl $1, $2, sa
xor $1, $2, $3
ori $1, $2, val
li $1, val
move $1, $2
bne $1, $2, label
beq $1, $2, label
bgt $1, $2, label
ble $1, $2, label
j label
jal label
jr $ra
Nom
addition
soustraction
addition immédiate
multiplication
quotient
reste
décalage à droite de sa bits
ou exclusif
ou immédiat
chargement immédiat
copie de registres
branchement si 6=
branchement si =
branchement si >
branchement si ≤
saut
appel de procédure
retour de procédure
Signification
$1 ← $2 + $3
$1 ← $2 - $3
$1 ← $2 + val
$1 ← $2 * $3
$1 ← $2 / $3
$1 ← $2 % $3
$1 ← $2/2sa
$1 ← $2 xor $3
$1 ← $2 or val
$1 ← val
$1 ← $2
si ($1! = $2) alors aller à l’etiquette label
si ($1 == $2) alors aller à l’etiquette label
si ($1 > $2) alors aller à l’etiquette label
si ($1 <= $2) alors aller à l’etiquette label
aller à l’etiquette label
aller à l’etiquette label et $ra ← P C + 4
P C ← $ra
Exercice 1 Considérons le programme assembleur suivant :
lw
lw
bne
add
j
toto: add
titi:
$t0,
$t1,
$t0,
$v0,
titi
$v0,
0($a0)
0($a1)
$t1, toto
$t0, $zero
$t1, $zero
Que fait le programme suivant ? Ecrire la fonction réalisée en C.
Exercice 2 En supposant que $a0=0x1234 et que $a1=0x3 quel est la valeur de $t0 après
l’exécutuon du programme suivant :
toto:
add $t0, $0, $0
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 n est
initialement dans le registre $a0 et qu’à l’issue du programme, le résultat se trouve dans $a0.
Exercice 4 Supposons un processeur MIPS big-endian qui exécute le programme suivant :
a:
b:
c:
xor $t0, $t0, $t0
addi $t1, $t0, 0x50
lw $t2,0($t1)
beq $t2, $zero, c
slt $t3, $t0, $t2
beq $t3, $zero, b
lw $t0, 0($t1)
addi $t1, $t1, 4
j a
sw $t0, 0($t1)
a) Expliquez quelle est la fonction du programme.
b) Si l’état initial de la mémoire est celui ci-dessous, quel est l’état de la même portion de
mémoire après l’exécution du programme ?
Adresse
0x4E
0x04
0x4F
0xF C
0x50
0x01
0x51
0x23
0x52
0x45
0x53
0x00
0x54
0x00
0x55
0x00
0x56
0x11
0x57
0x34
0x58
0x00
0x59
0x00
0x5A
0x00
0x5B
0x00
0x5C
0xF C
0x5D
0xA0
Exercice 5 Ecrire un programme en assembleur MIPS qui réalise une multiplication russe, c’est
à dire équivalent 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
Téléchargement