Accueil
Démo
Exercices formatifs
Travaux pratiques
Simulation libre
Sessions sauvegardées

TP3: Copie mémoire

Ce travail pratique vaut 4% de la note totale du cours. Comme le stipule le plan de cours, le travail doit être fait individuellement.

Objectifs

Ce travail pratique vise les objectifs suivants:

  1. Comprendre comment sont effectués les transferts de programme d'une partie de la mémoire à une autre;
  2. Expérimenter avec l'appel de fonctions en assembleur ARM;
  3. Implémenter des algorithmes simples en assembleur ARM;
  4. Comprendre comment fonctionnent les branchements en assembleur ARM.

Ce TP s'effectue en deux étapes : écrire du code et répondre à des question. Chacune des étapes vaut 50% de la note totale.

Étape 1: code (50% de la note)

Dans cette étape, vous aurez à implémenter 3 fonctions : EchangeRegistres, EstMultiple et CopieMemoire.

Fonction EchangeRegistres

La fonction EchangeRegistre échange le contenu des registres R0 et R1. Le code suivant (disponible dans le code fourni) vous permettra de tester le fonctionnement de votre fonction:

MOV R0, #7
MOV R1, #12
BL EchangeRegistres
ASSERT R0=12,R1=7

Après l'exécution de l'instruction BL EchangeRegistres, R0 devrait contenir 12 et R1 devrait contenir 7. Si ça n'est pas le cas, vous observerez une erreur sur le ASSERT.

Fonction EstMultiple

La fonction EstMultiple détermine si le nombre placé dans R1 est un multiple de 4 ou non. S'il est un multiple de 4, elle place 1 dans le registre R0. Dans le cas contraire, elle place 0 dans le registre R0. Comme pour la fonction EchangeRegistre, nous vous fournissons des tests pour vous permettre de valider votre fonction EstMultiple. Assurez-vous qu'elle fonctionne correctement avant de passer à la prochaine étape.

Fonction CopieMemoire

La fonction CopieMemoire doit copier une partie de la mémoire vers un autre emplacement. Cette opération est analogue à celle que fait votre ordinateur au démarrage, lorsqu'il copie d'abord une partie du système d'exploitation dans la RAM depuis votre disque dur, avant de laisser le contrôle au système en faisant un branchement vers les instructions fraichement copiées.

La fonction CopieMemoire reçoit les paramètres suivants :

  • R0 : Adresse de destination.
  • R1 : Adresse du premier mot de 32 bits à copier.
  • R2 : Adresse du dernier mot de 32 bits à copier.

Votre fonction doit fonctionner correctement si l'adresse du dernier mot est plus petite que celle du premier mot. Dans ce cas, aucun mot ne devrait être copié. De même, si l'adresse du dernier mot est la même que celle du premier mot, un seul mot devrait être copié. Testez ces cas vous-mêmes pour vous assurer que votre fonction respecte bien ces critères !

Toutes vos fonctions ne doivent pas modifier le contenu des registres autres que ceux qui sont utilisés comme argument de retour. Indice : vous disposez d’une pile de 32 octets, elle pourrait vous être fort utile !

Attention : dans ce TP, n'utilisez jamais les registres R7, R8 et R9. Si ces registres sont modifiés, il est possible que le reste du code ne fonctionne pas.

Afin de vous aider à déboguer votre code, il vous est possible de placer un point d'arrêt (breakpoint) directement dans la mémoire (plutôt que sur une ligne de l'éditeur de texte). Pour ce faire, cliquez sur la case mémoire correspondante tout en maintenant la touche «alt» enfoncée.

Lorsque vous avez terminé, téléchargez tout d'abord votre fichier source.txt sur votre ordinateur grâce au bouton « sauvegarder » dans le simulateur, puis téléversez ce même fichier dans la boîte de dépôt qui est disponible sur le portail des cours.

Étape 2: questions (50% de la note)

Une fois vos fonctions implémentées et testées, vous devez répondre à des questions sur le portail des cours. Chacune de ces questions est associée à un commentaire dans le code fourni qui marque l'instruction, la déclaration ou la ligne sur laquelle porte la question. Attention de ne pas effacer ces commentaires en éditant le code fourni. Contrairement au TP2, vous pouvez ajouter votre code sans craindre que cela n'affecte les réponses aux questions demandées.

Le questionnaire est disponible sur le portail des cours. N'oubliez pas de cliquer sur « soumettre » avant la date limite !

Liens importants

Remerciements

Merci à Étienne Tremblay d'avoir créé le TP original qui a servi d'inspiration pour celui-ci. Merci à Marc-André Gardner pour l'élaboration de la version « portail » du TP. Finalement, merci à Marc-André Gardner et à Yannick Hold-Geoffroy pour le simulateur ARM ! Merci à Jessica Déziel pour le design graphique.