Connexion


Dernières nouvelles

04.05.2010
Licence 1 MI : Info 0203
Mise en ligne des notes
--> accès.
17.05.2010
Licence 1 MI : Info 0201
Mise en ligne des notes de TP test
--> accès.
03.05.2010
Licence 3 MI : Info 0602
Mise en ligne du projet
--> accès.
15.03.2010
Licence 1 MI : Info 0201
Mise en ligne du TP 5
--> accès.

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-26-91-33-81

Fax :
+33-26-91-33-97

Facebook :
lien Facebook direct

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

Compilation et exécution

   Si vous avez téléchargé la version binaire, il suffit d'exécuter la commande :

java Lanceur

   Pour la version sources, il est nécessaire de compiler d'abord les sources.

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=valmem 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 :

Les différentes options sont les suivantes :
  • 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=valval 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

  • Amélioration de l'affichage en mode exécution
  • Modification de l'aide (aide sur le mode trace)


Version du 21/11/2008

  • 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

  • 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

  • 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

  • Première version



Version de cette page Mardi 11 Mai 2010