ASSEMBLEUR MIPS Exercice 1. Premier programme. test: div $t0

ASSEMBLEUR MIPS
Exercice 1. Premier programme.
1test: div $t0, $t1
2mfhi $t2
3beq $t2, $0, end
4move $t0, $t1
5move $t1, $t2
6j test
7end: move $a0, $t1
8li $v0, 1
9syscall
10 li $v0, 10
11 syscall
(1) On suppose que $t0 >$t1. Que fait ce programme ?
(2) Compl´eter le d´ebut du programme : demander deux nombres `a l’utilisateur, et les ranger
dans l’ordre d´ecroissant dans $t0 et $t1.
Exercice 2. Traduction.
Traduire les morceaux de code suivants en assembleur :
(1) if a mod 2 = 0 then
a:=a/2
else a := a - 1;
(2) somme := 0;
a := 1;
while a < 10 do
begin
somme := somme + a * a;
a:=a+1;
end
Exercice 3. Fibonacci.
On suppose que $t0 contient un nombre nentr´e par l’utilisateur. ´
Ecrire une suite d’instruction
qui calcule le n-i`eme nombre de Fibonacci, d´efini par
F0= 1
F1= 1
Fn+1 =Fn+Fn1pour n > 0.
Exercice 4. Entr´ee, sortie.
(1) ´
Ecrire un programme qui demande un entier `a l’utilisateur, calcule le carr´e, renvoie le
r´esultat, et termine proprement.
(2) Traduire le code suivant en assembleur :
printf("Le joueur %i s’appelle %s\n", a, s);
o`u aest un entier et sun char*.
Liste partielle d’op´
erations MIPS
Les noms reg,resultat,arg1, arg2 d´esignent toujours des registres, valeur des entiers, adresse
des points d’accroche d´efinis dans le programme ou bien des expressions du type “4($t3)”.
lw reg, adresse charge la valeur point´ee par l’adresse (4 octets)
sw reg, adresse sauvegarde le registre `a l’adresse
li reg, valeur met la valeur dans le registre
la reg, adresse copie l’adresse elle-mˆeme, comme un pointeur
move reg, reg copie le registre de droite vers celui de gauche
op r´esultat, arg1, arg2 o`u op ∈ {add, sub, and, or, xor}
opi r´esultat, arg1, valeur o`u opi ∈ {addi, andi, ori, xori}
mult arg1, arg2 met le produit dans Hi et Lo
mfhi reg r´ecup`ere la valeur de Hi
mflo reg r´ecup`ere la valeur de Lo
div arg1, arg2 met le quotient dans Lo
et le reste dans Hi
jadresse saute `a l’adresse
jal adresse idem, enregistre l’adresse de retour dans $ra
jr reg saute `a l’adresse contenue dans le registre
beq arg1, arg2, adresse saute si arg1 =arg2 ;
mˆeme format pour {bne, bgt, bge, blt, ble},
respectivement {6=, >, , <, ≤}.
syscall effectue un appel syst`eme selon la valeur de $v0 :
si $v0 = 1, affiche l’entier $a0,
si $v0 = 4, affiche une chaˆıne poinee par $a0,
si $v0 = 5, lit un entier et le met dans $v0,
si $v0 = 10, termine le programme.
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 !