Académique Documents
Professionnel Documents
Culture Documents
COMPILATION ET LANGAGE
TP Arithmétique
.text
main:
...
li $v0, 10
syscall
.data
...
La partie qui suit l'annotation .text est le code du programme, et celle qui suit
l'annotation .data concerne des données statiques. L'étiquette main indique le
début du programme principal. L'appel à syscall déclenche une action en
fonction de la valeur stockée dans le registre $v0. En l'occurrence avec la
valeur 10, le programme s'arrête (il s'agit de l'appel exit).
Documentation.
•4+6
• 21 * 2
•4+7/2
• 3 – 6 * (10 / 5)
Indications
• Pour placer une constante entière n dans un registre $r, vous pouvez
utiliser l'instruction li $r, n.
• Pour afficher un entier, il existe un appel système qu'on déclenche avec
l'instruction MIPS syscall quand la valeur stockée dans le registre $v0 est
1. Cet appel affiche sur la sortie standard l'entier contenu dans le registre
$a0.
Éléments fournis
./compilo tests/arith1.ml
./compile -i tests/arith1.ml
Question
Indications
ENI-ABT-BAMAKO Chargé du cours : Dr Yacouba GOITA
Pour l'affichage, le module Printf de Caml dispose d'une fonction printf que
l'on peut utiliser de manière similaire à la fonction printf du langage C.
li $a0, 1 # Calcul de 1
sub $sp, $sp, 4 # Sauvegarde sur la pile
sw $a0, 0($sp)
li $a0, 2 # Calcul de 2
sub $sp, $sp, 4 # Sauvegarde sur la pile
sw $a0, 0($sp)
li $a0, 3 # Calcul de 3
lw $a1, 0($sp) # Chargement de 2 depuis la pile
Le code généré dans la version précédente est très mauvais : il n'utilise que les
deux registres $a0 et $a1, mais demande en contrepartie énormément de
manipulations de la pile qui auraient pu être évitées par l'utilisation de
registres supplémentaires. C'est d'autant plus fâcheux que les instructions
d'écriture et de lecture en mémoire sw et lw sont particulièrement coûteuses
sur un processeur réel.
Question
Indication
Question bonus
Question
Question bonus
Question
Remarque
Cette technique est due à Sethi et Ullman, et il a été prouvé qu'elle était
optimale : elle organise le calcul du résultat d'une expression d'une
manière qui utilise le plus petit nombre possible de registres. Cependant...
Question bonus
ENI-ABT-BAMAKO Chargé du cours : Dr Yacouba GOITA
Question
Question bonus