l`assembleur sur simulateur

publicité
L'ASSEMBLEUR
SUR SIMULATEUR
L'assembleur sur Simulateur
1
M. DALMAU IUT de Bayonne
LE PROCESSEUR
Les registres
Le processeur possède 8 registres de 32 bits :
R0 à R6 registres de 32 bits pouvant être utilisés comme opérandes dans toutes les instructions ou comme
pointeurs pour désigner un opérande en mémoire par son adresse.
SP pointeur de pile utilisé par les procédures et les instructions relatives à la pile (PULL, PUSH).
La mémoire est constituée de 1K mots de 32 bits.
Les opérandes
Le processeur traite les opérandes suivants :
- Entiers naturels sur 32 bits
- Entiers relatifs sur 32 bits en complément à 2
- Caractères en code ASCII
- Chaînes de caractères de codes ASCII
- Pointeurs constitués d'une adresse sur 10 bits.
JEU D'INSTRUCTIONS
Notation : pour simplifier les descriptions ci-dessous on choisira de désigner par :
RG
un registre quelconque (R0 à R6 ou SP)
[RG]
un registre quelconque (R0 à R6 ou SP) utilisé pour désigner un opérande en
mémoire par son adresse (pointeur). Seuls les 10 bits de faible poids de RG sont
utilisés comme adresse.
[RG+d] un registre quelconque (R0 à R6 ou SP) utilisé pour désigner un opérande en
mémoire par son adresse (pointeur). La valeur d (de 0 à 1023) désigne le
déplacement par rapport à cette adresse. L'opérande est donc le mot de la mémoire
dont l'adresse est obtenue en faisant: contenu des 10 bits de faible poids de RG + d.
RG n'est pas modifié.
Var
un opérande en mémoire désigné par son nom (adresse)
Val
une valeur sur 16 bits (– 32767 à +32767).
Instructions de déplacements de données
LD
dest, source
opération : dest ← source
dest peut être RG ou [RG]
source peut être RG ou [RG] ou [RG+d] ou Var ou Val
ST
source, Var
opération : Var ← source
source peut être RG ou [RG]
opération : dest ← adresse en mémoire de la variable désignée.
dest peut être RG ou [RG]
Remarque : cette instruction permet d'initialiser un registre comme pointeur sur une variable. Elle sera,
en particulier utilisée pour initialiser le pointeur de pile (SP) sur le sommet de pile en début de
programme (voir plus loin).
LEA
dest, Var
SWAP
oper
opération : échange les 16 bits de fort poids et les 16 bits de faible poids
de l'opérande qui peut être RG ou [RG] ou [RG+d] ou Var.
L'assembleur sur Simulateur
2
M. DALMAU IUT de Bayonne
Instructions arithmétiques
ADD
SUB
op1 , op2
op1 , op2
opération : op1 ← op1 + op2
opération : op1 ← op1 - op2
MUL
MULU
op1 , op2
op1 , op2
opération : op1 ← op1 * op2 : Multiplication d'entiers relatifs
opération : op1 ← op1 * op2 : Multiplication d'entiers naturels
DIV
DIVU
op1 , op2
op1 , op2
opération : op1 ← op1 / op2 : Division d'entiers relatifs
opération : op1 ← op1 / op2 : Division d'entiers naturels
Dans les 6 instructions précédentes
INC
oper
DEC
oper
NEG
oper
op1 peut être RG ou [RG]
op2 peut être RG ou [RG] ou [RG+d] ou Var ou Val
opération: oper ← oper + 1
L'opérande peut être RG ou [RG] ou [RG+d] ou Var.
opération: oper ← oper - 1
L'opérande peut être RG ou [RG] ou [RG+d] ou Var.
opération: oper ← - (oper)
L'opérande peut être RG ou [RG] ou [RG+d] ou Var.
Remarque : les instructions arithmétiques, à l'exception de NEG, positionnent les indicateurs de
débordement des entiers naturels et relatifs du registre d'état de l'unité de traitement.
Instructions logiques
OR
op1 , op2
opération : op1 ← op1 OU op2
AND
op1 , op2
opération : op1 ← op1 ET op2
Dans ces deux opérations
op1 peut être RG ou [RG]
op2 peut être RG ou [RG] ou [RG+d] ou Var ou Val
NOT
oper
opération: oper ← COMPLEMENT oper
L'opérande peut être RG ou [RG] ou [RG+d] ou Var.
Instruction de comparaison
CMP
op1 , op2
opération : compare op1 à op2
op1 peut être RG ou [RG]
op2 peut être RG ou [RG] ou [RG+d] ou Var ou Val
Ne produit aucun résultat autre que celui de positionner les indicateurs du registre d'état de l'unité de
traitement utilisés par les instructions de branchement.
Instructions de décalage
SHR oper
SHL oper
opération : oper est décalé à droite (décalage logique).
opération : oper est décalé à gauche (décalage logique).
SAR oper
opération : oper est décalé à droite (décalage arithmétique).
SAL oper
opération : oper est décalé à gauche (décalage arithmétique).
ROR oper
opération : oper est décalé à droite (décalage cyclique).
0
DEBER
0
DEBER
DEBER
0
DEBER
DEBER
ROL oper
cyclique).
opération : oper est décalé à gauche (décalage
DEBER
Dans ces instructions l'opérande peut être RG ou [RG] ou [RG+d] ou Var.
DEBER est l'indicateur de débordement des entiers naturels du registre d'état de l'unité de traitement.
L'assembleur sur Simulateur
3
M. DALMAU IUT de Bayonne
Instructions de branchement (rupture de séquence)
JMP
etiq
opération : branchement inconditionnel.
Bxx
etiq
opération : branchement conditionnel.
Dans ces instructions etiq doit être une étiquette (instruction où aller).
Se référer à la table ci-dessous pour les différentes conditions de branchement :
condition
comparaison
d'entiers naturels
comparaison
d'entiers relatifs
BEQ
BNE
BLTU
BLEU
BGTU
BGEU
BDEBU
BEQ
BNE
BLT
BLE
BGT
BGE
BDEB
égal
différent
inférieur
inférieur ou égal
supérieur
supérieur ou égal
débordement
Instructions relatives à la pile
PUSH
PULL
opération : empile oper. (SP ← SP-1 puis Mem(SP) ← oper)
opération : dépile oper. (oper ← Mem(SP) puis SP ← SP+1)
oper
oper
Dans ces instructions l'opérande peut être RG ou [RG] ou [RG+d] ou Var.
Instructions d'appel et retour de sous programmes
CALL
etiq
RET
RET
Val
opération: appel du sous-programme référencé par etiq.
etiq doit être une étiquette (instruction de début de la procédure)
opération : retour de sous-programme.
opération : retour de sous-programme avec vidage de la pile.
La valeur en opérande indique le nombre de mots en sommet de pile à
enlever (ignorer) après le retour. Ces mots correspondent à des paramètres
mis dans la pile avant l'appel du sous-programme et que l'on désire enlever à
la fin.
Instruction de contrôle
HLT
opération : arrêt du processeur
Instructions relatives à l'unité d'échange (Entrées / Sorties)
IN
OUT
oper, port
oper, port
opération : oper ← octet du registre de l'unité d'échange désigné par son n°.
opération : octet du registre de l'unité d'échange désigné par son n° ← oper.
Dans ces instructions oper peut être RG ou [RG], port est un entier naturel désignant le n° de port de
l'unité d'échange. Seuls les 8 bits de faible poids de oper sont utilisés.
L'assembleur sur Simulateur
4
M. DALMAU IUT de Bayonne
L'ASSEMBLEUR DU SIMULATEUR
La syntaxe d'une ligne d'assembleur est :
[etiquette:] [COP [operande1 [, operande2]]] [; commentaire]
Où un terme noté entre crochets est facultatif.
• Une étiquette est un mot qui ne doit comporter aucun caractère défini comme délimiteur par le
langage ( ' " ; , [ ] ) ni d'espaces. Elle peut contenir des caractères accentués et elle doit être
terminée par :
• Le COP est l'un des codes définis précédemment il peut indifféremment être écrit en minuscules ou
en majuscules.
• Un commentaire débute au ; et se termine à la fin de la ligne. Il peut contenir tous les caractères sauf
des guillemets ( " ).
Désignation des opérandes dans les instructions autres que celles de rupture de
séquence :
Registre : On met le nom du registre qui contient l'opérande (en majuscules ou minuscules)
exemple :
LD
R0,r1 ; R0 ← R1
Valeur immédiate : On met la valeur de l'opérande selon la forme :
décimal
123 ou –4
valeur de 0 à 655355 ou –32767 à 32767
hexadécimal
$1a ou $ffa3
valeur sur 16 bits (4 digits hexadécimaux au maximum)
binaire
%01110010
valeur sur 16 bits (16 chiffres binaires au maximum)
ASCII
'a'
code ASCII d'un caractère
ATTENTION : Le caractère placé entre ' ne peut être " ni ; car ce sont des délimiteurs définis dans le
langage (délimiteurs de chaîne de caractères et de commentaire)
exemples :
LD
R1,$ff03 ; R1 ← FF03 en hexadécimal
LD
R2,'A'
; R2 ← code ASCII de 'A'
Direct : On met le nom de la variable
exemples :
LD
R0,var1 ; R0 ← contenu de var1
ST
R2,var2 ; var2 ← contenu de R2
ATTENTION : Un nom de variable doit commencer par une lettre et ne comporter aucun caractère
défini comme délimiteur par le langage ( ' " ; , [ ] ). Le compilateur distingue les majuscules et les
minuscules et accepte les caractères accentués. De plus un nom de variable ne doit pas pouvoir être
confondu avec un nom de registre ni être le mot clé STACK.
Indirect : Le registre désigné contient l'adresse de l'opérande (seuls les 10 bits de faible poids du
registre sont pris en compte). On met le nom du registre entre crochets.
exemples : LD R0,[SP]
; R0 ← contenu de la mémoire à l'adresse contenue dans SP
LD [R1],12
; mémoire à l'adresse contenue dans R1 ← 12
LD [R1],r3
; mémoire à l'adresse contenue dans R1 ← contenu de R3
LD [r1],var
; mémoire à l'adresse contenue dans R1 ← contenu de var
ST [R2],var2
; var2 ← contenu de la mémoire à l'adresse contenue dans R2
LD [sp],[R1]
; mémoire à l'adresse contenue dans SP ← contenu de la
mémoire à l'adresse contenue dans R1
Désignation des opérandes dans les instructions de rupture de séquence :
On met l'étiquette qui désigne l'instruction à laquelle on doit aller (le nom seul de l'étiquette sans les :).
exemple :
BNE début
L'assembleur sur Simulateur
5
M. DALMAU IUT de Bayonne
Les zones du programme :
Un programme possède 3 zones :
• Une zone réservée aux déclarations de variables
• Une zone réservée aux instructions
• Une zone réservée à la pile
La zone de pile est définie par la directive .STACK taille où taille indique le nombre de mots de la
mémoire réservés pour la pile.
On définit les autres zones comme suit :
code :
.CODE
données :
.DATA
Lors du chargement du programme le registre CO est initialisé sur la première instruction qui suit la
directive .CODE. Les autres registres ne sont pas modifiés.
Par contre, le registre SP doit être initialisé par le programme pour désigner le sommet de pile, ceci se
fait grâce à l'instruction :
LEA SP,STACK
; attention le mot clé STACK doit être en majuscules
Déclaration des variables :
1. Variables non initialisées :
nom
DSW taille
Déclare une variable appelée nom occupant taille mots en mémoire.
Remarque : nom peut être omis, dans ce cas il y a réservation de place en mémoire sans nom de variable
associé.
2. Variables initialisées :
nom
DW
valeur
Déclare une variable appelée nom initialisée à valeur. Les possibilités pour valeur sont :
Un entier décimal:
1239877 ou -4
de 0 à 4294967295 ou de – 2147483647 à 2147483647
Un entier hexadécimal: $1a ou $ffa3
valeur sur 32 bits (8 digits hexadécimaux maximum)
Une valeur binaire:
%01110010
valeur sur 32 bits (32 chiffres binaire maximum)
Un caractère:
'a'
code ASCII du caractère étendu à 32 bits
Une chaîne de caractères "Bonjour"
un code ASCII étendu à 32 bits par mot
Une variable initialisée occupe un mot de la mémoire sauf dans le cas d'une initialisation par une chaîne
où la variable occupe un mot par caractère de la chaîne.
ATTENTION : Le caractère placé entre ' ne peut être " ni ; car ce sont des délimiteurs définis dans le
langage (chaîne de caractères et commentaire). Les caractères sont représentés par leur code ASCII
étendu à 32 bits en complétant par des 0 à gauche.
Remarque : pour déclarer une variable initialisée contenant plusieurs valeurs, il faut reproduire le mot
clé DW pour chaque valeur sans mettre de nouveau nom de variable.
exemples :
var1 DW
car
DW
var2 DW
var3 DSW
var4 DW
var5
var6
DW
DW
DW
DW
12
'!'
-1
12
"ABC"
11
22
"je"
0
var1 occupe un mot qui contient 12
car occupe un mot qui contient le code ASCII de '!'
var2 occupe un mot qui contient -1
var3 occupe 12 mots non initialisés
var4 occupe 3 mots dont le 1er contient le code ASCII de 'A',
le deuxième celui de 'B' et le dernier celui de 'C'.
var5 occupe 2 mots initialisés à 11 pour le premier et 22 pour le second
var6 occupe 3 mots dont le 1er contient le code ASCII de 'j',
le deuxième celui de 'e' et le dernier la valeur 0.
L'assembleur sur Simulateur
6
M. DALMAU IUT de Bayonne
Squelette d'un programme en assembleur :
truc:
machin:
.DATA
définition des variables et constantes
.CODE
LEA SP,STACK
............................. suite du code
dernière instruction (en général HLT)
......... corps de la procédure truc (1ere procédure)
ret
x
............................. autres procédures
......... corps de la procédure machin (dernière procédure)
RET x
.STACK taille
Le programme démarre à la première instruction qui suit la directive .CODE. L'instruction HLT est
utilisée pour arrêter le processeur à la fin du programme.
L'assembleur sur Simulateur
7
M. DALMAU IUT de Bayonne
UTILISATION DU SIMULATEUR POUR COMPILER
ET EXECUTER UN PROGRAMME
Présentation :
Le simulateur se présente sous la forme des fenêtres suivantes :
• Le panneau de contrôle qui permet de compiler des programmes et des exécuter.
• Le processeur qui contient les registres, l'unité de traitement et l'unité de contrôle.
• La mémoire.
• L'unité d'échange.
• Un périphérique constitué d'une écran graphique de 256x256 et d'un clavier à 6 touches.
Le Panneau de contrôle :
Réglage de la vitesse de l'horloge du processeur
Exécuter un programme résidant en
mémoire
Choix du mode d'exécution des programmes
(en pas à pas ou en continu)
Arrêter un programme en cours
Charger un programme en mémoire
Compiler un programme
Terminer le programme de
simulation
Témoin de programme en cours d'exécution
Le Processeur :
Les registres
L'unité de traitement
L'unité de
contrôle
Le registre d'état de l'UAL
Activité en cours
Le processeur possède 6 registres d'usage général (R0 à R6) plus un registre de sommet de pile SP.
L'assembleur sur Simulateur
8
M. DALMAU IUT de Bayonne
L'unité de contrôle contient :
• Le compteur ordinal CO
• Le registre d'instructions RI
• Une ligne d'état indiquant l'activité en cours: recherche d'instruction, décodage d'instruction, exécution
d'instruction ou arrêt.
L'unité de traitement contient une UAL avec ses registres d'entrée (RA et RB), de sortie (RS) et son
registre d'état. Le registre d'état a la structure suivante :
Indicateur d'égalité
Indicateur
d'infériorité entre
entiers naturels
Indicateur
d'infériorité entre
entiers relatifs
Indicateur de
débordement
d'opération entre
entiers naturels
Indicateur de
débordement
d'opération entre
entiers relatifs
• L'indicateur d'égalité est mis à 1 par une instruction de comparaison (CMP) lorsque les 2 opérandes
sont égaux.
• L'indicateur d'infériorité entre entiers naturels est mis à 1 par une instruction de comparaison (CMP)
lorsque le 1er opérande considéré comme un EN est inférieur au second opérande considéré lui
aussi comme un EN.
• L'indicateur d'infériorité entre entiers relatifs est mis à 1 par une instruction de comparaison (CMP)
lorsque le 1er opérande considéré comme un ER est inférieur au second opérande considéré lui
aussi comme un ER.
• L'indicateur de débordement d'opération entre entiers naturels est mis à 1 par une instruction
arithmétique lorsque le résultat considéré comme un EN déborde.
• L'indicateur de débordement d'opération entre entiers relatifs est mis à 1 par une instruction
arithmétique lorsque le résultat considéré comme un ER déborde.
Remarque : lorsque l'on clique sur un registre, une fenêtre de
dialogue permettant de choisir le mode selon lequel le contenu de
ce registre sera affiché à l'écran (voir ci-contre) apparaît. Bien
entendu cela ne modifie pas le contenu du registre mais seulement
son mode d'affichage.
La Mémoire :
Elle est constitué de 1024 mots de 32 bits.
Un ascenseur permet de faire défiler l'ensemble de son contenu.
Remarque : lorsque l'on clique sur un mot de la mémoire une
fenêtre de dialogue permettant de choisir le mode selon lequel le
contenu de ce mot sera affiché à l'écran (voir ci-dessus)
apparaît. Bien entendu cela ne modifie pas le contenu du mot
mémoire mais seulement son mode d'affichage.
La ligne de menu
"Mode
d'affichage"
permet d'appliquer un
mode d'affichage à une
zone
de
mémoire
comprise entre deux
adresses. Lorsque l'on
clique sur ce menu, on voit apparaître une fenêtre permettant de
choisir l'adresse de début et celle de fin de la zone de mémoire à
laquelle va s'appliquer le mode d'affichage choisi.
Afin d'en faciliter la lecture, lorsqu'un programme est chargé
dans la mémoire le mode d'affichage de chaque mot est adapté
L'assembleur sur Simulateur
9
M. DALMAU IUT de Bayonne
selon le type de son contenu. Il peut être modifié par la suite en cliquant dessus.
L'unité d'échange :
Elle contient 8 registres de 8 bits correspondant aux numéros de port 0 à 7.
Elle permet de connaître l'état des touches et de dessiner ou écrire dans le fenêtre
graphique du périphérique. Elle permet aussi de détecter les mouvements et les clics
de la souris dans la zone graphique de l'écran du périphérique.
Son fonctionnement est le suivant :
1°) Entrées
Le clavier
Les touches du clavier positionnent des valeurs dans le Port0 selon le principe
suivant :
Etat du clavier
bit 7
bit 6
bit 5
Numéro de la touche
bit 3
bit 2
bit 4
bit 1
bit 0
Etat du clavier indique les actions qui ont eu lieu sur le clavier depuis la dernière fois que le Port0 a été lu :
• 00 rien ne s'est produit
Le bit 7 permet donc de savoir si un événement
• 11 une touche a été appuyée
s'est produit, tandis que le bit 6 précise lequel.
• 10 une touche a été lâchée
Remarque : Ces deux bits sont automatiquement remis à 0 lorsque le processeur lit le contenu du Port0.
Numéro de la touche indique le numéro de la touche appuyée ou lâchée. Les numéros des touches sont les
suivants :
• 1 pour la touche ↑
• 2 pour la touche →
• 3 pour la touche ↓
• 4 pour la touche ←
• 5 pour la touche A
• 6 pour la touche B
Remarque : Ces 6 bits sont automatiquement remis à 0 lorsque le processeur lit le contenu du Port0.
L'écran
• Lorsque la souris survole l'écran, ses coordonnées sont écrites dans Port6 (coordonnée en x) et Port7
(coordonnée en y). Un programme peut donc en permanence savoir où se trouve la souris sur l'écran
en lisant ces 2 ports de l'UE.
• Lorsque l'on clique avec la souris sur l'écran, ses coordonnées sont écrites dans Port6 (coordonnée en
x) et Port7 (coordonnée en y) et le Port 0 est positionné de la même façon que si l'on avait appuyé la
touche de numéro 7 (valeur : 11000111).
Remarque : Le Port0 est automatiquement remis à 0 lorsque le processeur en lit le contenu.
2°) Sorties
Les registres Port1 à Port5 pilotent l'écran graphique. Le registre Port5 indique l'opération graphique à
exécuter tandis que les registres Port1 à Port4 en constituent les paramètres.
Dès qu'une valeur est écrite dans Port5, la commande est exécutée en utilisant les registres Port1 à Port4
comme paramètres (il faut donc les avoir préparés avant).
Le Port5 est divisé en 2 demi-registres de 4 bits chacun, les 4 bits de gauche indiquent la couleur dans
laquelle doit se faire le tracé (si la commande est une commande de dessin ou d'écriture). Les 4 bits de
droite indiquent la commande à exécuter :
bit 7
Couleur de tracé
bit 6
bit 5
L'assembleur sur Simulateur
bit 4
bit 3
10
Commande graphique
bit 2
bit 1
bit 0
M. DALMAU IUT de Bayonne
Les Commandes graphiques sont les suivantes :
• 0000 : effacer l'écran, les 4 bits Couleur de tracé sont ignorés.
• 0001 : tracer le point dont les coordonnées sont dans Port1 (coordonnée en x) et Port2 (coordonnée
en y). La couleur de tracé est celle indiqué par les 4 bits Couleur de tracé.
• 0010 : tracer la ligne dont les coordonnées du point de départ sont dans Port1 (coordonnée en x) et
Port2 (coordonnée en y) celles du point d'arrivée sont dans Port3 (coordonnée en x) et Port4
(coordonnée en y). La couleur de tracé est celle indiqué par les 4 bits Couleur de tracé.
• 0011 : tracer le rectangle dont les coordonnées du coin supérieur gauche sont dans Port1
(coordonnée en x) et Port2 (coordonnée en y), la largeur est dans Port3 et la hauteur dans Port4.
La couleur de tracé est celle indiqué par les 4 bits Couleur de tracé.
• 0100 : tracer l'ovale inscrit dans le rectangle dont les coordonnées du coin supérieur gauche sont
dans Port1 (coordonnée en x) et Port2 (coordonnée en y), la largeur est dans Port3 et la hauteur
dans Port4. La couleur de tracé est celle indiqué par les 4 bits Couleur de tracé.
• 0101 : tracer le rectangle plein dont les coordonnées du coin supérieur gauche sont dans Port1
(coordonnée en x) et Port2 (coordonnée en y), la largeur est dans Port3 et la hauteur dans Port4.
La couleur de remplissage est celle indiqué par les 4 bits Couleur de tracé.
• 0110 : tracer l'ovale plein inscrit dans le rectangle dont les coordonnées du coin supérieur gauche
sont dans Port1 (coordonnée en x) et Port2 (coordonnée en y), la largeur est dans Port3 et la
hauteur dans Port4. La couleur de remplissage est celle indiqué par les 4 bits Couleur de tracé.
• 0111 : écrire aux coordonnées placées dans Port1 (coordonnée en x) et Port2 (coordonnée en y) le
caractère dont le code ASCII est placé dans Port3. La couleur d'écriture est celle indiqué par les 4
bits Couleur de tracé. La valeur des coordonnées en x (Port1) et en y (Port2) sont
automatiquement mises à jour pour pouvoir écrire le caractère suivant sur la même ligne ou, si
elle est pleine, sur la ligne suivante.
Les Couleurs de tracé sont les suivantes :
0000 : noir
0100 : bleu foncé
0001 : gris foncé
0101 : bleu clair
0010 : gris moyen
0110 : cyan
0011 : gris clair
0111 : vert
1000 : vert clair
1001 : magenta
1010 : orange
1011 : rose
1100 : rouge vif
1101 : rouge clair
1110 : jaune
1111 : blanc
Le périphérique :
1°) L'écran
L'écran est graphique d'une définition de 256 pixels par 256
pixels. Les coordonnées (0,0) correspondent au coin supérieur
gauche. Les coordonnées en x (horizontalement) augmentent
quand on se déplace vers la droite, les coordonnées en y
(verticalement) augmentent quand on se déplace vers le bas.
L'écran détecte les mouvements et les clics de la souris sur sa
surface.
2°) Les touches
Le périphérique comporte 6 touches (comme une gameboy
simple): 4 touches de direction et 2 touches de commande (A et
B). Les touches peuvent être activées à la souris ou en utilisant
le clavier.
Pour pouvoir utiliser le clavier la fenêtre du périphérique doit
être la fenêtre active. Les touches correspondantes du clavier
sont les flèches pour les touches de direction, la touche Espace
pour la touche de commande A et la touche Entrée pour la
touche de commande B.
L'assembleur sur Simulateur
11
M. DALMAU IUT de Bayonne
Utiliser le simulateur :
Le simulateur est contenu dans un fichier d'archives Java (simulateur.jar). Le programme peut être
lancé en double cliquant sur le fichier jar ou par la commande : java –jar simulateur.jar
Pour exécuter un programme :
1°) Taper le programme source à l'aide d'un éditeur de textes quelconque en mode txt et l'enregistrer
sous un nom de la forme : xxxx.asm
2°) Appeler le compilateur par le bouton approprié du simulateur. Après avoir choisi un fichier .asm à
compiler, une fenêtre s'ouvre pour indiquer l'état de la compilation (et les erreurs éventuelles). Si la
compilation ne génère pas d'erreurs, un fichier exécutable xxxx.mpc est obtenu et placé dans le même
répertoire que xxxx.asm. On peut alors fermer la fenêtre du compilateur.
Remarque : Au moment de la compilation le réglage de vitesse d'horloge et l'état de la case à cocher
"pas à pas" du simulateur sont mémorisés. Ainsi, lorsque le fichier sera chargé en mémoire, la case à
cocher et l'horloge retrouveront les valeurs qu'elles avaient au moment de la compilation du fichier.
3°) Charger le programme ainsi obtenu par le bouton approprié du simulateur qui permet de choisir le
fichier .mpc à exécuter. Le programme est maintenant visible en mémoire et le CO est initialisé sur la
première instruction. En outre, la case à cocher et l'horloge ont retrouvé les valeurs qu'elles avaient au
moment de la compilation de ce fichier. Elles peuvent, bien évidemment, être modifiées.
4°) Lancer le programme par le bouton Exécuter. Le curseur du haut permet de régler la vitesse de
l'horloge du processeur. Ainsi les instructions s'exécuteront plus ou moins vite selon ce réglage. Ceci
permet en particulier de suivre l'exécution d'un programme et de vérifier que tout se passe bien.
Chaque fois qu'un registre est modifié il apparaît un bref instant en rouge. Chaque fois qu'un registre est
lu il apparaît un bref instant en vert. Lorsque l'horloge est mise à sa vitesse maximale, les changements
de couleurs des registres ne sont plus visibles.
La case à cocher permet de choisir un fonctionnement en pas à pas ou en continu. En mode pas à pas le
processeur s'arrête à la fin de chaque instruction. Pour qu'il effectue l'instruction suivante du programme
il faut ré-activer le bouton Exécuter. En mode continu il exécute les instructions l'une après l'autre
jusqu'à rencontrer une instruction HLT. On peut toutefois l'arrêter en utilisant le bouton Stop. Toutefois
ce bouton n'arrête l'exécution qu'après que l'instruction en cours soit terminée.
L'assembleur sur Simulateur
12
M. DALMAU IUT de Bayonne
Téléchargement