ASR1 bis IUT A de Lille – USTL DUT Informatique 1A 2007–2008 Architecture des ordinateurs TP 1 : Simulateur Nous allons utiliser le logiciel Easy68K qui comporte : – un éditeur qui nous permettra de saisir les programmes écrits en assembleur (code source : texte), – un assembleur pour traduire le code source saisi en langage machine (binaire), – un simulateur qui nous permettra de suivre l’exécution du programme instruction par instruction à travers l’évolution du contenu des registres et de la mémoire. 1 Saisie du programme Lancer le programme Edit68K, une fenêtre doit s’ouvrir. Cette fenêtre contient le code source d’un programme réduit à son point de démarrage indiqué par l’étiquette START et les deux instructions de terminaison : MOVE.B #9,D0 qui place le code 9 dans D0 pour que l’instruction TRAP #15 termine le programme. Entre ces deux éléments vous aller pouvoir ajouter les instructions de vos propres programmes. Commencez par le programme suivant : MOVEA #$1234, A0 CLR.L D1 NOT.W D1 MOVE.L #$ABCD,(A0) ADD.L D1,(A0) Vous pouvez constater qu’il est possible de commenter vos programme en indiquant à la droite des instructions ce qu’elles font, comme par exemple Halt Simulator. Comme il est très difficile de relire un code non commenté même pour la personne qui l’a écrit, vous devrez commenter tous vos programme. Commencez tout de suite en décrivant les étapes que réalisent les instructions que vous venez de saisir. 2 Assemblage et exécution Une fois le programme saisi, vous pouvez le sauvegarder (avec extension .x68) puis l’assembler en sélectionnant la commande Assemble Source du menu Project. Une nouvelle fenêtre s’ouvre indiquant entre autre le nombre d’erreurs relevées à l’assemblage. Si le code n’est pas correct, les erreurs sont reportées dans une fenêtre en dessous du code source avec le numéro de la ligne du code fautive. S’il n’y a pas d’erreur, vous pouvez exécuter le code. Deux fenêtres apparaissent, vous pouvez fermer celle nommée Sim68K I/O pour le moment. La seconde va nous permettre de lancer l’exécution du programme et d’observer l’état du processeur. Dans le menu View sélectionnez Memory pour que le contenu de la mémoire s’affiche dans une autre fenêtre. Vous pouvez donc surveiller à la fois les registres et la mémoire. Notez que sur la même ligne qu’une instruction se trouvent à gauche l’adresse ou elle est stockée en mémoire et son code binaire sur 16 bits suivi des extensions éventuelles. Nous disposons de plusieurs modes d’exécution : en s’arrêtant seulement au curseur. Pour cela il faut d’abord cliquer sur les points verts associés à chaque instruction, ils passent alors au rouge et c’est là que s’arrêtera l’exécution. 1 comme précédemment, l’exécution s’arrête aux curseurs, mais les instructions se font pas à pas, séparées par un intervalle de temps que l’on peut régler dans le menu Option → Auto Trace options. pour exécuter une seule instruction à la fois. pour exécuter d’un trait. pour remettre le simulateur en configuration initiale. pour recharger le code binaire. 3 Entrées/Sorties Pour pouvoir entrer des valeurs, nombres signés ou non ou chaı̂nes de caractères, vous utiliserez l’instruction TRAP #15. Suivant le code placé dans D0, cette instruction a des actions différentes, dans ce TP vous pourrez avoir besoin de : – code 15 : afficher le nombre non signé placé dans D1.L converti dans la base (de 2 à 36) contenue dans D2.B – code 2 : lire une chaı̂ne de caractère au clavier et la placer en mémoire en (A1) et la terminer par NULL, sa longueur est placée dans D1.W – code 5 : lire un seul caractère au clavier et le placer dans D1.B – code 13 : afficher la chaı̂ne placée en mémoire en (A1) (qui doit se terminer par NULL) suivie de CR et LF – code 14 : comme 13 mais sans CR et LF – le code de NULL est tout simplement $00 4 Exercice : Code secret ... 1. Ecrire un programme qui lit une chaı̂ne de caractères au clavier et la place à l’adresse $10 en mémoire, et ensuite affiche le code ascii en hexadécimal de chacun de ses caractères l’un après l’autre. Pour cela vous pourrez utiliser une structure tant que et un mode d’adressage indirect vu en cours. 2. Traduire en assembleur la structure selon (ie : réfléchir aux comparaisons et aux branchements à effectuer) : selon x : cas x = valeur 1 faire actions 1 cas x = valeur 2 faire actions 2 ... cas x = valeur n faire actions n fin selon 3. Utiliser la structure selon et la première question pour coder la chaı̂ne lue en remplaçant (directement en mémoire) les caractères par d’autres. Par exemple, remplacer les ’e’ par des ’s’, les ’l’ par des ’z’ et les ’n’ par des ’d’. Afficher ensuite la nouvelle chaı̂ne. 4. Modifier le programme obtenu pour écrire la chaı̂ne modifiée en mémoire juste après la chaı̂ne initiale et non à la place de celle-ci. Vous pouvez vous aider d’un mode d’adressage indirect vu en cours. 2