Assembleur
L'EC Info0103 (Eléments d'architecture des ordinateurs) est dispensé en Licence 1 MI. En travaux pratiques, les étudiants manipulent un programme qui simule le comportement d'un processeur simplifié.
Le programme
Téléchargement
- Les binaires (en Java) :
archive tar.gz
archive zip
- Les sources (en Java) :
archive tar.gz
archive zip
Compilation et exécution
Si vous avez téléchargé la version binaire, il suffit d'exécuter la commande :java Lanceur
javac Lanceur.java (les autres classes Java sont normalement compilées)
java Lanceur
Exécution du programme
Le programme prend en paramètre le nom du fichier à analyser. Ce fichier est un document texte dans lequel est écrit le programme en code assembleur (sans les numéros de ligne). Si aucune option n'est spécifiée, le programme analyse le code et affiche à l'écran les instructions. D'autres options peuvent être spécifiées afin d'exécuter le code, de le convertir en hexadécimal ou en binaire, ou de l'exécuter en mode pas-à-pas.
- java Lanceur prog.txt : analyse et affiche le contenu du fichier prog.txt
- java Lanceur prog.txt -exec : exécute le code contenu dans prog.txt
- java Lanceur prog.txt -trace : exécute le code contenu dans prog.txt et affiche la trace d'exécution
- java Lanceur prog.txt -pas : démarre le mode d'exécution pas-à-pas sur le code contenu dans prog.txt
- java Lanceur prog.txt -hex : donne la représentation héxadécimale du code contenu dans prog.txt
- java Lanceur prog.txt -bin : donne la représentation binaire du code contenu dans prog.txt
Utilisation du programme
Mode d'exécution normale
Le mode d'exécution normale réalise l'exécution complète du code assembleur. Seules les entrées et les sorties sont affichées à l'écran.
Il est possible de mettre des valeurs dans certaines cases mémoire au moment de l'exécution en passant ces valeurs en ligne de commande. Pour cela, il faut ajouter après l'option -exec des couples mem=val où mem est un numéro de case mémoire (0 à 255) et val une valeur (0 à 255) à mettre dans la case mémoire. Ces deux valeurs peuvent être soit en décimal soit en hexadécimal. La notation retenue pour l'hexadécimal est de placer un # devant. A noter que si c'est le numéro de case qui est en hexadécimal, l'invite de commande peut vous obliger à mettre l'initialisation entre apostrophes comme montré dans l'exemple suivant :
java Lanceur toto1.txt -exec 11=2 12=#ab '#a=#a'
Mode d'exécution avec trace
Le mode d'exécution avec trace réalise l'exécution complète du code assembleur tout en affichant un tableau montrant la trace de l'exécution. A noter que l'utilisateur doit potentiellement saisir des données lors de l'exécution lorsque l'instruction In est rencontrée. Voici un exemple d'exécution :
Pour ce mode, il est aussi possible de mettre des valeurs dans certaines cases mémoire au moment de l'exécution (voir section précédente).
Mode d'exécution pas-à-pas
Le mode d'exécution pas-à-pas permet d'exécuter un programme instruction après instruction. Il nécessite donc une intervention de l'utilisateur pour passer à l'instruction suivante. L'utilisateur peut aussi modifier les valeurs de l'ensemble des registres du processeur (Zero Flag, Carry Flag, Compteur Ordinal et Accumulateur) après chaque instruction.
Lors de l'exécution du programme, l'interface suivante apparaît :
- 0 - Reset : remet à 0 tous les compteurs
- 1 - Suivant : exécute l'instruction suivante du programme
- 2 - Modifier memoire : permet de modifier la valeur d'une case mémoire
- 3 - Modifier acc : modifie la valeur de l'accumulateur
- 4 - Modifier ZF : modifie la valeur du registre ZF (Zero Flag)
- 5 - Modifier CF : modifie la valeur du registre CF (Carry Flag)
- 6 - Modifier CO : modifie la valeur du registre CO (Compteur Ordinal)
- 7 - Affiche l'algorithme : affiche les instructions du code assembleur
- -1 - Quitter : quitte le programme
Lorsque toutes les instructions du code assembleur sont exécutées (jusqu'à END), le programme redémarre automatiquement : il se met alors en position Reset.
Conversion en hexadécimal et en binaire
Dans le cadre du module Info 103, il est nécessaire pour les étudiants de savoir convertir un code assembleur en hexadécimal et en binaire. Le programme est capable de convertir un code assembleur avec les options -hex (pour la convertion en hexadécimal) et -bin pour la conversion en binaire.
Exemples de code assembleur
Programme d'entrée/sortie
Ce programme demande à l'utilisateur d'entrer une valeur et affiche à l'écran le résultat de la multiplication par 2 de ce nombre.
|
0: IN 1: MUL 2 2: OUT 5: END |
Télécharger ce programme :
prog1.txt
(faire bouton droit sur le lien et Enregistrer la cible sous...)
Une conditionnelle simple
Ce programme compare la valeur contenue dans la case mémoire 0 à 10 (n'oubliez pas d'y affecter une valeur en ajoutant après le paramètre -exec, la chaîne 0=val où val est une valeur). Si la valeur est inférieure ou égalle à 10, alors le programme ajoute 5 à la case mémoire 0. Sinon, il retire 5 à sa valeur.
|
0: LOAD Mem[0] 1: CMP 10 2: JC 5 3: ADD 5 4: JMP 6 5: SUB 5 6: STORE Mem[0] 7: END |
Télécharger ce programme :
prog2.txt
(faire bouton droit sur le lien et Enregistrer la cible sous...)
Historique
Version du 04/12/2008
- Les binaires (en Java) :
archive tar.gz
archive zip
- Les sources (en Java) :
archive tar.gz
archive zip
- Amélioration de l'affichage en mode exécution
- Modification de l'aide (aide sur le mode trace)
Version du 21/11/2008
- Les binaires (en Java) :
archive tar.gz
archive zip
- Les sources (en Java) :
archive tar.gz
archive zip
- Ajout du mode trace (séparation entre exec et trace)
- Affichage de l'écran à droite du tableau d'exécution
Version du 19/11/2008
- Les binaires (en Java) :
archive tar.gz
archive zip
- Les sources (en Java) :
archive tar.gz
archive zip
- Support des nombres hexadécimaux dans le code assembleur
- Support de l'hexadécimal dans les paramètres
- Vérification des accès des instructions (mémoire ou valeur indirecte)
Version du 18/11/2008
- Les binaires (en Java) :
archive tar.gz
archive zip
- Les sources (en Java) :
archive tar.gz
archive zip
- Correction des problèmes de modulo 256
- La case mémoire 0 est devenue accessible
- Correction des problèmes de débordements
- Comparaison possible avec des valeurs de cases mémoire
Version du 17/11/2008
- Les binaires (en Java) :
archive tar.gz
archive zip
- Les sources (en Java) :
archive tar.gz
archive zip
- Première version