1 Saisie du programme 2 Assemblage et exécution

publicité
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
Téléchargement