Laboratoire 3 - Éléments d'assembleur

Sommaire

Somme3

Écrivez un programme somme3.s qui lit trois nombres et affiche leur somme

  • Utilisez les appels systèmes RARS
  • Mettez les .eqv
  • N’oubliez pas le Exit

Testez en RARS avec et sans l’option « Popup dialog for input syscalls ».

Max3

Écrivez un programme max3.s qui lit trois nombres et affiche le plus grand des 3.

Note: on peut s’en sortir avec seulement 2 comparaisons (instructions RISC-V branch).

Milieu

Écrivez un programme milieu.s qui lit trois nombres et affiche celui qui est compris entre les deux autres.

Notes:

  • Si un nombre est répété deux fois, c’est forcément celui-ci qu’il faut afficher.
  • On peut s’en sortir avec seulement trois comparaisons.

Strlen

Écrivez un programme strlen.s qui lit des caractères jusqu’à '.' et affiche le nombre de caractères qui ont été saisis (sans compter le . final).

Exemple « Hello, World123. » doit donner 15.

Chiffre de César

Écrivez un programme cesar.s qui lit un nombre puis des lettres majuscules et les affiche décalés d’autant dans l’ordre alphabétique. Le décalage est circulaire, A est la lettre qui suit Z. Le programme s’arrête quand un caractère qui n’est pas une lettre majuscule est rencontré.

Exemples:

  • 10 BONJOUR.LYXTYEB
  • -10 LYXTYEB.BONJOUR
  • 26 BONJOUR.BONJOUR
  • 13 BONJOUR.OBAWBHE
  • 13 OBAWBHE.BONJOUR

Note: le cas 13 (appelé ROT13) est intéressant car il est son propre inverse.

Fibonacci

Écrivez un programme fib.s qui lit un nombre et affiche le terme correspondant de la suite de Fibonacci.

Pseudocode:

// F(0) = 0 ; F(1) = 1 ; et F(n) = F(n-1) + F(n-2) pour tout n > 1
n = lireNombre();

a = 0; // nombre courant
b = 1; // nombre suivant
i = 0; // compteur
while(i<n) {
	t = a + b;
	a = b;
	b = t;
	i++;
}

afficherNombre(a);

LibS (extra)

somme3-lib

Réécrivez le programme somme3.s mais cette fois en utilisant les routines de la bibliothèque libs.s

Testez votre programme avec RARS.

  • Ayez un onglet additionnel ouvert avec libs.s
  • Assurez-vous que l’option « Assemble all files currenlty open » soit active.

GCC + QEMU

Compilez votre programme en ligne de commande dans un terminal avec gcc (compilation croisée) et exécutez-le avec qemu.

$ riscv64-linux-gnu-gcc somme3.s libs.s -static -nostdlib -o somme3
$ qemu-riscv64 ./somme3

Notes:

  • Vous devriez avoir un warning à propos du symbole _start manquant. Ce n’est pas un problème.
  • L’option -static sert à générer un exécutable sans bibliothèque dynamique. Cela rend plus simple l’exécution avec qemu.
  • L’option -nostdlib désactive l’utilisation des bibliothèques standard du C et de GCC. Cela permet de compiler car nos programmes sont autonomes (libs.s fournit les services nécessaires).

Super-extra

Réécrivez tous les programmes du lab en utilisant libs.s au lieu des appels systèmes de RARS. Testez ces programmes avec RARS et avec GCC et QEMU.