Architecture des ordinateurs cours 3 Micro-instructions et unité de contrôle, langage machine, langage d’assemblage, modes d’adressage Agata Savary, IUT de Blois, Département GTR, 1 e année,
A. SAVARYIUT Blois GTR1, 2004/052 Micro-instructions Unité de contrôle
A. SAVARYIUT Blois GTR1, 2004/053 Dans JASPer il y a essentiellement 2 types de micro-instructions : Les déplacements de données, par exemple A [MDR] signifie recopier le contenu du registre MDR dans le registre A M[MAR] [MDR] signifie écrire le contenu du registre MDR en mémoire à l’adresse contenue dans MAR Les opérations de l’UAL, par exemple ALUr ALUx + ALUy signifie additionner les contenus des registres ALUx et ALUy et placer le résultat dans le registre ALUr ALUr ALUx >> 1 signifie décaler à droite le contenu du registre ALUx et placer le résultat dans le registre ALUr Micro-instruction = une action élémentaire dans le chemin de données du processeur. Attention : tous les déplacements de données ne sont pas admis (e.g. A [B] interdit ; il faut passer par un registre intermédiaire)
A. SAVARYIUT Blois GTR1, 2004/054 L’unité de contrôle analyse le code de l’instruction machine courante (contenue dans le registre IR). Elle décode cette instruction, i.e. détermine quelles micro-instructions doivent être effectuées dans quel ordre pour exécuter l’instruction courante Elle envoie des signaux de contrôle au chemin de données pour imposer les micro-instructions nécessaire (par les lignes oranges du cours précédent: ContrôleUAL, AouB, VersAouB, EcrireAB,…) Les micro-instructions sont provoquées par l’unité de contrôle “La mise en oeuvre de l’unité de contrôle est la tâche la plus difficile de toute la conception matérielle” (Patterson, Hennessy Organisation et conception des ordinateurs) … c’est pourquoi nous n’allons pas l’examiner plus en détail pendant ce cours
A. SAVARYIUT Blois GTR1, 2004/055 Nous voulons effectuer l’action suivante : additionner le contenu du registre A avec le contenu du registre B et placer le résultat dans A. Pour ceci il faut exécuter les micro-instructions suivantes : copier le contenu de A dans ALUx copier le contenu de B dans ALUy additionner ALUx et ALUy et placer le résultat dans ALUr copier le contenu de ALUr dans A Cela donne le microprogrammme suivant : ALUx [A] ALUy [B] ALUr [ALUx] + [ALUy] A [ALUr] Microprogramme = un enchaînement de micro-instructions
A. SAVARYIUT Blois GTR1, 2004/056 Langage machine et langage d’assemblage machine language assembly language
A. SAVARYIUT Blois GTR1, 2004/057 Dans un processeur microprogrammé (comme JASPer) chaque instruction de langage machine est réalisée par un microprogramme. Exemples : Langage machine = langage compréhensible (exécutable) par le processeur. Micro-programme Instruction (binaire) du langage machine Description ALUx [A] ALUy [B] ALUr [ALUx] + [ALUy] A [ALUr] Additionner le contenu du registre A avec le contenu du registre B et placer le résultat dans A MDR<-[A] B<-[MDR] Copier le contenu du registre A dans le registre B Les microprogrammes de toutes les instructions machine sont rangés dans l’unité de contrôle (sous forme d’une mémoire ROM ou bien d’un circuit combinatoire). Lorsque l’instruction courante et chargée dans le registre IR, l’unité de contrôle provoque l’exécution du microprogramme correspondant.
A. SAVARYIUT Blois GTR1, 2004/058 Format d’une instruction du langage machine JASPer Op-code2 e opérande 8 bits Chaque instruction de JASPer a 2 octets : Presque chaque instruction fait intervenir un (ou deux) registre(s), et éventuellement un deuxième opérande (s’il est inexistant le 2e champs est mis à 0). Le “op-code” contient les informations sur : L’opération à effectuer Le mode d’adressage du deuxième opérande (facultatif) Le choix du registre (A ou B)
A. SAVARYIUT Blois GTR1, 2004/059 Exemples d’instructions du langage machine JASPer Micro- programme Instruction (binaire) du langage machine HexaCommentaire op-code2e opérande ALUx [A] ALUy [B] ALUr [ALUx] + [ALUy] A [ALUr] Additionner le contenu du registre A avec le contenu du registre B et placer le résultat dans A MDR<-[A] B<-[MDR] Copier le contenu du registre A dans le registre B ALUx [B] ALUy [IR(operand)] ALUr [ALUx]+[ALUy] B [ALUr] E Additionner la valeur (5E) 16 au contenu du registre B MAR [IR(operand)] MDR [M[MAR]] A [MDR] Copier dans le registre A le contenu de la case mémoire à l’adresse (42) 16
A. SAVARYIUT Blois GTR1, 2004/0510 Langage d’assemblage = langage de mnémoniques pour les instructions du langage machine Micro- programme Instruction (hexa) du langage machine Instruction du langage d’assemblage Commentaire op-code2e opérande ALUx [A] ALUy [B] ALUr [ALUx] + [ALUy] A [ALUr] 0600 ADD B,A Additionner le contenu du registre A avec le contenu du registre B et placer le résultat dans A MDR<-[A] B<-[MDR] 9700 MOVE A,B Copier le contenu du registre A dans le registre B ALUx [B] ALUy [IR(operand)] ALUr [ALUx]+[ALUy] B [ALUr] 015E ADD #5E, B Additionner la valeur (5E) 16 au contenu du registre B MAR [IR(operand)] MDR [M[MAR]] A [MDR] 9242 MOVE 42,A Copier dans le registre A le contenu de la case mémoire à l’adresse (42) 16
A. SAVARYIUT Blois GTR1, 2004/0511 Langage d’assemblage et langage machine Langage d’assemblage (appellé souvent assembleur) = représentation symbolique du langage machine : Les mnémoniques (e.g. ADD, MOVE, SHR) remplacent les codes numériques des opérations Les adresses symboliques (e.g. K dw 3 ) remplacent les adresses numériques des emplacements mémoire. Un assembleur = compilateur qui traduit le langage assembleur en langage machine. L’assemblage = processus de traduction (compilation) du langage assembleur en langage machine. Pentium : resérver un double mot, le nommer ‘K’ et l’initialiser à 3
A. SAVARYIUT Blois GTR1, 2004/0512 Format d’instructions du langage d’assemblage Etiquette (facultative) Mnémonique de l’opération à exécuter 1 ou 2 arguments Commentaire (facultatif) FinHALT#Arrêter le programme SHR(A)#Décaler le diviseur LoopADD#10, B#Augmenter le compteur
A. SAVARYIUT Blois GTR1, 2004/0513 Langage de haut niveau vs. langage d’assemblage.
A. SAVARYIUT Blois GTR1, 2004/0514 Emploi des branchements - choix si (A = B) alors sinon finsi 8700CMP A,B C2..BNE diff..(en assembleur) E0..JMP suite.diff.(en assembleur).suite. (en assembleur) AlgorithmeLangage d’assemblage Langage machine
A. SAVARYIUT Blois GTR1, 2004/0515 Emploi des branchements - boucles tant que (A>=0) fin_tantque 8000boucleCMP #0,A bb..BMI suite..(en assembleur) E0..JMP boucle.suite.(en assembleur) AlgorithmeLangage d’assemblage répéter tant que (A>=0).boucle.(en assembleur) 8000CMP #0,A bb..BMI suite E0..JMP boucle.suite.(en assembleur) Langage machine
A. SAVARYIUT Blois GTR1, 2004/0516 Emploi des branchements - boucles pour (i 0) jusqu’à 10 par pas de 2 fin_pour 9100MOVE #0,B 8000boucleCMP #0A,B bb03BMI corps c302BEQ corps e0..JMP suite.corps.(en assembleur) 0102ADD #02,B e0..JMP boucle.suite.(en assembleur) Algorithme Langage d’assemblage Langage machine
A. SAVARYIUT Blois GTR1, 2004/0517 Compilation et compatibilité
A. SAVARYIUT Blois GTR1, 2004/0518 Le langage machine = l’interface entre le logiciel et le matériel Chaque ordinateur a son langage machine réalisé : soit directement par le matériel (e.g. architecure RISC) soit par un microprogramme (e.g. JASPer) La compilation est une traduction du code source (en langage de haut niveau) par un programme appelé compilateur en un programme exécutable (en langage machine), en passant éventuellement par le langage d’assemblage. Pour compiler il faut : Vérifier la syntaxe du code source Remplacer chaque instruction du code source par une séquence équivalente d’instructions en langage machine. Eventuellement optimiser le code obtenu Langage machine et compilation
A. SAVARYIUT Blois GTR1, 2004/0519 Compilateur C Assembleur change(int v [], int k) { int tmp; tmp = v[k]; v[k] = v[k+1]; v[k+1] = tmp; } Programme en langage de haut niveau, ici C (le “code source”) change : MOVE adr_v,A ADD addr_k,A MOVE (A),B ADD #1,A MOVE B,(A) … Programme en langage assembleur …. Programme en langage machine (l’“exécutable”) Compilation en couches Compilateur C
A. SAVARYIUT Blois GTR1, 2004/0520 Compilation, assemblage et édition de liens Code source du module B en langage d’assemblage (e.g. B.asm) Code source du module A en langage de haut niveau (e.g. A.c) Module A compilé (e.g. A.obj) Module B compilé (e.g. B.obj) Module C compilé (e.g. C.obj) Editeur de liens Programme en langage machine (l’exécutable, e.g. prog.exe): 10: module A 50: module B a0: module C CompilateurAssembleur
A. SAVARYIUT Blois GTR1, 2004/0521 Le langage machine constitue l’interface entre le logiciel et le matériel Chaque processeur a son propre langage machine (et son langage d’assemblage associé) réalisé : –soit directement par le matériel (e.g. architecure RISC) –soit par un microprogramme (e.g. JASPer), qui lui-même est réalisé par le matériel Chaque processeur ne peut exécuter (comprendre) que les programmes (exécutables) écrits en son langage machine. Conclusion : Un programme exécutable sur l’ordinateur A n’est pas exécutable sur un autre ordinateur B sauf si les langages machine des deux ordinateurs sont compatibles. Langage machine et la compatibilité
A. SAVARYIUT Blois GTR1, 2004/0522 Compatibilité ascendante des processeurs Un nouveau processeur (machine) respecte la comptabilité ascendante si les applications qui tournaient sur l’ancienne machine peuvent tourner sur la nouvelle machine sans modification Pour qu’il y ait comptabilité ascendante le langage machine du nouveau processeur doit au moins contenir toutes les instructions de l’ancien processeur. Elles peuvent être réalisées différemment mais doivent donner les mêmes résultats (i.e. doivent avoir la même interface). Si manque de comptabilité ascendante, les anciens programmes doivent être soit recompilés (les codes sources doivent être disponibles), soit réécrits (e.g. s’ils ont été écrits en assembleur) Exemple : les processeurs Intel sont compatibles en amont depuis le modèle 8086 (sorti en 1978).
A. SAVARYIUT Blois GTR1, 2004/0523 Compatibilité ascendante des processeurs La compatibilité ascendante est un poids lourd pour les concepteurs de nouveaux modèles de processeurs : Il faut tenir compte de tous les choix faits pour la conception des langages machines tout au long de l’histoire de la gamme de machines en question. Ces choix, souvent, ne sont pas cohérents avec les besoins et les possibilités actuelles. Du coup l’architecture est moins élégante et moins compacte (donc aussi moins performante) que si elle ne tenait compte que du langage machine le plus recent. C’est pourquoi l’introduction d’une machine totalement nouvelle (malgré son manque de compatibilité ascendante) peut s’avérer très intéressante. Ceci a été le cas de l’architecture RISC qui a proposé un jeu d’instructions très simples, peu nombreuses et exécutables très rapidement, ce qui a provoqué un gain très important de performances.
A. SAVARYIUT Blois GTR1, 2004/0524 Modes d’adressage
A. SAVARYIUT Blois GTR1, 2004/0525 Les valeurs auxquelles s’appliquent les opérations peuvent provenir : –directement de l’instruction (adressage immédiat) : 0010 ADD #10, B#Augmenter le contenu du registre B de 10 –des registres, (adressage par registre) 0700 ADD A, B #Additionner les contenus des registres A # et B ; placer le résultat dans le registre B –de la mémoire (adressage direct, indirect ou indexé) 3800 SHL (A)#Décaler à gauche un argument #dont l’adresse est dans le registre A Modes d’adressage
A. SAVARYIUT Blois GTR1, 2004/0526 Adressage immédiat La valeur de l’argument est une constante provenant directement de l’instruction, elle est précédée d’un “#”. Exemples : 0110 ADD #10, B#Additionner le contenu du registre B #avec la constante 10; placer le résultat #dans le registre B 9110 MOVE #10, B#Placer la constante 10 dans le registre B e810 JMP #10#Aller à la 9e instruction en comptant #à partir de l’instruction courante
A. SAVARYIUT Blois GTR1, 2004/0527 Adressage par registre Dès le début de l’instruction la valeur de l’argument se trouve dans un registre. Exemples : 0700 ADD A, B#Additionner le contenu du registre B #avec le contenu du registre B; placer le #résultat dans le registre B 3700 SHL B#Décaler le contenu du registre B à gauche e200 JMP A#Aller à l’instruction dont l’adresse #est contenue dans le registre A
A. SAVARYIUT Blois GTR1, 2004/0528 Adressage immédiat et par registre - microcode Exemple : Opcode e8 Mnemonic "JMP #dis" Description "Jump to a PC relative address" ALUx [PC] ALUy [IR(operand)] ALUr [ALUx]+[ALUy] PC [ALUr] Saut à une adresse relative au PC courant Premier argument provient du registre PC : adressage par registre Deuxième argument provient de l’instruction : adressage immédiat Code d’opération (en hexa)
A. SAVARYIUT Blois GTR1, 2004/0529 Adressage direct La valeur de l’argument se trouve dans la mémoire à l’adresse indiquée directement dans l’instruction. Exemples : 9210 MOVE 10,A#Placer dans le registre A le contenu #de la case mémoire à l’adresse SHR 10#Décaler à droite le contenu de la case #mémoire à l’adresse Mémoire avant l’instruction SHR 10: Mémoire après l’instruction : 102
A. SAVARYIUT Blois GTR1, 2004/0530 Adressage direct - microcode Exemple : Opcode 92 * addr 00 to FF Mnemonic "MOVE addr,A" Description "Load reg. A from a direct addr." MAR [IR(operand)] MDR [M([MAR])] A [MDR] Chargement d’un argument direct dans A L’adresse de l’argument provient de l’instruction L’argument provient de l’adresse mémoire trouvée dans l’instruction
A. SAVARYIUT Blois GTR1, 2004/0531 Adressage indirect Mémoire avant l’instruction SHR (10): Mémoire après l’instruction La valeur de l’argument se trouve dans la mémoire à l’adresse indiquée par un registre ou par une autre case mémoire dont l’adresse se trouve dans l’instruction. Ce registre ou cette dernière adresse apparaît entre parenthèses. Exemples : 4800 SHR (A) #Décaler à droite le contenu de la case mémoire # dont l’adresse se trouve dans le registre A 4410 SHR (10) #Décaler à droite le contenu de la case mémoire #dont l’adresse se trouve dans la case mémoire 10
A. SAVARYIUT Blois GTR1, 2004/0532 Adressage indirect - microcode Exemple : Opcode 44 * addr and (addr) 00 to FF Mnemonic "SHR (addr)" Description "Shift right a memory indirect oper." MAR [IR(operand)] MDR [M([MAR])] IR [MDR] MAR [IR(operand)] MDR [M([MAR])] ALUx [MDR] ALUr [ALUx]>>1 MDR [ALUr] M([MAR]) [MDR] Décalage à droite d’un argument indirect L’instruction contient un pointeur vers une case mémoire… …où se trouve l’adresse d’une autre case mémoire… …où se trouve l’argument
A. SAVARYIUT Blois GTR1, 2004/0533 Adressage indexé Mémoire avant l’instruction SHR B+10: Mémoire après l’instruction : Registre B: La valeur de l’argument se trouve dans la mémoire à l’adresse qui est la somme du contenu d’un registre avec la valeur qui se trouve dans l’instruction. Exemple : 4b10 SHR B+10 #Décaler à droite le contenu de la #case mémoire dont l’adresse est #la somme du registre B et 10
A. SAVARYIUT Blois GTR1, 2004/0534 Adressage indexé - microcode Exemple : Opcode 4b * addr 00 to FF Mnemonic "SHR B+addr" Description "Shift right a memory indexed oper. (Index in B)" ALUy [IR(operand)] ALUx [B] ALUr [ALUx]+[ALUy] MAR [ALUr] MDR [M([MAR])} ALUx [MDR] ALUr [ALUx]>>1 MDR [ALUr] M([MAR])<-[MDR] Décalage à droite d’un argument indexé L’instruction contient la valeur qu’il faut additionner avec B… …pour obtenir l’adresse effective de l’argument
A. SAVARYIUT Blois GTR1, 2004/0535 Résumé - architecture en couches
A. SAVARYIUT Blois GTR1, 2004/0536 Les instructions du langage d’assemblage sont mises en oeuvre par des fonctionnalité du système d’exploitation (appels système) et par des instructions du langage machine. Les instructions du langage machine peuvent être mises en oeuvre soit par des séquences de microinstructions, soit directement par le matériel. Les microinstructions sont des instructions qui provoquent des signaux matériels de base donnés par l’unité de contrôle au chemin de données. Architecture en couches (rappel) Les instructions du langage de haut niveau sont mises en oeuvre soit par des instructions du langage d’assemblage, soit directement par des appels système et celles du langage machine. Matériel