Tester et écrire du code assembleur
Chaque processeur a son langage assembleur. Un langage assez simple et bien documenté est celui des processeurs MIPS qui ont été principalement utilisés dans des systèmes embarqués (routeurs CISCO, consoles de jeux type Nintendo 64, Playstation 1 et 2, PSP...). Actuellement, ils sont fortement concurrencés par ARM.
Vous pouvez installer le simulateur MARS (https://computerscience.missouristate.edu/mars-mips-simulator.htm) si vous disposez d'une machine virtuelle Java.
Il existe également 2 solutions pour utiliser un assembleur en ligne :
Un simulateur PHP, travail de Alan Hogan, hébergé sur le serveur srv51 (utile pour les exercices 2 et 3 ci-dessous) et qui va gérer l’interactivité
Un assembleur simplifié, écrit en JavaScript, basé sur le travail de Alan Hogan :
Étudier et faire fonctionner les 2 exemples suivants
Question
Premier Exemple : Hello World
Voici par exemple un code permettant d'afficher « Hello World » :
.data
salutation: .asciiz "\nHello World!\n".text
#Ce qui suit est le texte d'un programme à assembler.globl main
main:
# Met dans $a0 l'adresse de la salutation, drapeau repérant la donnée qui a été introduite en ligne 2la $a0, salutation# Charge 4 dans $v0 ce qui indique qu'il faudra afficher une chaîneli $v0, 4
# Exécute l'action codée dans $v0syscall
# Lignes de terminaison propres du programmeli $v0, 10
jr $raIndice
la: Load Address : charge l'adresse de la requêteli: Load Immediate : charge la valeursyscall: appel du système d’exploitation
Indice
Sur MARS, on peut voir ce que contiennent les registres et la mémoire à chaque étape de l'exécution.
Sur la version en ligne, on récupère la sortie de l'assembleur en hexadécimal et on la copie dans la seconde page web pour simuler l'exécution.
Question
Deuxième Exemple : Doublement d'un nombre
Voici un programme plus sophistiqué interactif : on demande un nombre et on fait afficher son double.
Pour les 2 prochains exercices, on va utiliser la page web assembler.php de Alan Hogan, page PHP hébergée sur notre serveur srv51 (code source sur GitHub). Cette première page permettra de générer le code assembleur.
Dans un 2ème temps, il faudra utiliser le simulateur MIPS fourni par la page simulator.php, page PHP toujours sur notre serveur srv51 (code source sur GitHub).
.text
main:
# Demande d'entrer un nombreli $v0, 4
la $a0, lecturesyscall
# Lit le nombre et le stocke dans $s0li $v0, 5 # Code 5 : lecture d'une donnée
syscall
move $s0, $v0
# Double le nombre # En fait add Rr, R1, R2 stocke dans le registre Rr la somme des contenus des registres R1 et R2add $s0, $s0, $s0
# Affiche le texte d'introduction du résultatli $v0, 4
la $a0, affichagesyscall
# Affiche le nombre obtenuli $v0, 1
move $a0, $s0
syscall
# Termine le programmeli $v0, 0
syscall
.data
lecture: .asciiz "Entre un nombre : \n" affichage: .asciiz "\n Le double du nombre entrée est : "Indice
Dans le simulateur, il faudra mettre le nombre à entrer dans le champ Input Data.
Question
Proposer un code assembleur qui demande la saisie de 2 entiers et renvoie leur somme.
Indice
Il faudra donc demander 2 nombres et donc prévoir 2
lectureOn pourra utiliser
$t0et$t1comme registre pour ces 2 nombres et utiliser la fonctionaddvu précédemment.


