wiki:SujetTD1

ALMO TD n°1 - Assembleur MIPS32 : Instructions de base

Préambule

Ce TD permet de se familiariser avec le jeu d'instructions du processeur MIPS32 pour écrire des premiers programmes en assembleur. Pour en profiter pleinement, il est conseillé d'avoir lu auparavant le document Architecture externe MIPS, et il faut impérativement se référer au document Langage d'assemblage MIPS.

1. Étude d'une instruction simple

Les registres $6 et $7 du processeur (registres sources) contiennent des valeurs connues. On souhaite ranger dans le registre $8 (registre destination) le résultat de la somme des valeurs contenues dans les registres $6 et $7.

  • Quelle instruction faut-il utiliser ?
  • Quels registres sont modifiés par l'exécution de cette instruction ?
  • Quelle est la différence entre les instructions add et addu ?

2. Chargement d'une valeur immédiate dans un registre

La plupart des instructions utilisent des valeurs contenues dans des registres comme opérandes pour les opérations arithmétiques et logiques.

  • Écrire le code permettant de charger la valeur 0x1234 dans le registre $16.
  • Même question avec la valeur 0x12345678 à charger dans le registre $19.
  • Même question avec la valeur -3 à charger dans le registre $22

3. Chargement dans un registre d'une valeur stockée en mémoire

Les données d'un programme sont en général des valeurs stockées dans la mémoire. Ainsi, tout traitement portant sur l'une de ces valeurs nécessite de charger cette valeur dans un registre.

  • Écrire les directives assembleur permettant de réserver en mémoire 2 mots de 32 bits aux adresses var1 et var2, et d'initialiser ces 2 mots avec les valeurs hexadécimales 0x12 et 0x34.
  • Écrire les instructions permettant de charger le contenu du mot d'adresse var2 dans le registre $18, l'adresse var2 étant placée dans le registre $8.

4. Addition de deux valeurs stockées en mémoire

  • Écrire un programme permettant de faire la somme entre deux nombres rangés en mémoire aux adresses var1 et var2, et de ranger le résultat en mémoire à l'adresse var3. La première instruction du programme (point d'entrée) doit avoir le label main, et le programme doit se terminer par l'appel système exit.

5. Itération : Somme de 1 à 10

  • Écrire, en utilisant une boucle, le programme assembleur qui stocke dans le registre $5 la somme des nombres de 1 à 10, en utilisant trois registres. On utilisera l'appel système exit pour terminer le programme. Comment peut-on optimiser la boucle pour ne faire intervenir que deux registres ?
Last modified 6 years ago Last modified on Sep 2, 2018, 4:15:25 AM