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