Archi - L3I.MG BlogUp

publicité
Architecture – I500 – TD MIC1
Antoine Claudé
TP de microprogrammation sur machine
MIC-1
Exercice 1
Installation réussie avec succès!
Exercice 2
Question 1
Quelle beau bytecode!
Question 2
Assemblage réussi !
Question 3
Le fichier mic1ijcm.mal correspond au jeu de micro instructions implémenté dans la machine MIC-1. Il
est structuré en 2 parties distinctes :


La première partie liste les adresses mémoire correspondante à la première micro instruction
associée à chaque instruction de bytecode. (On peut possiblement déduire le nombre de micro
instructions associées par différence d'adresse)
Les micros instructions en elles-mêmes pour chaque instruction bytecode.
L'autre possibilité d'implémentation aurait été d'utiliser un séquenceur câblé (instructions RISC).
Question 4


IN : L'instruction IN attend une donnée sur l'entrée standard (définie par le registre OPC) puis
l'empile (d'où le SP=SP+1; et wr;).
OUT : L'instruction OUT dépile la dernière donnée de la pile (SP=SP-1;) et la lis (rd;) afin de
l'afficher sur la sortie standard (définie par le registre OPC).
Question 5
OK !
Question 6 & 7
Information dans la fenêtre
Signification
Type
Valeur initiale
MAR
Memory Address Register
A
0x0
MDR
Memory Data Register
D
0x0
1
samedi 28 avril 2007
Architecture – I500 – TD MIC1
Antoine Claudé
PC
Program Counter
A
0xFFFFFFFF
MBR
Memory Byte Register
I
0x0
SP
Stack Pointer
A
0x8000
LV
Local Variable
A
0xC000
CPP
Constant Pool Pointer
A
0x4000
TOS
Top Of Stack
D
0x0
A
0x0
OPC
H
Temporary Register
D
0x0
Microinstruction
Microinstruction active
MI
reset
Next Microinstruction
Prochaine microinstruction
MI
goto 0x2
MPC
Micro Program Counter
A
0x0
ALU
Arithmetic Logic Unit
O
0 AND 0 = 0x0
Question 8
On remarque que l'enchaînement de micro instruction tourne en rond. Et enchaîne indéfiniment les 2
même instructions (goto 0x2 etPC=PC+1;fetch;goto(MBR);).
Cela correspond à la succession de Main1 et nop1.
Lorsque qu'aucune adresse n'est spécifiée, MBR prend la valeur 0x0 qui est l'adresse de nop1.
De plus, on en déduit d'après la valeur du goto (nop1 fait un goto Main1;)que l'adresse de Main1 est
0x2.
Question 9 & 10
N° step
PC
MPC
Code de micro instruction
0
0xFFFFFFFF
0x0
reset
1
0xFFFFFFFF
0x2
goto 0x2
2
0x0
0x0
PC=PC+1;fetch;goto (MBR)
3
0x0
0x2
goto 0x2
4
0x1
0xFC
PC=PC+1;fetch;goto (MBR)
5
0x1
0x8D
H=OPC=-1;goto 0x8D
6
0x1
0x8E
OPC=H+OPC;goto 0x8E
7
0x1
0x8F
MAR=H+OPC;rd;goto 0x8F
8
0x1
0x90
SP=MAR=SP+1;goto 0x90
9
0x1
0x2
TOS=MDR;wr;goto 0x2
10
0x2
0x59
PC=PC+1;fetch;goto (MBR)
11
0x2
0xB
SP=MAR=SP+1;goto 0xB
12
0x2
0x2
MDR=TOS;wr;goto 0x2
13
0x3
0x10
PC=PC+1;fetch;goto (MBR)
2
samedi 28 avril 2007
Action
Initialisation
Appel au main1 et MBR=0x0
nop1 -> goto main1
main1 & MBR = @ de in1
Micro instructions de in
main1 & MBR = @ de dup1
Micro instruction de dup
main1 & MBR = @ de bipush1
Architecture – I500 – TD MIC1
Antoine Claudé
14
0x3
0x16
SP=MAR=SP+1;goto 0x16
15
0x4
0x17
PC=PC+1;fetch;goto 0x17
Micro instructions de bipush
(fetch de l'opérande)
Question 11
PC est incrémenté à chaque appel de main1, ce qui correspond à chaque changement d'instruction (de
bytecode) puisque que l'on fait appel à un nouveau fetch et on charge l'instruction dans MBR. PC
compte donc le nombre d'instructions.
MPC n'est modifié qu'entre 2 micros instructions successives d'une même instruction. Il ne s'agit pas
d'une incrémentation mais de l'adresse de la prochaine micro instruction puisque l'on peut voir que le
goto de chaque micro instruction non terminale fait appel à l'adresse contenue dans MPC. Lors d'une
micro instruction terminale, MPC=0x2=@ de main1.
Question 12
Bah... heu ça marche ! Toutes les entrées clavier sont immédiatement recopiées et affichées à l’écran.
Question 13

cf. fichier ci joint ! (countJ.jas / countJ.ijvm)
Question 14
On remarque que si l'on entre 'A' dans le programme, il inscrit des 'J' à l'écran. Pour être très précis, il
en écrit 17 ! Cela s'explique par le fait que dans la suite logique des caractères UNICODE, le 'A' se
trouve 8 places après le '9' (8+9=17). Donc lors de la conversion en entier (par soustraction de
0x30), on obtient logiquement 17 (UNICODE(A)-0x30=(UNICODE(9)+8)-0x30=9+8=17). Idem pour
tous les autres caractères UNICODE.
THE END ...
3
samedi 28 avril 2007
Téléchargement