Cours magistraux
Transcription
Cours magistraux
Introduction Introduction Chapitres Introduction aux Architectures Logicielles et Matérielles Fabienne Carrier 1 Codage des informations 2 Modèle de Von Neumann 3 Langage d’assemblage (ARM) et language machine 4 Instruction de rupture de séquence et programmation des structures de contrôle 5 Programmation à partir des automates reconnaisseurs 6 Programmation des appels de procédure et fonction (3 séances) 7 Introduction à la structure interne des processeurs 8 Vie des programmes 9 Organisation d’un ordinateur 10 Introduction aux circuits Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Introduction aux Architectures Logicielles et Matérielles 9 janvier 2015 1 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Carrier, Devismes (Grenoble I) Introduction aux Architectures Logicielles et Matérielles 9 janvier 2015 2 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Plan Codage des informations et représentation des entiers par des vecteurs binaires Fabienne Carrier Stéphane Devismes 1 Codage 2 Représentation des naturels par vecteurs binaires 3 Exercices de synthèses 4 Représentation des relatifs par vecteurs binaires 5 Opérations Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 1 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 2 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Définition Exemples (1/3) : Codage des 16 couleurs du Commodore 64 Un codage est une bijection entre un ensemble d’informations et un ensemble de naturels. B 0 1 2 3 4 0 a f 1 b 5 e b3 b2 b1 b0 0000 0001 0010 0011 0100 noir blanc rouge cyan violet B 5 6 7 8 9 b3 b2 b1 b0 0101 0110 0111 1000 1001 B 10 11 12 13 14 15 vert bleu jaune orange brun 2 d b3 b2 b1 b0 1010 1011 1100 1101 1110 1111 rose gris foncé gris moyen vert pâle bleu pâle gris pâle 3 c Code C64 (violet) = 4 ; Decode C64 (12) = gris moyen. 4 Remarque Codage Décodage Pas de propriétés particulières : ordre, relation avec les couleurs, notion de clair/foncé, . . . F IGURE: Exemple de bijection Pour N informations, on choisit en général l’intervalle [0, N − 1]. Fonctions de codage dans un sens, de décodage dans l’autre. Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 4 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 5 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Exemples (2/3) : Codage des 16 couleurs sur les premiers PC couleurs Exemples (3/3) : Code ASCII (Ensemble des caractères affichables) B 0 1 2 3 4 b3 b2 b1 b0 0000 0001 0010 0011 0100 noir bleu vert cyan rouge B 5 6 7 8 9 b3 b2 b1 b0 0101 0110 0111 1000 1001 violet brun gris noir pâle bleu pâle B 10 11 12 13 14 15 b3 b2 b1 b0 1010 1011 1100 1101 1110 1111 vert pâle cobalt rose mauve jaune blanc ASCII = American Standard Code for Information Interchange On obtient le tableau ci-dessous par la commande Unix man ascii 32 40 48 56 64 72 80 88 96 104 112 120 Propriétés Chaque bit a un sens : En regardant le code en base 2, on voit un bit de rouge (b2), un bit de vert (b1), un bit de bleu (b0) et un bit de clair (b3). Le codage du violet est fait de bleu et de rouge . . . Remarque ( 0 8 @ H P X ‘ h p x 33 41 49 57 65 73 81 89 97 105 113 121 ! ) 1 9 A I Q Y a i q y 34 42 50 58 66 74 82 90 98 106 114 122 ” * 2 : B J R Z b j r z 35 43 51 59 67 75 83 91 99 107 115 123 # + 3 ; C K S [ c k s { 36 44 52 60 68 76 84 92 100 108 116 124 $ , 4 < D L T \ d l t | 37 45 53 61 69 77 85 93 101 109 117 125 % 5 = E M U ] e m u } 38 46 54 62 70 78 86 94 102 110 118 126 & . 6 > F N V ˆ f n v ˜ 39 47 55 63 71 79 87 95 103 111 119 127 ’ / 7 ? G O W g o w del Code ascii (q) = 113 ; Decode ascii (51) = 3. Aujourd’hui, codage en niveaux d’intensité de rouge, vert et bleu (RVB) sur 8 bits. Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 6 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 7 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Ensemble muni de relations et d’opérations Application en langage C printf("%c",’b’+’A’-’a’); Codage qui respecte les relations et opérations. char c; scanf("%c",&c); if(c>=’a’ && c<=’z’) printf("%c est une lettre minuscule",c); Par exemple, dans le code ASCII : respect de l’ordre alphabétique passage de majuscules à minuscule (code majuscule + 32 = code minuscule) respect de l’ordre des chiffres décimaux Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 8 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 9 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage d’ensemble structuré : ex villes olympiques (1/2) Code des villes olympiques (2/2) Le code d’une ville est alors un quadruplet. E= {Albertville, Athènes, Atlanta, Chamonix, Grenoble, Los Angeles, Melbourne, Mexico, Montréal, Paris, Pékin, Rome, Sydney, Tokyo} continent Amérique Codage en utilisant une hiérarchie : pays Canada Etats-Unis niveau 1 : continents → Amérique, Asie, Europe, Océanie. Asie niveau 2 : pays → en Amérique, Canada, E.U., Mexique. Europe Mexique Chine Japon France Océanie Grece Italie Australie région Californie Géorgie Ile de France Rhône-Alpes niveau 3 : régions → en France, Ile de France, Rhône-Alpes. niveau 4 : villes → en Rhône-Alpes, Alberville, Chamonix, . . . Les villes sont alors les feuilles d’un arbre. New South Wales Victoria ville Montréal Los Angeles Atlanta Mexico Pékin Tokyo Paris Albertville Chamonix Grenoble Athenes Rome Sydney Melbourne code quadruplet (0, 0, 0, 0) (0, 1, 0, 0) (0, 1, 1, 0) (0, 2, 0, 0) (1, 0, 0, 0) (1, 1, 0, 0) (2, 0, 0, 0) (2, 0, 1, 0) (2, 0, 1, 1) (2, 0, 1, 2) (2, 1, 0, 0) (2, 2, 0, 0) (3, 0, 0, 0) (3, 0, 1, 0) Codage de chaque continent, pays, région, ville par un entier. Pour les objets Si ce code vous parait inventé , essayez donc de comprendre le code des unités de même niveau, on utilise l’ordre alphabétique. d’enseignement, il y a quelques ressemblances . . . Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 10 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 11 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Produit cartésien : correspondance entre n uplet et naturel (1/2) Codage d’ensemble structuré : autres exemples Codage d’instructions, de commandes, d’ordres,. . . E = {0, 1, 2, 3} × {0, 1, 2, 3, 4} Il y a 4*5=20 informations Le code est un entier dans {0, 1, 2, .., 19} On peut imaginer de coder par des N uplets : des ordres, des commandes à un robot, des instructions d’ordinateur, ... numéro du bras 3 2 Compléter le tableau ci-après : direction Nord Sud numéro de case mémoire 12345 47 Carrier, Devismes (Grenoble I) angle 135 45 vitesse de déplacement haute très faible action remise à zéro incrémentation ... ... ... 0 9 janvier 2015 2 3 4 0 1 2 3 ... ... ... Codage et représentation des entiers par des vecteurs binaires 1 12 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 13 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Correspondance entre n uplet et naturel (2/2) Conclusion sur le codage : Où est le code ? Le code n’est pas dans l’information codée. Par exemple : 14 est le code du jaune dans le code des couleurs du PC ou le code du couple (2,4) ou le code du bleu pâle dans le code du commodore 64. Pour interpréter, comprendre une information codée il faut connaı̂tre la règle de codage. Le code seul de l’information ne donne rien, c’est le système de traitement de l’information (logiciel ou matériel) qui connait la règle de codage, sans elle il ne peut pas traiter l’information. Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 14 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 15 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Exercice : Enumérer les nombres représentables sur 3 chiffres binaires. Numération de position En numération de position, avec N chiffres en base b on peut représenter les bN naturels de l’intervalle [0, bN -1] Exemple : en base 10 avec 3 chiffres on peut représenter les 103 naturels de l’intervalle [0, 999]. Avec N chiffres binaires (base 2) on peut écrire les 2N naturels de l’intervalle [0, 2N − 1] Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 17 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 18 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Logarithme et taille de donnée (1 sur 2) Logarithme et taille de donnée (2 sur 2) On ne s’intéresse qu’à la base 2 : un chiffre binaire est appelé bit. Par exemple, on veut représenter les naturels de l’intervalle [0,. . .,9] 10 entiers, la puissance de 2 la plus proche est 16 = 24 , il faut 4 bits. Logarithme : opération réciproque de l’élévation à la puissance Si Y = 2X , on a X = log2 Y De même pour les naturels de l’intervalle [0,. . .,15] Pour représenter en base 2, K naturels différents, il faut dlog2 K e chiffres en base 2 Pour représenter les naturels de l’intervalle [0,. . .,255], il faut 8 bits (28 = 256) Si K est une puissance de 2, K = 2N , il faut N bits. Si K n’est pas une puissance de 2, soit P > K , P la plus proche puissance de 2, il faut log2 P bits. Pour coder les naturels de [0,. . .,127], il faut 7 bits (27 = 128). Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 19 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 20 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Quelques valeurs à connaı̂tre Conversion base 10 vers base 2 : Première méthode X 0 1 2 3 4 8 10 16 20 30 32 La méthode des restes successifs donnent les chiffres en commençant par celui des unités. 2X 1 2 4 8 16 256 1 024 (≈ 1 000) 65 536 1 048 576 (≈ 1 000 000, 1 Méga) 1 073 741 824 (≈ 1 000 000 000, 1 Giga) 4 294 967 296 169 = 84 × 2 + 1 (chiffre des unités = 1) 169 = (42 × 2 + 0 )× 2 + 1 (chiffre suivant = 0) 169 = ((21 × 2 + 0 ) × 2 + 0 )× 2 + 1 169 = (((10 × 2 + 1 ) × 2 + 0 ) × 2 + 0 )× 2 + 1 169 = ((((5 × 2 + 0 ) × 2 + 1 ) × 2 + 0 ) × 2 + 0 )× 2 + 1 169 = (((((2 × 2 + 1 ) × 2 + 0 ) × 2 + 1 ) × 2 + 0) × 2 + 0 )× 2 + 1 169 = (((((( 1 × 2 + 0 ) × 2 + 1 ) × 2 + 0 ) × 2 + 1 ) × 2 + 0 ) × 2 + 0 )× 2 + 1 On a ainsi 16910 = 101010012 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 21 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 22 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Conversion base 10 vers base 2 : Deuxième méthode Conversion base 10 vers base 2 : Troisième méthode 169 2 1 84 2 Utilisation des puissances de 2 : 0 42 2 0 21 2 27 128 1 10 2 0 5 2 1 2 2 0 1 2 1 0 (169)10=(10101001)2 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 23 Carrier, Devismes (Grenoble I) 26 64 25 32 24 16 23 8 22 4 21 2 20 1 Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 24 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Exercices Utilisation de la base 16 : hexadécimal Les 16 chiffres sont 0, 1, .., 8, 9, A, B, C, D, E, F. Ils représentent respectivement les naturels qui s’écrivent 0, 1, .. 8, 9, 10, .., 15 en décimal. Sur 4 bits . . . 23 = 810 = 1010 = 1310 = 22 = 110 = 1210 = 1110 = 21 = 410 = 610 = 510 = 20 = 23 = 22 = 18810 = 21 = Ecrire les nombres de 0 à 15 en base 10, 2 et 16 : base 10 0 1 2 3 4 5 6 7 Sur 8 bits . . . 27 = 26 = 1110 = Carrier, Devismes (Grenoble I) 25 = 24 = 6710 = Codage et représentation des entiers par des vecteurs binaires 20 = 9 janvier 2015 25 Carrier, Devismes (Grenoble I) base 2 base 16 base 10 8 9 10 11 12 13 14 15 base 2 base 16 Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 26 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Passage d’une base à l’autre Exercice : codage par champs On veut coder une information du style : lundi 12 janvier 169 = 10 × 16 + 9 169 s’écrit A9 en hexadécimal Triplet Codage du jour : {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche} : entier entre 1 et 7 Codage du quantième du jour dans le mois : entier entre 1 et 31 Codage du mois : entier entre 1 et 12 On obtient cette écriture en remplaçant dans l’écriture en base 2, 1010 1001 : 1010 par A et 1001 par 9 base 2 16 Carrier, Devismes (Grenoble I) x 010010011101 y 100011110000 z t 0...0...8.. 5...5...A.. Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 lundi 12 janvier codé par : date associée au code 011 00101 0011 : date associée au code 111 11111 1111 : 27 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 29 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Exercice : codage d’une instruction ARM (1 sur 2) Exercice : codage d’une instruction ARM (2 sur 2) Les instructions sont codées sur 32 bits 31 28 cond 27 26 00 25 I 24 21 1101 20 S 19 16 0000 15 12 rd 11 8 0000 31 28 cond 7 0 immediat 27 26 00 20 S 19 16 0000 15 12 rd 11 4 00000000 30 rm Exercice : quel est le codage de l’instruction MOV r5, r7 Exercice : quel est le codage de l’instruction MOV r5, ]12 Codage et représentation des entiers par des vecteurs binaires 24 21 1101 F IGURE: Codage de l’instruction mov version 2 F IGURE: Codage de l’instruction mov version 1 Carrier, Devismes (Grenoble I) 25 I 9 janvier 2015 30 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 31 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Une première idée : bit signe = bit de poid fort Solution : Complément à deux Sur n bits, en choisissant 00...000 pour le codage de zéro, il reste 2n − 1 possibilités de codage : la moitié pour les positifs, la moitié pour les négatifs. Par exemple sur 4 bits : Attention, ce n’est pas un nombre pair, l’intervalle des entiers relatifs codés ne sera pas symétrique. (+3)2 = 0011, (−3)2 = 1011, (−2)2 = 1010 Principe : Les entiers positifs sont codés par leur code en base 2 Problèmes : Les entiers négatifs sont codés de façon à ce que code(a) + code(-a) = 0 deux représentations pour zéro : 0000 ou 1000 D’où sur 8 bits, intervalle représenté [−128, +127] = [−27 , 27 − 1] (−3) < (−2), mais 1011 > 1010 x ≥ 0 x ∈ [0, +127] : CodeC2(x)=x (3) + (−3) = 0 mais 0011 + 1011 = 1110 6= 0 x < 0 x ∈ [−128, −1] : CodeC2(x)=x+256 = x+28 (x étant négatif, x+28 est codable sur 8 bits) (x+28 > 127, donc pas d’ambiguı̈té) algorithme d’addition complexe CodeC2(a)+CodeC2(-a) = a-a+28 = 0 (sur 8 bits) Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 33 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 34 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Complément à deux : exemples Complément à deux sur 8 bits : tous les entiers relatifs CodeC2(3)=3, CodeC2(127)=127, CodeC2(0)=0, CodeC2(-128)=-128+256=128, CodeC2(-1)=-1+256=255 entier relatif -128 -127 -126 ... -1 0 1 2 ... 12 ... 127 En binaire sur 8 bits base 10 3 127 0 -128 -1 Carrier, Devismes (Grenoble I) base 2 0000 0011 0111 1111 0000 0000 1000 0000 1111 1111 Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 35 Carrier, Devismes (Grenoble I) Code(base10) 128 129 130 CodeC2(base2) 1000 0000 1000 0001 1000 0010 255 0 1 2 1111 1111 0000 0000 0000 0001 0000 0010 12 0000 1100 127 0111 1111 Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 36 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Correspondances entre les relatifs de l’intervalle [-8,+7] et le complément à 2 sur 4 bits Complément à deux : trouver le code d’un entier négatif Soit un entier relatif positif a codé par les n chiffres binaires : an−1 an−2 ...a1 a0 valeur(-a) Établir un tableau où les codes seront représentés en base 10 et en base 2. = = = = = = 2n − valeur(a) 2n − (an−1 2n−1 + an−2 2n−2 + ... + a1 2 + a0 ) (2n−1 + 2n−1 ) − (an−1 2n−1 + an−2 2n−2 + ... + a1 2 + a0 ) (1 − an−1 )2n−1 + 2n−1 − (an−2 2n−2 + ... + a1 2 + a0 ) ...................... (1 − an−1 )2n−1 + (1 − an−2 )2n−2 + ... + (1 − a0 ) + 1 Règle : écrire le code de la valeur absolue, inverser tous les bits, ajouter 1 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 37 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 38 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Complément à deux binaire Retour sur la conclusion précédente : Où est le code ? On inverse les bits de l’écriture binaire de sa valeur absolue, on fait ce qu’on appelle le complément à un, Soit le vecteur binaire 1001. Que représente-t-il ? On ajoute 1 au résultat (les dépassements sont ignorés). Sans la règle de codage, on ne sait pas répondre Il peut être : Exemple : 5 codé sur 8 bits (5)2 = 00000101 Complément à un : 11111010 Complément à deux : 11111011, c’est le code de (−5) le code d’une couleur : bleu pale le code du naturel 910 sur 4 bits le code du relatif (−7)10 sur 4 bits. Opération inverse : Complément à un de 11111011 : 00000100 Complément à deux : 00000101 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 39 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 40 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Addition (1/3) Addition (2/3) Rappel : en base 10 + = Retenue A B A+B 1 1 1 7 2 0 1 2 9 2 L’algorithme que le processeur exécute est le même que celui pratiqué à la main si ce n’est que la taille des données est bornée. 9 9 8 A, B deux naturels sur N bits, la somme A+B peut réclamer un bit supplémentaire Le processeur gère un indicateur C (pour Carry) : on parle de retenue sortante On a des retenues, des propagations de retenues En base 2 + = Carrier, Devismes (Grenoble I) Retenue A B A+B 0 1 0 1 1 0 0 1 1 1 1 1 Exemple sur 4 bits : 910 + 810 = 10012 + 10002 La somme en base 2 s’écrit 10001 qui code bien l’entier 1710 Pour le processeur les 4 bits de résultat sont 0001 et C=1 1 1 0 Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 42 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 43 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Addition (3/3) Exercice Donnez le résultat apparent des additions d’entiers relatifs suivantes, puis convertissez le résultat en base 10 : Somme de deux relatifs : même algorithme Interprétation différente du résultat n entier relatif représenté sur 4 bits : n ∈ [−8, +7] 0 0 1 0 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 510 + 210 = 01012 + 00102 = 01112 = 710 510 + 310 = 01012 + 00112 = 10002 = −810 car 1000 en complément à 2 représente −8 ! ! ! Dans ce cas, le processeur utilise l’indicateur V pour donner cette information. V = 1 indique un débordement, auquel cas les deux dernières retenues sont de valeurs différentes. Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 44 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 45 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Autres opérations Exercice Donnez le résultat apparent des soustractions d’entiers relatifs suivantes, puis convertissez le résultat en base 10 : soustraction A-B = A + complémentaire à deux de B La différence n’est pas toujours possible . . . 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 multiplication par une puissance de 2 : décalage à gauche division par une puissance de 2 : décalage à droite modulo par une puissance de 2 (mod), reste d’une division par 2k Rappel : en base 10, 3159 mod 10 = 9, 3159 div 10 = 315 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 46 Carrier, Devismes (Grenoble I) Codage et représentation des entiers par des vecteurs binaires 9 janvier 2015 47 Codage Représentation des naturels par vecteurs binaires Exercices de synthèses Représentation des relatifs par vecteurs binaires Opérations Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Retour sur les entiers naturels A − B = A + CodeC2(B) Que signifie C dans ce contexte ? Modèle de Von Neumann : qu’est ce qu’un ordinateur ? A − B sans le complément à deux : notion d’emprunt 14 − 3 (sur 8 bits) E=0 − 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 1 Fabienne Carrier 0 1 1 Université Joseph Fourier, Grenoble I 14 + CodeC2(3) (sur 8 bits) C=1 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 Stéphane Devismes 9 janvier 2015 0 1 1 C =E. Donc, C =1 ssi le résultat de la soustraction est correct, c-à-d, A≥B. Carrier, Devismes (Grenoble I) Introduction Notion de modèle Codage et représentation des entiers par des vecteurs binaires La mémoire (centrale) Les entrées /sorties Le processeur 9 janvier 2015 48 Les ordinateurs actuels Plan Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur Historique Les premiers ordinateurs ont été construit pour des besoins militaires (calcul balistique, décryptage, . . .) 1 Introduction 2 Notion de modèle 1936, Turing invente la machine de Turing, les concepts de programmation et de programme 3 La mémoire (centrale) Peu avant la seconde guerre mondiale, les premières calculatrices électromécaniques, construites selon les idées de Turing 4 Les entrées /sorties Lors de la 2e guerre mondiale, le Colossus : le premier ordinateur fonctionnant en langage binaire Le processeur 1945, L’ENIAC est le premier ordinateur entièrement électronique ayant la puissance des machines de Turing 5 1 Les ordinateurs actuels 1948, les premières machines à architecture de Von Neumann 6 Les ordinateurs actuels 1952, IBM produit son premier ordinateur, l’IBM 701, pour la défense américaine Années 70, premiers micro-ordinateurs Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 2 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 4 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Générations Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Qu’est ce qu’un ordinateur ? Vision concrète, matérielle des circuits : unité de calcul (UAL), mémoire des fils (nappes de fils) Première génération : (à partir de 1946) l’ENIAC des histoires de potentiel Deuxième génération : (1956-1963) remplacement des tubes électroniques par des transistors du temps de calcul Troisième génération : (1963-1971) circuit intégré Vision abstraite Quatrième génération : (1971 à nos jours) microprocesseur des modèles des instructions de calcul des fonctions de mémorisation des informations (bits, mots binaires. . .) Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 5 Les ordinateurs actuels Un modèle de calcul : la machine de Turing (1 /5) Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 6 Les ordinateurs actuels Exemple de modèle de calcul : la machine de Turing (2 /5) Chaque case contient un symbole parmi un alphabet fini. L’alphabet contient un symbole spécial blanc . Utilisation : incrémentation d’un entier naturel écrit en binaire Etat initial du ruban : Plusieurs cases consécutives remplies avec des 1 et des 0 avec plusieurs cases blanches à gauche (au moins deux) et plusieurs cases blanches à droite (au moins une). Un ruban divisé en cases. Le ruban est supposé de longueur infinie vers la gauche ou vers la droite. La tête de lecture est initialement sur le bit de poids fort (le plus à gauche). Une tête de lecture/écriture peut lire, écrire, et se déplacer vers la gauche ou vers la droite du ruban. Un registre d’état qui mémorise l’état courant. Le nombre d’états possibles est toujours fini. Il existe un état spécial appelé état de départ. Actions : placer la tête de lecture sur le bit de poids faible, incrémenter en propageant la retenue éventuelle, puis replacer la tête de lecture sur le bit de poids fort. Une table d’actions indique quel symbole écrire, comment déplacer la tête de lecture, et quel est le nouvel état, en fonction du symbole lu sur le ruban et de l’état courant. Si aucune action n’est applicable, la machine s’arrête. Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 8 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 9 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Exemple de modèle de calcul : la machine de Turing (3 /5) Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Exemple de modèle de calcul : la machine de Turing (4 /5) Donnez la trace d’exécution à partir de l’entrée 11100111 Etat initial : I Etat I I I A A A Ok Ok Ok Carrier, Devismes (Grenoble I) Introduction Notion de modèle Lu 1 0 Ecrit 1 0 0 1 1 0 1 0 1 0 1 Direction D D G G G G G G D Etat I I A Ok A Ok Ok Ok Fini Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 10 Les ordinateurs actuels Exemple de modèle de calcul : la machine de Turing (5 /5) Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 11 Les ordinateurs actuels Modèle de Von Neumann Modèle à la base des ordinateurs actuels Une structure de stockage unique pour conserver à la fois les instructions et les données requises ou générées par le calcul. De telles machines sont aussi connues sous le nom d’ordinateurs à programme stocké en mémoire. Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 12 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 13 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Description du modèle de Von Neumann (1/3) Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Description du modèle de Von Neumann (2/3) mémoire centrale Trois entités : le processeur programme unité de calcul appelée UAL (Unité Arithmétique et Logique) unité de contrôle appelée aussi unité de commande processeur données la mémoire dite centrale le système d’entrées/sorties, liaisons avec l’extérieur (périphériques) écran, clavier, souris mémoire secondaire (disque, CD, DVD, bande, etc) réseau (ethernet, wifi, etc) mémoire secondaire (disque) F IGURE: Processeur, mémoire et périphériques Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 14 Les ordinateurs actuels Description du modèle de Von Neumann (3/3) Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 15 Les ordinateurs actuels Mémoire centrale (vision abstraite) La mémoire contient des informations prises dans un certain domaine La mémoire contient un certain nombre (fini) d’informations le processeur exécute le programme contenu dans la mémoire centrale. Les informations sont codées par des vecteurs binaires d’une certaine taille la mémoire centrale contient à la fois les données et le programme qui “dit” au processeur quels calculs faire sur ces données. 0 le système d’entrées-sorties permet de communiquer avec le monde extérieur (réseau, utilisateur, . . .) et fait la liaison avec les mémoire secondaires Remarque Les programmes traitent des représentations des informations. Les programmes sont aussi des informations. max-1 taille F IGURE: Mémoire abstraite Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 16 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 18 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Mémoire centrale : notion d’adresse Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Mémoire centrale (vision physique) Toutes les informations sont représentées par des vecteurs binaires ce qui permet des connexions par des nappes de fils. 16 bits Les informations contenues dans la mémoire sont désignables par une adresse 15 1 0 0 8 fils On parle aussi d’emplacement mémoire On parle aussi d’emplacement précédent, suivant BUS ADRESSES BUS CONTROLE Dans l’exemple précédent, une adresse est un numéro d’emplacement parmi [0, max-1]. 2^8!1 BUS DONNEES 16 fils F IGURE: Mémoire physique d’info sur 16 bits avec adresses sur 8 bits Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 19 Les ordinateurs actuels Mémoire centrale : informations de tailles variables Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 20 Les ordinateurs actuels Mémoire centrale : adresses en octets Les adresses sont exprimées en nombre d’octets. Les informations en mémoire sont : de taille 8 bits : octet (byte) Par exemple, si on considère des mots de 32 bits (4 octets), si un mot est à l’adresse X, le suivant est à l’adresse X+4 de taille 16 bits : demi-mot (hword, halfword) de taille 32 bits : mot (word) Une adresse est aussi représentée sur un certain nombre de bits. de taille 64 bits : double-mot (dword, double word) Par exemple, si les numéros d’emplacement vont de 0 à max-1, l’adresse est codée par un vecteur binaire de dlog2 max e bits. Par exemple, une adresse codée sur 32 bits permet de désigner 232 octets différents. Mémoire centrale : vision logique Max informations de 8 bits i.e. Max octets Max / 4 mots de 32 bits Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 21 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 22 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Tailles des mémoires centrales (1 /2) Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Tailles des mémoires centrales (2 /2) Unités utilisées 1 kilooctet = 103 octets Ordinateur de poche, PDA (Personal Digital Assistant) : 500 Mo 1 mégaoctet = 106 octets Ultra-portable : 2 à 4 Go 1 gigaoctet = 109 octets Ordinateur de bureau, station de travail : 4 à 8 Go 1 téraoctet = 1012 octets Super ordinateur (CRAY XT Jaguar - IBM) : 362 Tera octets 1 pétaoctet = 1015 octets Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 23 Les ordinateurs actuels Actions sur la mémoire centrale Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 24 Les ordinateurs actuels Actions sur la mémoire : LIRE La mémoire reçoit : un vecteur binaire (représentant une adresse A) sur le bus adresses, un signal de commande de lecture sur le bus de contrôle. Les informations mémorisées dans la mémoire centrale peuvent être : Elle délivre un vecteur binaire représentant la donnée D sur le bus données. consultées (plusieurs fois) 0 modifiées BUS ADR D A La mémoire centrale contient, non seulement des données mais aussi le programme. BUS CTRL LIRE max-1 BUS DON D On note : D <-- mem[A] mem[A] : emplacement mémoire dont l’adresse est A Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 25 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 26 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Actions sur la mémoire : ECRIRE Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Actions sur la mémoire : NE RIEN FAIRE La mémoire reçoit : un vecteur binaire (représentant une adresse A) sur le bus adresses, un vecteur binaire (représentant la donnée D) sur le bus données, un signal de commande d’écriture sur le bus de contrôle. Elle inscrit (peut-être, voir tableau ci-après) la donnée D comme contenu de l’emplacement mémoire dont l’adresse est A Bus contrôle : ni lecture, ni écriture. 0 La mémoire garde indéfiniment (peut-être, voir tableau ci-après) les informations. BUS ADR ?? A BUS CTRL ECRIRE max-1 BUS DON D On écrit : mem[A] <-- D Remarque : le bus données est bidirectionnel Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 27 Les ordinateurs actuels Différents types de mémoires (centrales) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 28 Les ordinateurs actuels Autres types de mémoires nom volatilité modifiabilité ROM mémoire morte non Eprom (+ variantes) non mémoire flash non RAM mémoire vive oui inscrite à la fabrication par l’usine de fabrication semi-conducteurs modifiable (100 fois) par l’atelier PMIPME électronique modifiable 100 000 fois l’utilisateur de l’appareil de carte bancaire, téléphone, vitale modifiable autant de fois que le signal écriture sera activé Les mémoires secondaires désignent les mémoires périphériques telles que le disque dur, CD-ROM, DVD, clé USB, . . . La mémoire cache est une mémoire relativement petite et rapide qui stocke les informations les plus utilisées d’une autre mémoire plus grande et plus lente. La mémoire virtuelle (swap) est un mécanisme qui permet à des programmes de pouvoir s’exécuter dans un environnement matériel possédant moins de mémoire centrale que nécessaire. La mémoire centrale se divise entre mémoire volatile (RAM) (programmes et données en cours de fonctionnement) et mémoire permanente (ROM et EPROM) (programmes et données de Taille des disques (mémoires secondaires) base de la machine) Carrier, Devismes (Grenoble I) Carrier, Devismes (Grenoble I) Ultra-portable : 200 à 500 Go Ordinateur de bureau, station de travail : un Tera octets Super ordinateur (CRAY XT JAGUAR - IBM) : 10 Peta octets Modèle de Von Neumann 9 janvier 2015 29 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 30 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Résumé : processeur/mémoire Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Entrées /Sorties : définitions On appelle périphériques d’entrées/sortie les composants qui permettent : Processeur : circuit relié à la mémoire (bus adresses, données et contrôle) La mémoire contient des informations de nature différentes : des données : représentation binaire d’une couleur, d’un entier, d’une date, etc. L’intéraction de l’ordinateur (mémoire et processeur) avec l’utilisateur (clavier, écran, . . .) des instructions : représentation binaire d’une ou plusieurs actions à réaliser. Le processeur, relié à une mémoire, peut : L’intéraction de l’ordinateur avec le réseau (carte réseau, carte WIFI, . . .) lire un mot : le processeur fournit une adresse, un signal de commande de lecture et reçoit le mot. L’accès aux mémoires secondaires (disque dur, clé USB. . .) écrire un mot : le processeur fournit une adresse ET une donnée et un signal de commande d’écriture. L’accès aux périphériques se fait par le biais de ports (usb, serie, pci, . . .). ne pas accéder à la mémoire. exécuter des instructions, ces instructions étant des informations lues en mémoire. Sortie : ordinateur −→ extérieur Entrée : extérieur −→ ordinateur Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 31 Les ordinateurs actuels Les bus Carrier, Devismes (Grenoble I) Introduction Modèle de Von Neumann Notion de modèle La mémoire (centrale) 9 janvier 2015 Les entrées /sorties Le processeur 33 Les ordinateurs actuels Composition du processeur Le processeur est composé d’unités (ressources matérielles internes) : Un bus informatique désigne l’ensemble des lignes de communication (câbles, pistes de circuits imprimés, ...) connectant les différents composants d’un ordinateur. des registres : cases de mémoire interne Caractéristiques : désignation, lecture et écriture “simultanées” des unités de calcul (UAL) une unité de contrôle : (UC, Central Processing Unit) Le bus de données permet la circulation des données. un compteur ordinal ou compteur programme : PC Le bus d’adresse permet au processeur de désigner à chaque instant la case mémoire ou le périphérique auquel il veut faire appel. processeur memoire registres Le bus de contrôle indique quelle est l’opération que le processeur veut exécuter, par exemple, s’il veut faire une écriture ou une lecture dans une case mémoire ; on trouve également, dans le bus de contrôle, une ou plusieurs lignes qui permettent aux périphériques d’effectuer des demandes au processeur ; ces lignes sont appelées lignes d’interruptions matérielles (IRQ). programme= suite d’instructions PC R0 R1 R2 R3 calcul bus adr bus ctrl controle bus don Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 34 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 36 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Notion d’exécution séquentielle des instructions(1/3) Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Notion d’exécution séquentielle des instructions (2 /3) Pour exécuter une suite d’instructions (programme), le processeur effectue : bus contrôle 0 Répéter : Reg1 Reg2 8 2 12 4 lire une instruction à l’adresse contenue dans PC Données 16 exécuter cette instruction calculer l’adresse de l’instruction suivante et mettre à jour PC Reg1 <−− Mem[8] PC Reg2 <−− Mem[12] Programme Reg2 <−− Reg1 − Reg2 démarrage : signal physique (RESET) → forcer une valeur initiale dans PC Mem[16] <−− Reg2 bus adresses UAL arrêt : jamais (sauf coupure de courant. . .). Max−1 bus données Remarques : Dans certaines machines (machines portables, embarquées, . . .) le fonctionnement peut être suspendu pour économiser de l’énergie F IGURE: Un exemple d’exécution d’un programme Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 37 Les ordinateurs actuels Notion d’exécution séquentielle des instructions (3 /3) Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 38 Les ordinateurs actuels Représentation d’une instruction en mémoire : un vecteur de bits Programme : suite de vecteurs binaires qui codent les instructions qui doivent être exécutées. −→ exécution séquentielle Le codage des instructions constitue le Langage machine (ou code machine). certaines instructions spécifiques donnent l’adresse de l’instruction suivante Chaque modèle de processeur a son propre langage machine (on dit que le langage machine est natif) −→ rupture de séquence Modèle de Von Neumann Introduction Codage des instructions : langage machine les instructions sont normallement exécutées dans l’ordre où elles sont écrites en mémoire Carrier, Devismes (Grenoble I) Carrier, Devismes (Grenoble I) 9 janvier 2015 39 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 40 Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Architectures Logicielles et Matérielles Introduction Notion de modèle La mémoire (centrale) Les entrées /sorties Le processeur Les ordinateurs actuels Informatique omniprésente (Ubiquitous Computing) Téléphone portable Architecture logicielle (ISA, Instruction Set Architecture) PDA −→ organisation du langage machine et son utilisation Console de jeux Lecteur de cartes magnétiques Capteur (sensor) Architecture matérielle Puce RFID −→ comment le langage machine est exécuté par du matériel Voiture intelligente ... Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 41 Les ordinateurs actuels Ordinateurs personnels Carrier, Devismes (Grenoble I) Introduction Notion de modèle Modèle de Von Neumann La mémoire (centrale) Les entrées /sorties 9 janvier 2015 Le processeur 43 Les ordinateurs actuels Supercalculateurs Classement (novembre 2011) Multi-coeurs (voir Multi-processeurs) Puissance : plusieurs gigahertz 1 K computer (Fujitsu, RIKEN, Japon) 2 Tianhe-IA (NUDT, Tianjin, Chine) 3 Jaguar (CRAY, USA) Mémoire centrale : plusieurs Gigaoctets Caractéristiques du K computer : Disque dur : plusieurs centaines de Gigaoctets Performance maximale : 10,51 pétaflops (10,51 ×1015 opérations à virgule flottante /seconde) Sur les PC : des pentium, AMD, ou des compatibles. 1 Péta-Octets de mémoire vive (1015 octets) Sur les Macintosh : des 68000, PowerPC, et maintenant des pentiums 88 128 processeurs (SPARC64) de 2GHz (8 cœurs chacun) Puissance : 9,89 Méga Watt Sur certaines consoles de jeux : des ARM Budget final de 1,2 milliard de dollars Sur nougat : biprocesseur type Intel(R) Xeon(R) Remarque Sur les PC du DLST : processeur Intel Pentium Carrier, Devismes (Grenoble I) Modèle de Von Neumann La tendance actuelle est de remplacer les supercalculateurs par des grappes de pc (cluster, grid-computing) 9 janvier 2015 44 Carrier, Devismes (Grenoble I) Modèle de Von Neumann 9 janvier 2015 45 Vie d’un programme Les langages Langage machine Langage d’assemblage Vie d’un programme Les langages Langage machine Langage d’assemblage Plan Langage d’assemblage, langage machine Fabienne Carrier Stéphane Devismes Université Joseph Fourier, Grenoble I 1 Vie d’un programme 2 Les langages 3 Langage machine 4 Langage d’assemblage 9 janvier 2015 Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 1 Langage d’assemblage Exemple Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 2 Langage d’assemblage Etapes de compilation monprog.c : #include "malib.h" #define max(a,b) ((a)>(b)?(a):(b)) main() { int x,y,z; x = 10; y = 15; z = max(x,y); plus (&z); } Précompilation : malib.c : void plus (int *ai) { *ai = (*ai) + 1; } arm-eabi-gcc -E monprog.c > monprog.i source : monprog.c −→ source enrichi monprog.i Compilation : arm-eabi-gcc -S monprog.i source enrichi −→ langage d’assemblage : monprog.s Assemblage : arm-eabi-gcc -c monprog.s langage d’assemblage −→ binaire translatable : monprog.o malib.h : même processus pour malib.c −→ malib.o #ifndef MALIB #define MALIB Edition de liens : arm-eabi-gcc monprog.o malib.o -o monprog /* incrementation d’un mot memoire */ extern void plus (int *); #endif Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine un ou plusieurs fichiers −→ binaire exécutable, objet : monprog 9 janvier 2015 4 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 5 Vie d’un programme Les langages Langage machine Langage d’assemblage Vie d’un programme Les langages Langage machine Langage d’assemblage Exemple : arm-eabi-gcc -E monprog.c > monprog.i (2/2) Précompilation (pre-processing) monprog.i : arm-eabi-gcc -E monprog.c > monprog.i # # # # produit monprog.i extern void plus (int *); # 3 "monprog.c" 2 suppression des commentaires. main() { int x,y,z; x = 10; y = 15; z = ((x)>(y)?(x):(y)); plus (&z); } inclusion des profils des fonctions des bibliothèques dans le fichier source. traitement des directives de compilation. remplacement des macros Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 "monprog.c" "<built-in>" "<command line>" "monprog.c" # 1 "malib.h" 1 La précompilation réalise plusieurs opérations de substitution sur le code, notamment : Carrier, Devismes (Grenoble I) 1 1 1 1 6 Langage d’assemblage Compilation Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 7 Langage d’assemblage Exemple : arl-eabi-gcc -S monprog.i monprog.s : .file "monprog.c" .text .align 2 .global main .type main, %function main: @ args = 0, pretend = 0, frame = 12 @ frame_needed = 1, uses_..._args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} sub fp, ip, #4 sub sp, sp, #12 mov r3, #10 str r3, [fp, #-16] mov r3, #15 str r3, [fp, #-20] ldr r2, [fp, #-20] ldr r3, [fp, #-16] arm-eabi-gcc -S monprog.i produit monprog.s Le code source enrichi est transformé en langage d’assemblage instructions et données. Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 8 Carrier, Devismes (Grenoble I) cmp r2, r3 movge r3, r2 str r3, [fp, #-24] sub r3, fp, #24 mov r0, r3 bl plus mov r0, r3 sub sp, fp, #12 ldmfd sp, {fp, sp, pc} .size main, .-main .ident "GCC: (GNU) 3.4.3" Langage d’assemblage, langage machine 9 janvier 2015 9 Vie d’un programme Les langages Langage machine Langage d’assemblage Assemblage Vie d’un programme Les langages Langage machine Langage d’assemblage Exemple : arm-eabi-gcc -c monprog.s monprog.o : 0000000 0000020 0000040 0000060 0000100 0000120 0000140 0000160 0000200 0000220 0000240 0000260 0000300 0000320 * 0000360 0000400 0000420 0000440 0000460 0000500 0000520 0000540 0000560 0000600 0000620 0000640 arm-eabi-gcc -c monprog.s produit monprog.o Le code en langage d’assemblage (lisible) est transformé en code machine. Le code machine se présente comme une succession de vecteurs binaires. Le code machine ne peut pas être directement édité et lu. On peut le rendre lisible en utilisant une commande od -x monprog.o. Le fichier monprog.o contient des instructions en langage machine et des données mais il n’est pas exécutable. On parle de binaire translatable. Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 10 Langage d’assemblage Edition de liens 457f 0001 00cc 0009 d00c 3014 3002 fffe 4700 0033 6261 2e6c 0073 0000 464c 0028 0000 0006 e24d e50b a1a0 ebff 4343 2e00 2e00 6574 632e 0000 0101 0001 0000 c00d 300a 2014 3018 0003 203a 7973 6873 7478 6d6f 0000 6101 0000 0000 e1a0 e3a0 e51b e50b e1a0 4728 746d 7473 2e00 656d 0000 0000 0000 0034 d800 3010 3010 3018 d00c 554e 6261 7472 6164 746e 0000 0000 0000 0000 e92d e50b e51b e24b e24b 2029 2e00 6261 6174 0000 0000 0000 0000 0000 b004 300f 0003 0003 a800 2e33 7473 2e00 2e00 0000 0000 0000 0000 0028 e24c e3a0 e152 e1a0 e89d 2e34 7472 6572 7362 0000 0000 0000 0000 0000 0009 0008 0008 0000 0000 0008 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001f 0034 0004 0000 0007 0025 0080 0001 0003 0000 0030 0080 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 004c 0000 0000 0001 0001 0000 0000 0000 0000 0001 0012 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0006 0000 001b 02dc 0004 0003 0000 002b 0080 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine Vie d’un programme Les langages Langage machine 9 janvier 2015 11 Langage d’assemblage Exemple : arm-eabi-gcc monprog.o malib.o -o monprog monprog : 0000000 0000020 0000040 0000060 0000100 0000120 0000140 * 0100000 0100020 0100040 0100060 0100100 0100120 0100140 0100160 0100200 0100220 0100240 0100260 0100300 0100320 0100340 0100360 0100400 0100420 arm-eabi-gcc monprog.o malib.o -o monprog produit monprog L’édition de liens permet de rassembler le code de différents fichiers. A l’issue de cette phase le fichier produit contient du binaire exécutable. remarque : ne pas confondre exécutable, lié à la nature du fichier, et muni du droit d’être exécuté , lié au système d’exploitation. Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 12 457f 0002 d010 0018 8000 8000 0000 464c 0028 0001 0015 0000 0000 0000 0101 0001 0002 0001 2a3c 0000 0000 6101 0000 0000 0000 0000 0000 0000 0000 8110 0034 8000 2b4c 0000 0000 0000 0000 0020 0000 0000 0000 0000 0000 0034 0001 8000 0007 0000 0000 0000 0000 0028 0000 0000 0000 0000 c00d 07fd d830 b004 3000 f002 fff6 e00f a830 aa24 a800 d800 e00f 0000 a800 aa24 c00d 0016 e1a0 eb00 e92d e24c e594 e1a0 1aff 11a0 e89d 0000 e89d e92d 11a0 e353 089d 0000 e1a0 e3a0 dff0 6ff0 5058 a830 3004 3000 3020 f003 aa3c c00d 3040 0034 f003 a800 6800 aa40 d800 10e4 e92d e91b e59f 189d e283 e594 e59f 11a0 0000 e1a0 e59f e59f 11a0 089d e89d 0000 e92d e28f b004 f00e 3000 4048 3000 2000 0000 3001 a180 d800 c00d b004 0028 301c dfc4 aa38 b004 3456 e24c e1a0 e5d5 e59f e584 e593 e353 e3a0 0000 e92d e1a0 e24c e59f e59f eaff 0000 e24c ef12 0024 c00d 0000 0004 e00f 0000 001c 3000 0000 b004 0000 1030 3000 0000 0000 0000 a800 00dc eb00 e1a0 e353 ea00 e1a0 e352 159f e5c5 0000 e24c e353 e59f e590 e353 0000 0000 e89d e59f Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 13 Vie d’un programme Les langages Langage machine Langage d’assemblage Comment exécuter un programme ? (1/3) Vie d’un programme Les langages Langage machine Langage d’assemblage Comment exécuter un programme ? (2/3) Sur un ordinateur dont le binaire est connu du processeur : Sur un ordinateur qui ne connait pas le binaire que l’on produit Ex : le fichier monprog contient du binaire Intel et je suis sur un PC dont la carte mère est équipée d’un processeur Intel. Ex : arm-eabi-gcc monprog.c produit du binaire arm qui n’est pas exécutable sur un PC Intel. je lance le programme depuis un terminal ou l’interface graphique, le système d’exploitation installe le contenu du fichier exécutable dans la mémoire centrale (transfert depuis le disque dur + chargement en mémoire), On utilise un émulateur, c’est-à-dire un programme qui mimique le comportement du système pour lequel le binaire est destiné (arm-eabi-run monprog). puis il met l’adresse de début dans le compteur programme, L’émulateur simule l’exécution du binaire dans une mémoire qui lui est propre. et enfin le processeur commence l’exécution. . . Remarque : l’emplacement de stockage du programme en mémoire est choisit par le système d’exploitation. Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 14 Langage d’assemblage Comment exécuter un programme ? (3/3) Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 15 Langage d’assemblage Caractéristiques d’un langage Sur les automatismes : ex. lecteur de carte électronique un lexique : les mots que l’on peut écrire, Quand il écrit le programme, le programmeur connait précisément l’architecture. Il peut produire directement une image du programme dans la mémoire à une adresse fixe et ranger le binaire dans une EPROM. Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 une syntaxe : l’organisation des mots qui est permise, une sémantique : le sens des phrases, c’est-à-dire des successions de mots. 16 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 18 Vie d’un programme Les langages Langage machine Langage d’assemblage Classification Langage d’assemblage Langage d’assemblage (assembleur) : comme le langage machine mais sous une forme lisible par un humain : les combinaisons de bits du langage machine sont représentées par des symboles dits mnémoniques . Remarque : Il est la plupart du temps utilisé comme intermédiaire (lors de la compilation) entre un langage de haut-niveau et le langage machine. Langage de bas-niveau : le programmeur est obligé de prendre en compte des concepts proches du fonctionnement de la machine (adresse de l’instruction courante, place des valeurs en mémoire, . . . ). Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 19 Langage d’assemblage Lexicographie Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 20 Langage d’assemblage Syntaxe Lexique : liste des mots du langage, la façon dont ils s’écrivent (leur codage) Syntaxe : Règles définissant la manière d’écrire et de placer les mots. Quels sont les groupements valides d’instructions (pour constituer des programmes) ? Pour le langage machine, les mots sont des suites de 0 et de 1 qui représentent des instructions ou des données. Les suites de 0 et de 1 sont organisées par champs pour former les instructions. En général, très souple : Il existe plusieurs façon de coder la même chose. Exemple : l’instruction 3684210 dit qu’il faut ajouter le nombre actuellement dans le registre 17 avec celui qui est dans le registre AB et ranger le résultat en mémoire à l’adresse 27. Les informations 17, AB, 27 seront codées dans des champs différents du vecteur de bits représentant l’instruction. Carrier, Devismes (Grenoble I) Langage machine Langage machine : suite de bits, interprétée par le processeur de l’ordinateur lors de l’exécution d’un programme. Remarque : Aujourd’hui, on ne programme plus directement en binaire mais c’était le cas pour les premiers ordinateurs ! le programmeur peut s’abstraire des détails de fonctionnement de la machine, il peut manipuler des concepts élaborés (objet, structure. . .). Exemples : Java, Python, ADA, LISP. . . Vie d’un programme Les langages Langages bas-niveaux Langage de haut-niveau : Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine 9 janvier 2015 remarque : si une donnée se retrouve, suite à une erreur, repérée par le compteur programme, alors le processeur essaie de l’exécuter. 21 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 22 Vie d’un programme Les langages Langage machine Langage d’assemblage Sémantique (signification) Vie d’un programme Les langages Langage machine Langage d’assemblage Un langage machine par processeur Pour tout processeur il existe un langage machine caractéristique (langage natif). Même s’il existe une compatibilité entre processeurs de la même famille. Quel est le sens du programme ? Un programme est une suite (ou séquence, liste) de vecteurs de bits qui représentent des instructions. Remarques : Si il y a 237 instructions dans le langage machine d’un certain processeur, elles peuvent être codées par un vecteur binaire de 8 bits (27 = 128 ; 28 = 256) et donc il y a 19 vecteurs invalides. Que doit alors faire le processeur ? Il y a un ordre. Les instructions sont exécutées dans l’ordre où elles sont écrites. On verra qu’il peut y avoir des ruptures de séquence. Une instruction est une chaı̂ne de bits, une donnée aussi . . . Lorsque l’on considère une chaı̂ne de bits, on ne sait pas s’il s’agit d’une instruction ou d’une donnée. le code n’est pas dans l’information codée. Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 23 Langage d’assemblage Instructions en langage machine Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 24 Langage d’assemblage Instruction de calcul entre des informations mémorisées L’instruction désigne la(les) source(s) et le destinataire. Les sources sont des cases mémoires, registres ou des valeurs. Le destinataire est un élément de mémorisation. L’instruction code : destinataire, source1, source2 et l’opération. 2 types d’instructions : désignation du destinataire mém, reg Instructions de calcul (ou de déplacement d’information) entre des informations mémorisées. ← désignation de source1 mém, reg oper désignation de source2 mém, reg, valIMM Instructions de rupture de séquence mém signifie que l’instruction fait référence à un mot dans la mémoire reg signifie que l’instruction fait référence à un registre (nom ou numéro) valIMM signifie que l’information source est contenue dans l’instruction Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 26 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 27 Vie d’un programme Les langages Langage machine Langage d’assemblage Exemples Langage machine Langage d’assemblage Fonctionnement standard : Une instruction est écrite à l’adresse X ; l’instruction suivante (dans le temps) est l’instruction écrite à l’adresse X+1. C’est implicite pour toutes les instructions de calcul. registre4 ← le mot mémoire d’adresse 36000 + le registre A reg5 ← reg5 - 1 le mot mémoire d’adresse 564 ← registre7 Rupture de séquence : Une instruction de rupture de séquence peut désigner la prochaine instruction à exécuter (à une autre adresse). Convention de noms move, load, store Vie d’un programme Les langages Instruction de rupture de séquence reg12 ← reg14 + reg1 Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 28 Langage d’assemblage Exemples Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 29 Langage d’assemblage Utilisation des instructions de rupture de séquence Branch 125 : l’instruction suivante est désignée par une adresse fixe . Les ruptures de séquence permettent de modifier le déroulement séquentiel de l’exécution des instructions. Branch -40 : l’instruction suivante est une adresse calculée. Branch SiZero +10 : si le résultat du calcul précédent est Les ruptures de séquence servent à coder des choix ou des boucles. ZERO, alors la prochaine instruction à exécuter est celle d’adresse adresse courante+10 , sinon la prochaine instruction à exécuter est la suivante dans l’ordre d’écriture, c’est-à-dire à l’adresse adresse courante +1. Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 Remarques : si l’instruction suivante d’une instruction est elle-même alors le processeur part en boucle infinie . 30 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 31 Vie d’un programme Les langages Langage machine Langage d’assemblage Caractéristiques et Avantages Vie d’un programme Les langages Langage machine Langage d’assemblage Langage textuel, notation des instructions Caractéristiques : Langage textuel (au lieu de binaire) mais correspondance : une instruction en assembleur ↔ une instruction en langage machine. Une instruction = Séparation données/instructions. mot conventionnel = mnémonique Pas nécessaire de manipuler les adresses réelles, on ne connait pas les adresses des données, du programme ! désignation des instructions ou données manipulées. A chaque notation est associée une convention d’interprétation. Avantages : Lisibilité du code Niveau de langage plus facile à manipuler Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 33 Langage d’assemblage Exemples Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 34 Langage d’assemblage Désignation des objets (1/7) En ARM : add r4, r5, r6 signifie r4 ← r5 + r6. r5 désigne le contenu du registre, on parle bien sûr du contenu des registres, on n’ajoute pas des ressources physiques ! On parle parfois, improprement, de modes d’adressage. Il s’agit de dire comment on écrit, par exemple, la valeur contenue dans le registre numéro 5, la valeur -8, la valeur rangée dans la mémoire à l’adresse 0xff, . . . En SPARC : add g4, g5, g6 signifie g6 ← g4 + g5. En 6800 : Il n’y a pas de standard de notations, mais des standards de signification d’un constructeur à l’autre. addA 5000 signifie regA ← regA + Mem[5000] addA ]50 signifie regA ← regA + 50 add r3, r3, [5000] signifie reg3 ← reg3 + Mem[5000] L’objet désigné peut être une instruction ou une donnée. remarque : pas de règle générale, interprétations différentes selon les fabricants, quelques habitudes cependant concernant les mnémoniques (add, sub, load, store, jump, branch, clear, inc, dec) ou la notation des opérandes (#, [xxx]) Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 35 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 36 Vie d’un programme Les langages Langage machine Langage d’assemblage Désignation des objets (2/7) : par registre Vie d’un programme Les langages Langage machine Langage d’assemblage Désignation des objets (3/7) : immédiate Désignation registre/registre. Désignation registre/valeur immédiate. L’objet désigné (une donnée) est le contenu d’un registre. L’instruction contient le nom ou le numéro du registre. La donnée dont on parle est littéralement écrite dans l’instruction En ARM : mov r4 , #5 ; signifie r4 ← 5. En 6502 : 2 registres A et X (entre autres) TAX signifie transfert de A dans X X ← contenu de A (on écrira X ← A). Remarque : la valeur immédiate qui peut être codée dépend de la place disponible dans le codage de l’instruction. ARM : mov r4 , r5 signifie r4 ← r5. Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 37 Langage d’assemblage Désignation des objets (4/7) : directe ou absolue Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages 9 janvier 2015 Langage machine 38 Langage d’assemblage Désignation des objets (5/7) : indirect par registre Désignations registre/directe ou absolue. Désignation registre/indirect par registre On donne dans l’instruction l’adresse de l’objet désigné. L’objet désigné peut être une instruction ou une donnée. L’objet désigné est dans une case mémoire dont l’adresse est dans un registre précisé dans l’instruction. En 68000 : move.l D3, $FF9002 signifie Mem[FF9002] ← D3. la deuxième opérande (ici une donnée) est désigné par son adresse en mémoire. add r3, [r5] signifie r3 ← r3 + (le mot mémoire dont l’adresse est contenue dans le registre 5) On note r3 ← r3 + mem[r5]. En SPARC : jump 0x2000 signifie l’instruction suivante (qui est l’instruction que l’on veut désigner) est celle d’adresse 0x2000. Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 39 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 40 Vie d’un programme Les langages Langage machine Langage d’assemblage Désignation des objets (6/7) : indirect par registre et déplacement Vie d’un programme Les langages Langage machine Langage d’assemblage Désignation des objets (7/7) : relatif au compteur programme Désignation registre/indirect par registre et déplacement L’adresse de l’objet désigné est obtenue en ajoutant le contenu d’un registre précisé dans l’instruction et d’une valeur (ou d’un autre registre) précisé aussi dans l’instruction. Désignation relative au compteur programme L’adresse de l’objet désigné (en général une instruction) est obtenue en ajoutant le contenu du compteur de programme et une valeur précisée aussi dans l’instruction. add r3, [r5, #4] signifie r3 ← r3 + mem[r5 + 4]. La notation [r5 + #4] désigne le mot mémoire (une donnée ici) d’adresse r5 + #4. En ARM : bal 20 signifie pc ← pc + 20 En 6800 : jump [PC - 12] = le registre est PC, le déplacement -12. L’instruction suivante (qui est l’instruction que l’on veut désigner) est celle à l’adresse obtenue en calculant, au moment de l’exécution, PC - 12. Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 41 Langage d’assemblage Séparation données/instructions Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 42 Langage d’assemblage Exemple (1/2) Dans l’exemple suivant on utilise la directive org. On suppose que les instructions sont toutes codées sur 4 octets : Le texte du programme est organisé en zones (ou segments) : zone TEXT : code, programme, instructions zone TEXT, org 0x2000 move r4, #5004 load r5, [r4] jump 0x2000 ....... zone DATA, org 0x5000 entier sur 4 octets : 0x56F3A5E2 entier sur 4 octets : 0xAAF43210 .... zone DATA : données initialisées zone BSS : données non initialisées, réservation de place en mémoire On peut préciser où chaque zone doit être placée en mémoire : la directive ORG permet de donner l’adresse de début de la zone (ne fonctionne pas toujours !). Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 43 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 44 Vie d’un programme Les langages Langage machine Langage d’assemblage Exemple (2/2) Vie d’un programme Les langages Langage machine Langage d’assemblage Etiquettes (1/4) : définition Quelle est la représentation en mémoire du programme ? 2000 --> 2004 --> 2008 --> 5000 --> memoire | | | move... | load... | jump... | | | |56 f3 a5 e2 |aa f4 32 10 | | Etiquette : nom choisi librement (quelques règles lexicales quand même) qui désigne une case mémoire. Cette case peut contenir une donnée ou une instruction. | | | | | | | | | | | | Une étiquette correspond à une adresse. Pourquoi ? L’emplacement des programmes et des données n’est à priori pas connu la directive ORG ne peut pas toujours être utilisée Plus facile à manipuler Quel est l’effet de ce programme ? Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 45 Langage d’assemblage Etiquettes (2/4) : exemple Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 46 Langage d’assemblage Etiquettes (3/4) : avantages zone TEXT DD: move r4, #42 load r5, [YY] jump DD Le programmeur n’a pas besoin de connaitre les adresses réelles pour comprendre ce que fait son programme. Le programme est plus facile à lire, à écrire. zone DATA XX: entier sur 4 octets : 0x56F3A5E2 YY: entier sur 4 octets : 0xAAF43210 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 47 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 48 Vie d’un programme Les langages Langage machine Langage d’assemblage Etiquettes (4/4) : correspondance étiquette/adresse Les langages Langage machine Langage d’assemblage Statiquement, dans un fichier si l’adresse de début de chaque zone est connue de l’outil d’assemblage (ou d’édition de liens) → de plus en plus rare contenu de Mem[2000], ... move r4, #42 load r5, [5004] jump 2000 Langage d’assemblage, langage machine Vie d’un programme Langage machine Correspondance étiquette ↔ adresse Dynamiquement, juste avant l’exécution ; l’adresse de début est déterminée par le système, le programmeur ne la connaı̂t pas La phase de chargement consiste à installer un programme en mémoire. L’adresse de début de la zone mémoire dans laquelle est installé le programme est appelée adresse de chargement. zone DATA XX: entier sur 4 octets : 0x56F3A5E2 YY: entier sur 4 octets : 0xAAF43210 Carrier, Devismes (Grenoble I) Les langages Chargement Supposons les adresses de début des zones TEXT et DATA respectivement 2000 et 5000 Il faut remplacer DD par 2000 et YY par 5004. zone TEXT DD: move r4, #42 load r5, [YY] jump DD Vie d’un programme 9 janvier 2015 49 Langage d’assemblage Étiquette, application en ARM (lecture et écriture d’une variable Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 50 Langage d’assemblage Autre exemple d’application : es.s Nous considérons le schéma de programme suivant : .data .data A: B: .word 10 .word 15 .global main : main X: .byte 3 .byte 2 .hword 1 .global main : main .text ptr A : ptr B : ldr r0,ptr A ldr r1,[r0] ldr r0,ptr B str r1,[r0] bal exit .word A .word B .text @ charge le contenu de l’adresse ptr A (adresse de A) dans r0 @ charge le contenu de l’adresse A (10) dans r1 @ charge le contenu de l’adresse ptr B (adresse de B) dans r0 @ copie le contenu de r0 (10) à l’adresse B ... @ adresse de la variable A @ adresse de la variable B ptrX : Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 51 Carrier, Devismes (Grenoble I) bal exit .word X Langage d’assemblage, langage machine 9 janvier 2015 52 Vie d’un programme Les langages Langage machine Langage d’assemblage Vie d’un programme Les langages Langage machine Autre exemple d’application : es.s Autre exemple d’application : es.s Qu’est-ce qu’affiche ce programme ? Qu’est-ce qu’affiche ce programme ? ldr r0,ptrX ldr r1,[r0] bl EcrNdecimal32 Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine ldr r0,ptrX ldrh r1,[r0] bl EcrNdecimal32 9 janvier 2015 53 Langage d’assemblage Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine Autre exemple d’application : es.s Autre exemple d’application : es.s Qu’est-ce qu’affiche ce programme ? Qu’est-ce qu’affiche ce programme ? ldr r0,ptrX ldrb r1,[r0] bl EcrNdecimal32 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine Langage d’assemblage 9 janvier 2015 54 Langage d’assemblage ldr r0,ptrX ldrb r1,[r0,#1] bl EcrNdecimal32 9 janvier 2015 55 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 56 Vie d’un programme Les langages Langage machine Langage d’assemblage Autre exemple d’application : es.s Vie d’un programme Les langages Langage machine Langage d’assemblage Autre exemple d’application : es.s Qu’est-ce qu’affiche ce programme ? Qu’est-ce qu’affiche ce programme ? ldr r0,ptrX mov r1,#2 strb r1,[r0] ldr r1,[r0] bl EcrNdecimal32 ldr r0,ptrX ldrb r1,[r0,#2] bl EcrNdecimal32 Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine 9 janvier 2015 57 Langage d’assemblage Carrier, Devismes (Grenoble I) Vie d’un programme Langage d’assemblage, langage machine Les langages Langage machine Autre exemple d’application : es.s Autre exemple d’application : es.s Qu’est-ce qu’affiche ce programme ? Qu’est-ce qu’affiche ce programme ? ldr r0,ptrX mov r1,#2 strh r1,[r0] ldr r1,[r0] bl EcrNdecimal32 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 58 Langage d’assemblage ldr r0,ptrX mov r1,#2 str r1,[r0] ldr r1,[r0] bl EcrNdecimal32 9 janvier 2015 59 Carrier, Devismes (Grenoble I) Langage d’assemblage, langage machine 9 janvier 2015 60 Vie d’un programme Les langages Langage machine Langage d’assemblage Autre exemple d’application : es.s Vie d’un programme Les langages En supposant que l’on donne 1 en entrée, qu’est-ce qu’affiche ce programme ? ldr r1,ptrX bl LireCar ldrb r2,[r1] mov r1,r2 bl EcrNdecimal8 ldr r1,ptrX bl Lire8 ldrb r2,[r1] mov r1,r2 bl EcrNdecimal8 Langage d’assemblage, langage machine Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Langage d’assemblage Autre exemple d’application : es.s En supposant que l’on donne 1 en entrée, qu’est-ce qu’affiche ce programme ? Carrier, Devismes (Grenoble I) Langage machine Conditions complexes 9 janvier 2015 Codage du choix 61 Exercice Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Langage d’assemblage, langage machine Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 62 Exercice Plan 1 Fonc. séquentiel/Rupture de séquence 2 Inst. conditionnelles 3 Itérations 4 Conditions complexes 5 Codage du choix 6 Exercice Programmation des structures de contrôles Fabienne Carrier Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 1 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 2 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Exécution séquentielle vs. rupture de séquence : rôle du PC Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Différents types de séquencement registre PC : Compteur de programme, repère l’instruction à exécuter initialisation ou lancement d’un programme A chaque cycle : séquencement normal 1 bus d’adresse ← PC ; bus de contrôle ← lecture 2 bus de donnée ← Mem[PC] = instruction courante 3 Décodage et exécution 4 Mise à jour de PC (par défaut, incrémentation) rupture de séquence inconditionnelle rupture de séquence conditionnelle appels et retours de procédure/fonction interruptions exécution parallèle Les instructions sont exécutées séquentiellement sauf ruptures de séquence ! Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 4 Exercice Séquencement (1/7) Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 5 Exercice Séquencement (2/7) Séquencement normal Après chaque instruction le registre PC est incrémenté. Initialisation ou lancement d’un programme Initialisation (boot) Si l’instruction est codée sur k octets : PC ← PC + k PC forcé à une valeur pré-établie (0) Cela dépend des processeurs, des instructions et de la taille des mots. Lancement d’un programme (chargement) PC forcé à l’adresse de début de programme En ARM, toutes les instructions sont codées sur 4 octets. Les adresses sont des adresses d’octets. PC progresse de 4 en 4 Sur certaines machines (ex. Intel), les instructions sont de longueur variable (1, 2, ou 3 octets). PC donne successivement les adresses des différents octets de l’instruction Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 6 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 7 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Séquencement (3/7) Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Séquencement (4/7) Rupture conditionnelle Si une condition est vérifiée, alors PC est modifié sinon PC est incrémenté normalement. Rupture inconditionnelle Une instruction de branchement inconditionnel force une adresse adr dans PC. la condition est interne au processeur : expression booléenne portant sur les codes de conditions arithmétiques La prochaine instruction exécutée est celle située en Mem[adr ] Cas TRES particulier : les premiers RISC (Sparc, MIPS) exécutaient quand même l’instruction qui suit le branchement. Z : nullité, N : bit de signe, C : débordement (naturel) et V : débordement (relatif). Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 8 Exercice Séquencement (5/7) Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 9 Exercice Séquencement (6/7) Interruption Appels ou retours de procédures/fonctions Mécanisme essentiel permettant entre autres de gérer les périphériques . . . Il y aura un chapitre dédié au codage des procédures et fonctions Si un certain signal physique externe est actif, PC prend une valeur lue en mémoire à une adresse conventionnelle. Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 10 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 11 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Séquencement (7/7) Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Désignation de l’instruction suivante Désignation directe : l’adresse de l’instruction suivante est donnée dans l’instruction. Exécution parallèle Désignation relative : l’adresse de l’instruction suivante est obtenue en ajoutant un certain déplacement (peut être signé) au compteur programme. Par ex. une machine superscalaire exécute plusieurs instructions en même temps Remarques : D’autres types de séquences seront étudiés en cours d’architecture avancée le mode de désignation en ARM est uniquement relatif. en général, le déplacement est ajouté à l’adresse de l’instruction qui suit la rupture. C’est-à-dire, PC + 4+ déplacement. En ARM, PC + 8+ déplacement. Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations 9 janvier 2015 Conditions complexes Codage du choix 12 Exercice Exemple : Assembleur type ARM Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 13 Exercice Utilisation typique des sauts ou branchements Rappel : instructions codées sur 4 octets etiquette e1 : e2 : adresse correspondant a l’etiquette 0x1028 0x102C 0x1030 0x1034 0x1038 0x103C 0x1040 0x1044 Carrier, Devismes (Grenoble I) instruction assembleur CLR Reg6 BRANCH si cond e2 xxx xxx xxx yyy xxx xxx Rupture de séquence et structures de contrôle Programmation systématique en language d’assemblage de 3 types de constructions algorithmiques : codage effectif de l’instruction 0x******** Structures de contrôle de la programmation classique : si . . . alors . . . sinon . . . , tant que . . . faire . . . xxx xxx xxx 0x******** xxx xxx 9 janvier 2015 Automates avec actions (ou machines séquentielles avec actions) Procédures et fonctions 14 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 15 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage des structures de contrôle : notations Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage des structures de contrôle : exemples traités I1; si ExpCondSimple alors {I2; I3; I4;} I5; I1; si ExpCondSimple alors {I2; I3;} sinon {I4; I5; I6;} I7; On dispose de sauts et de sauts conditionnels notés : I1; tantque ExpCond faire {I2; I3;} I4; branch etiquette et I1; répéter {I2; I3;} jusqu’à ExpCond; I4; branch si cond etiquette. I1; pour (i←0 à N) {I2; I3; I4;} I5; cond est une expression booléenne portant sur Z , N, C, V Toute autre instruction (affectation, addition, . . . ) est notée Ik si C1 ou C2 ou C3 alors {I1;I2;} sinon {I3;} si C1 et C2 et C3 alors {I1;I2;} sinon {I3;} selon a,b a<b : I1; a=b : I2; a>b : I3; Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 16 Exercice Instruction Si simple Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 17 Exercice Une première solution I1; si A=B alors {I2; I3; I4;} I5; I1 calcul de A-B + positionnement de ZNCV branch si (egal a 0) a etiq_alors branch a etiq_suite etiq_alors: I2 I3 I4 etiq_suite: I5 I1; si A=B alors {I2; I3; I4;} I5; A et B deux entiers dont les valeurs sont rangées respectivement dans les registres R1 et R2. Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 19 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 20 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage en ARM Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Une autre solution x←0;A←5;B←6; si A=B alors {x←1;} x←x+1; I1; si A=B alors {I2; I3; I4;} I5; A et B dans r0, r2, x dans r1 I1 calcul de A-B + positionnement de ZNCV branch si (non egal a 0) a etiq_suite I2 I3 I4 etiq_suite: I5 Remarque : égal à 0 équivalent à Z Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 21 Exercice Codage en ARM Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 22 Exercice Instruction Si alors sinon x←0;A←0;B←5; si A=B alors {x←1;} x←x+1; A et B dans r0, r2, x dans r1 I1; si ExpCond alors {I2; I3;} sinon {I4; I5; I6;} I7; Remarque : non égal à 0 équivalent à Z Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 23 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 24 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Une solution Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage en ARM I1; si ExpCond alors {I2; I3;} sinon {I4; I5; I6;} I7; A←5;B←6; si A=B alors {x←1;} sinon {x←0;} I1 evaluer ExpCond + ZNCV branch si faux a etiq_sinon I2 I3 branch etiq_finsi etiq_sinon: I4 I5 I6 etiq_finsi: I7 Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes A et B dans r0, r2, x dans r1 9 janvier 2015 Codage du choix 25 Exercice Une autre solution Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 26 Exercice Codage en ARM I1; si ExpCond alors {I2; I3;} sinon {I4; I5; I6;} I7; I1 evaluer ExpCond + ZNCV branch si vrai a etiq_alors I4 I5 I6 branch etiq_finsi etiq_alors: I2 I3 etiq_finsi: I7 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle A←5;B←6; si A=B alors {x←1;} sinon {x←0;} A et B dans r0, r2, x dans r1 9 janvier 2015 27 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 28 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Instruction Tant que Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Une première solution I1; tant que ExpCond faire {I2; I3;} I4; I1 debut: evaluer ExpCond + ZNCV branch si faux fintq I2 I3 branch debut fintq: I4 I1; tant que ExpCond faire {I2; I3;} I4; Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 30 Exercice Codage en ARM Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 31 Exercice Une autre solution I1; tant que ExpCond faire {I2; I3;} I4; a←0; b←5; tant que a<b faire {x←a; a←a+1;} x←b; a, b dans r0, r2, x dans r1 Carrier, Devismes (Grenoble I) Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle I1 branch etiqcond debutbcle: I2 I3 etiqcond: evaluer ExpCond branch si vrai debutbcle fintq: I4 9 janvier 2015 32 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 33 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage en ARM Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Instruction Répéter a←0; b←5; tant que a<b faire {x←a; a←a+1;} x←b; a, b dans r0, r2, x dans r1 I1; répéter {I2; I3;} jusqu’à ExpCond; I4; Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 34 Exercice Solution Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 35 Exercice Codage en ARM I1; répéter {I2; I3;} jusqu’à ExpCond; I4; I1 debutbcle: I2 I3 evaluer ExpCond branch si faux debutbcle I4 a←0;b←5; répéter {a←a+1;} jusqu’à a>b; x←b; a, b dans r0, r2, x dans r1 Observer les différences entre ce codage et la solution du tantque avec test à la fin. Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 36 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 37 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Instruction Pour Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Solution I1; pour (i←0 à N) {I2; I3;I4;} I5; I1 i<-0 tantque i<N I2 I3 I4 i<-i+1 I5 I1; pour (i←0 à N) {I2; I3;I4;} I5; Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 38 Exercice Codage en ARM Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 39 Exercice Exemple : gestion de tableaux (1/2) Déclaration d’un tableau de 8 entiers b←2;a←0; pour (i←0 à 3) {a←b; b←2*b;} a←b; i dans r0, 3 dans r3, a, b dans r1, r2 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 40 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 41 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Exemple : gestion de tableaux (2/2) Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Exercice Deux boucles imbriquées pour (i=0 a N) pour (j=0 a K) I2;I3 Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 42 Exercice Exercice Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 43 Exercice Codage en ARM x ← 0; pour i←0 à 24 pour j←0 à 9 { x ← x+1; } i, j dans r0, r4, 24 dans r2, 9 dans r3, x dans r1 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 44 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 45 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Expression conditionnelle complexe avec des ou Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Solution I si C1 ou C2 ou C3 alors I1;I2 sinon I3 evaluer C1 branch si vrai etiq_alors evaluer C2 branch si vrai etiq_alors evaluer C3 branch si faux etiq_sinon etiq_alors: I1 I2 branch etiq_fin etiq_sinon: I3 etiq_fin: si C1 ou C2 ou C3 alors I1;I2 sinon I3 Solution avec évaluation minimale des conditions oualors en algorithmique. Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 47 Exercice Codage en ARM Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 48 Exercice Solution II si C1 ou C2 ou C3 alors I1;I2 sinon I3 si r0=r1 ou r0=r2 ou r1=r2 alors r1←1; sinon r1←2; Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 evaluer C1 branch si vrai etiq_alors evaluer C2 branch si vrai etiq_alors evaluer C3 branch si vrai etiq_alors etiq_sinon: I3 branch etiq_fin etiq_alors: I1 I2 etiq_fin: 49 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 50 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage en ARM Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Expression conditionnelle complexe avec des ou si r0=r1 ou r0=r2 ou r1=r2 alors r1←1; sinon r1←2; si C1 ou C2 ou C3 alors I1;I2 sinon I3 Solution avec évaluation complète des conditions Evaluer chaque Ci dans un registre Utiliser l’instruction ORR du processeur. Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 51 Exercice Expression conditionnelle complexe avec des et Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 52 Exercice Solution si C1 et C2 et C3 alors I1;I2 sinon I3 evaluer C1 branch si faux etiq_sinon evaluer C2 branch si faux etiq_sinon evaluer C3 branch si faux etiq_sinon etiq_alors: I1 I2 branch etiq_fin etiq_sinon: I3 etiq_fin: si C1 et C2 et C3 alors I1;I2 sinon I3 Solution avec évaluation minimale des conditions etpuis en algorithmique. Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 53 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 54 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Codage en ARM Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Construction selon selon a<b a=b a>b si r0=r1 et r1=r2 et r2=r3 alors r1←1; sinon r1←0; a,b: : I1 : I2 : I3 Une solution consiste à traduire en si alors sinon. si a<b alors I1 sinon si a=b alors I2 sinon si a>b alors I3 Mais ARM offre une autre possibilité. . . Carrier, Devismes (Grenoble I) Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations 9 janvier 2015 Conditions complexes Codage du choix 55 Exercice Solution Fonc. séquentiel/Rupture de séquence Rupture de séquence et structures de contrôle Inst. conditionnelles Itérations Conditions complexes 9 janvier 2015 Codage du choix 57 Exercice Enoncé : nombre de 1 Instructions ARM conditionnelle. Dans le codage d’une instruction, champ condition (bits 31 à 28). Sémantique d’une instruction : si la condition est vraie exécuter l’instruction sinon passer à l’instruction suivante. selon a<b a=b a>b Carrier, Devismes (Grenoble I) a,b: : x<-x+5 : x<-x+1 : x<-x+9 a dans R0, b dans cmp R0,R1 addlt R2, R2, addeq R2, R2, addgt R2, R2, Traduisez l’algorithme suivant en ARM : x, nb : entiers >= 0 nb<-0 tantque x<>0 faire si x mod 2 <> 0 alors nb<-nb+1 x<-x div 2 fin tantque R1, x dans R2 #5 #1 #9 afficher nb Que se passe-t-il si on remplace le addeq par un addeqs ? Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 58 Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle 9 janvier 2015 60 Fonc. séquentiel/Rupture de séquence Inst. conditionnelles Itérations Conditions complexes Codage du choix Exercice Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Solution .data .word 7 .text .global main X: Programmation à partir d’automates reconnaisseurs main: Fabienne Carrier Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 ptrX: bal exit .word X Carrier, Devismes (Grenoble I) Rupture de séquence et structures de contrôle Automate avec actions à nombre fini d’états Exemple 9 janvier 2015 61 Mise en œuvre logicielle Plan Carrier, Devismes (Grenoble I) Automates Automate avec actions à nombre fini d’états Exemple 9 janvier 2015 1 Mise en œuvre logicielle Définition Un automate avec actions à nombre fini d’états est un 6-uplet hE , S , s0 , O , f , g i : 1 Automate avec actions à nombre fini d’états 2 Exemple 3 1 E, ensemble fini non-vide : vocabulaire d’entrée, les éléments sont les symboles d’entrées. Les entrées peuvent aussi être des conditions portant sur les valeurs de variables. 2 S, ensemble fini non-vide : les états. 3 s0 ∈ S : l’état initial. 4 O, ensemble fini non-vide : vocabulaire de sortie. Les éléments sont des actions sur les variables considérées. 5 f , fonction de transition : f : E × S → S. 6 g, fonction de sortie : g : S → O. Mise en œuvre logicielle Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 2 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 4 Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Transitions Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Pourquoi utiliser le modèle des automates ? On parle aussi de : Si f (ei , sj ) = sk on dit que l’état sk est le successeur, ou état suivant de sj pour l’entrée ei . machines séquentielles On peut aussi parler d’une relation R (au lieu de la fonction f ) comportant, notamment, le triplet (ei , sj , sk ). Cela revient au même si l’on précise des conditions sur les triplets permis. et en anglais : Finite State Machine automate d’état fini étendu Intérêt du modèle : Décrire le fonctionnement d’un système séquentiel Simuler le fonctionnement d’un système séquentiel Quand le vocabulaire d’entrée comporte des conditions booléennes portant sur les variables, le changement d’état peut avoir lieu seulement si la condition est vraie. Carrier, Devismes (Grenoble I) Automate avec actions à nombre fini d’états Automates Exemple 9 janvier 2015 Faire des preuves (équivalence, état atteignable) avant de passer à une réalisation logicielle ou matérielle. 5 Mise en œuvre logicielle Actions associées aux états ou aux transitions Carrier, Devismes (Grenoble I) Automate avec actions à nombre fini d’états Automates Exemple 9 janvier 2015 6 Mise en œuvre logicielle Utilisation des automates dans ce cours Actions associées aux états (automate de Moore) fonction de sortie : S → O. A chaque état correspond une ou plusieurs actions. Quand l’automate est dans cet état, les actions sont exécutées. Simultanément ou dans l’ordre, il faut le préciser ! Dans ce cours : Montrer une programmation systématique avec organisation d’un programme en mémoire. Différence par rapport aux automates étendus vus au premier semestre dans le cours de Langage et Automates. Les actions étaient associées aux transitions. Pour décrire le fonctionnement d’un processeur, on utilisera le modèle d’automate avec actions. Actions associées aux transitions (automate de Mealy) fonction de sortie : E × S → O. Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 7 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 8 Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Exemple (1/2) Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Exemple (2/2) On considère des nombres à virgule, écrits en binaire, avec les caractères {0, 1, •, t}. Des nombres et leurs valeurs : nombre L’ensemble des caractères possibles est donc {0, 1, •, t} • est la virgule, t est l’espace final. valeur t 011t •1001t 101•01t 101100•01t On se limite à des nombres avec au plus 4 chiffres avant la virgule et 4 après. Pour simplifier on supposera (dans un premier temps) qu’il n’y a pas d’erreurs. Carrier, Devismes (Grenoble I) Automate avec actions à nombre fini d’états Automates Exemple 9 janvier 2015 10 Mise en œuvre logicielle Evaluation des nombres à virgule Carrier, Devismes (Grenoble I) Automates Automate avec actions à nombre fini d’états Exemple 9 janvier 2015 Modélisation On définit les variables suivantes : L’algorithme permettant : E est la valeur de la partie entière naturelle du nombre représenté. la reconnaissance d’un nombre D est la valeur de la partie naturelle après la virgule du nombre représenté. le calcul des valeurs E, D et N est exprimé sous forme d’un automate avec actions. Etats = {Ini , E0, E1, Poi , D1, D0, Fin}. L’automate atteint les états : N est le nombre de chiffres après la virgule du nombre représenté. Exemple : 0110•1010t représente E0 et E1 après avoir reconnu respectivement un 0 ou un 1 situé avant le • Erreurs : Poi après avoir reconnu le • On pourrait détecter des erreurs : D0 et D1 après avoir reconnu respectivement un 0 ou un 1 situé après le • si E > 15 (il y aurait plus de 4 chiffres avant la virgule), ou Des actions sont attachées aux états pour réaliser les calculs. si N > 4. Carrier, Devismes (Grenoble I) 11 Mise en œuvre logicielle Automates 9 janvier 2015 12 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 13 Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Modélisation : Graphe étiqueté état de d épart 1 1 Poi 0 . 1 D0 0 ’’ D1 0 1 E1 . 1 ’’ E0 ’’ 1 (erreur) Etat Ini E0 E1 Poi D0 D1 Fin ’’ F IGURE: Automate évaluateur Automates Automate avec actions à nombre fini d’états 9 janvier 2015 Exemple 14 Mise en œuvre logicielle Exemple 0 E0 E0 E0 D0 D0 D0 Fin 1 E1 E1 E1 D1 D1 D1 Fin • t Poi Poi Poi Fin Fin Fin Fin Fin Fin Fin Carrier, Devismes (Grenoble I) Automate avec actions à nombre fini d’états action E ← 0, D ← 0, N ← 0 E ← 2×E E ← 2×E +1 rien D ← 2×D ; N ← N +1 D ← 2×D+1; N ← N +1 rendre la main Automates 9 janvier 2015 Exemple 15 Mise en œuvre logicielle En langage haut-niveau Etat <- Ini While (Etat <> Fin (et non Erreur s’il y a lieu)) do switch Etat case Ini: E<-0; D<-0; N<-0 READ entree switch entree case ’0’: Etat<-E0 case ’1’: Etat<-E1 case ’.’: Etat<-Poi case ’ ’: Etat<-Fin (case default: Etat<-Erreur) end switch case E0: ... ... end switch done Message de fin : Evaluation correct (ou incorrect s’il y a lieu) Supposons que les symboles en entrée sont 101.110t. Etat Ini E1 E0 E1 Poi D1 D1 D0 Fin Mise en œuvre logicielle ’’ Fin Carrier, Devismes (Grenoble I) symbole Ini E0 E1 Poi D0 D1 Fin 0 . 0 Exemple Table de transitions Ini 0 Automate avec actions à nombre fini d’états E 0 2×0+1 = 1 2×1 = 2 2×2+1 = 5 5 5 5 5 5 Carrier, Devismes (Grenoble I) D 0 0 0 0 0 2×0+1 = 1 2×1+1 = 3 2×3 = 6 6 Automates N 0 0 0 0 0 0+1 = 1 1+1 = 2 2+1 = 3 3 symbole lu 1 0 1 . 1 1 0 t 9 janvier 2015 16 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 18 Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle En langage d’assemblage Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Contexte de mise en oeuvre : (1/4) adresse 1000 : (etat Ini) mettre 0 dans la case memoire representant la variable E mettre 0 dans la case memoire representant la variable N mettre 0 dans la case memoire representant la variable D lire entree comparer entree, symbole ’0’ branch 3000 (etat E0) si egal ... comparer entree, symbole ’ ’ branch 8000 (etat Fin) si egal ... adresse 3000 : (etat E0) lire la case memoire representant la variable E multiplier son contenu par 2 ecrire le resultat dans la case memoire representant la variable E lire entree comparer entree, symbole ’0’ branch 3000 (etat E0) si egal ... comparer entree, symbole ’ ’ branch 8000 (etat Fin) si egal ... adresse 8000 : (etat Fin) afficher sortie rendre la main... Carrier, Devismes (Grenoble I) Automate avec actions à nombre fini d’états Automates On travaille avec un processeur relié à de la mémoire. Les adresses mémoires sont des mots de 16 bits. La mémoire est organisée en octets. Le processeur a 1 registre accumulateur Acc de taille 8 bits. Il y a un registre d’état qui comporte un bit : Z. La comparaison de l’accumulateur avec une valeur immédiate positionne le bit du mot d’état. Le compteur de programme (pc) repère l’instruction qui suit celle qui est en cours d’exécution. 9 janvier 2015 Exemple 19 Mise en œuvre logicielle Contexte de mise en oeuvre : (2/4) Carrier, Devismes (Grenoble I) Automates Automate avec actions à nombre fini d’états 9 janvier 2015 Exemple 20 Mise en œuvre logicielle Contexte de mise en oeuvre : (3/4) Opérations sur l’accumulateur : MEM 1 octet load# charger l’accumulateur avec une valeur immédiate 0x0100 PROCESSEUR load charger l’accumulateur avec un mot de la mémoire PC add# une valeur immédiate à l’accumulateur lsl décaler le contenu de l’accumulateur d’1 position binaire à gauche peut être adresse mémoire − incrémenté de 1 − incrémenté d’une valeur MA codée sur 8 bits − forcé à une adresse registre instruction 0x0900 0x8000 0x8001 0x8002 registre d’etat store ranger le contenu de l’accumulateur dans la mémoire ACC Deux types d’instructions de rupture de séquence : peut être : − incrémenté − décalé − remis à zéro − comparé à un mot de 8 bits Z donnée mémoire interface 8 branchement inconditionnel : jmp branchement absolu, opérande = adresse sur 16 bits Automates 0xc000 MB branchement conditionnel : bne ou beq branchement relatif, opérande = déplacement sur 8 bits Carrier, Devismes (Grenoble I) programme 16 clavier 9 janvier 2015 21 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 22 Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Le code opération est toujours sur 1 octet (le premier), l’opérande quand elle existe est sur 1 octet (vi, depl) ou 2 octets (adr, le premier représente les poids forts de l’adresse). signification load adr load# vi store adr add# vi lsl cmp vi beq depl bne depl jmp adr Acc <-- Mem[adr] Acc <-- vi Mem[adr] <-- Acc Acc <-- Acc + vi Acc <-- Acc * 2 Acc - vi si Z=1 pc <-- pc + depl si Z=0 pc <-- pc + depl pc <-- adr codage 3 octets 2 octets 3 octets 2 octets 1 octet 2 octets 2 octets 2 octets 3 octets 0100 ... 0123 0200 ... 0223 0300 ... 0311 0400 ... ??? 0500 ... ??? 0800 ... ??? 0900 ... 0902 On range les valeurs E, D et N aux adresses 0x8000, 0x8001 et 0x8002. Le système donne la main à notre programme qui débute à l’adresse 0x0100. Automate avec actions à nombre fini d’états Automates Exemple Mise en œuvre logicielle Le code de chaque état est installé en mémoire à une adresse différente pour chaque état. Le passage d’un état à un autre est fait par une rupture de séquence. On suppose qu’on implante le code des états Ini, E0, E1, D0, D1, Poi et Fin aux adresses 100, 200, 300, 400, 500, 800 et 900. On convient que la lecture à l’adresse 0xC000 fournit un octet qui est le code ASCII du caractère courant. Carrier, Devismes (Grenoble I) Exemple Dans un langage d’assemblage particulier : schéma de solution Contexte de mise en oeuvre : (4/4) instruction Automate avec actions à nombre fini d’états 9 janvier 2015 23 Mise en œuvre logicielle etat Ini ... fin de etat Ini etat E0 fin de etat E0 etat E1 fin de etat E1 etat D0 fin de etat D0 etat D1 fin de etat D1 Poi fin de Poi Fin fin de Fin Carrier, Devismes (Grenoble I) Automate avec actions à nombre fini d’états Automates Exemple 9 janvier 2015 24 Mise en œuvre logicielle Dans un langage d’assemblage particulier : solution (Pour D0) Dans un langage d’assemblage particulier : exercice Ecrire les parties de programmes correspondants aux états : Poi, D0 et D1. Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 25 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 26 Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle Sujet de réflexion Automate avec actions à nombre fini d’états Exemple Mise en œuvre logicielle En ARM (1/3) 1 Que faudrait-il modifier si on ajoutait un état d’erreur ? Indiquer les modifications de l’automate et du programme. 2 Indiquer comment on pourrait modifier l’automate pour n’accepter que des octets avec 4 bits avant le • et 4 bits après. .data E: D: N: .word 0 .word 0 .word 0 .bss C: .word Pour la lecture d’un caractère .text .global main main : ... bal exit ptrE : ptrD : ptrN : ptrC : Carrier, Devismes (Grenoble I) Automates Automate avec actions à nombre fini d’états Exemple 9 janvier 2015 27 Mise en œuvre logicielle En ARM (2/3) .word E .word D .word N .word C Carrier, Devismes (Grenoble I) Automates Automate avec actions à nombre fini d’états Exemple 9 janvier 2015 28 Mise en œuvre logicielle En ARM (3/3) main : E0 : ini : ldr r0,ptrE ldr r1,[r0] @ lecture E mov r1,r1,lsl #1 str r1,[r0] @Ex2 @ écriture de E ldr r1,ptrC bl LireCar ldrb r0,[r1] @ adresse où écrire @ lit un caractère et l’écrit à l’adresse précédente @ récupère le caractère lu dans r0 ... E0 : ... E1 : ... Poi : @ test cmp r0,#48 beq E0 cmp r0,#49 beq E1 cmp r0,#46 beq Poi bal FIN ... D0 : ... D1 : ... @ ou #’0’ @ ou #’1’ @ ou #’.’ FIN : Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 29 Carrier, Devismes (Grenoble I) Automates 9 janvier 2015 30 Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Plan Programmation des appels de procédure et fonction Première séance Fabienne Carrier 9 janvier 2015 Introduction-Vocabulaire Fonctions et procédures Codage en ARM Introduction-Vocabulaire 2 Codage en ARM 3 Problématique de l’appel et du retour 4 Problèmes Stéphane Devismes Université Joseph Fourier, Grenoble I Carrier, Devismes (Grenoble I) 1 9 janvier 2015 Problématique de l’appel et du retour 1 Problèmes Un exemple en langage de haut niveau (1 /2) Carrier, Devismes (Grenoble I) Introduction-Vocabulaire Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 2 Problèmes Un exemple en langage de haut niveau (2 /2) Il y a deux appels à la fonction PP int PP(int x) { int z, p; z = x + 1; p = z + 2; return (p); } Le main, nommé appelant fait appel à la fonction PP, nommée appelée main() int i, i = j = j = k = } La fonction PP calcule une valeur de type entier, le résultat de la fonction La fonction PP a un paramètre qui constitue une donnée, on parle de paramètre formel { j, k; 0; i + 3; PP(i + 1); PP(2 * (i + 5)); Carrier, Devismes (Grenoble I) int PP(int x) { int z, p; z = x + 1; p = z + 2; return (p); } main() int i, i = j = j = k = } Les variables z et p sont appelées variables locales à la fonction PP Fonctions et procédures 9 janvier 2015 4 Lors de l’appel PP(i + 1), la valeur de l’expression i+1 est passée à la fonction, c’est le paramètre effectif que l’on appelle aussi argument Après l’appel le résultat de la fonction est rangé dans la variable j : j = PP(i+1) { j, k; 0; i + 3; PP(i + 1); PP(2 * (i + 5)); Carrier, Devismes (Grenoble I) Le 1er appel revient à exécuter le corps de la fonction en remplaçant x par i+1 ; le 2ème appel consiste en l’exécution du corps de la fonction en remplaçant x par 2*(i+5) Fonctions et procédures 9 janvier 2015 5 Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Utilisation de registres Introduction-Vocabulaire retourner On fait un choix (pour l’instant complètement arbitraire) : @i ←0 @ j ← i +3 @ —–Début-1er-appel—– @ x ← i +1 appeler PP @ j ← ... @ —–Fin-1er-appel—– @ —–Début-2ème-appel—– @ r7 ← i + 5 @ x ← 2 ∗ r7 appeler PP @ k ← ... @ —–Fin-2ème-appel—– main : i,j,k dans r 0,r 1,r 2 z dans r 3, p dans r 4 la valeur x dans r 5 le résultat de la fonction dans r 6 si on a besoin d’un registre pour faire des calculs on utilisera r 7 Remarque : Une fois, ces conventions fixées, on peut écrire le code de la fonction indépendemment du code correspondant à l’appel. Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 7 Problèmes Quel est le problème ? Carrier, Devismes (Grenoble I) Introduction-Vocabulaire Problème : appeler et retourner ? Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 8 Problèmes Adresse de retour Appel = branchement instruction de rupture de séquence inconditionnelle (BAL) ? Il existe une instruction de rupture de séquence particulière qui permet au processeur de garder l’adresse de l’instruction qui suit le branchement avant qu’il ne réalise le branchement i.e., avant qu’il ne transfère le contrôle. MAIS Comment revenir ensuite ? Cette adresse est appelée adresse de retour. Le problème du retour : comment à la fin de l’exécution du corps de la fonction, indiquer au processeur l’adresse à laquelle il doit se brancher ? Carrier, Devismes (Grenoble I) Problèmes @ z ← x +1 @ p ← z +2 @ rendre p PP : Dans un premier temps, utilisons des registres. Introduction-Vocabulaire Problématique de l’appel et du retour Code en langage d’assemblage Chaque valeur représentée par une variable ou un paramètre doit être rangée quelque part en mémoire : mémoire centrale ou registres. Carrier, Devismes (Grenoble I) Codage en ARM Fonctions et procédures 9 janvier 2015 10 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 11 Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Où est gardée cette adresse ? Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Rappel Dans le processeur ARM, l’instruction BL réalise un branchement inconditionnel avec sauvegarde de l’adresse de retour dans le registre nommé lr (i.e., r14). On a déjà utilisé l’instruction BL en Travaux Pratiques : MOV r 1, #12 BL EcrHexa32 BL signifie branch and link Attention : BL n’a rien à voir avec BAL Attention : il ne faut pas modifier le registre lr pendant l’exécution de la fonction. Carrier, Devismes (Grenoble I) Introduction-Vocabulaire Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 12 Problèmes Codage complet de l’exemple add r 3, r 5, #1 add r 4, r 3, #2 mov r 6, r 4 @ z ← x +1 @ p ← z +2 @ rendre p retour main : mov r 0, #0 add r 1, r 0, #3 @i ←0 @ j ← i +3 mov r 1, r 6 Introduction-Vocabulaire Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 13 Problèmes Exercice PP : @ —–Début-1er-appel—– add r 5, r 0, #1 Carrier, Devismes (Grenoble I) En supposant que la fonction PP est stockée à partir de l’adresse 0x8000 (hexadécimal) et que la fonction main est stockée immédiatement après la fonction PP. @ x ← i +1 appel @ j ← PP(x ) Donnez la valeur du registre lr à chacun des deux appels de PP. —–Fin-1er-appel—– @ @ —–Début-2ème-appel—– add r 7, r 0, #5 mov r 5, r 7, lsl #1 mov r 2, r 6 @ —–Fin-2ème-appel—– Carrier, Devismes (Grenoble I) @ r7 ← i + 5 @ x ← 2 ∗ r7 appel @ k ← PP(x ) Fonctions et procédures 9 janvier 2015 14 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 15 Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Solution Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Valeurs temporaires-problème de cohérence PP : add r 3, r 5, #1 add r 4, r 3, #2 mov r 6, r 4 mov pc, lr main : mov r 0, #0 add r 1, r 0, #3 add r 5, r 0, #1 bl PP mov r 1, r 6 add r 7, r 0, #5 mov r 5, r 7, lsl #1 bl PP mov r 2, r 6 Supposons que dans la fonction PP on ait un calcul compliqué à faire et que l’on utilise pour cela le registre r 7. PP : . . . modifie r 7 ... Supposons qu’après l’appel k= PP(2 * (i + 5)) on ait besoin de la valeur i+5 et qu’on veuille la prendre dans r 7 . . . main : ... @ r7 ← i + 5 @ r5 ← 2 ∗ r7 @ modification de r 7 add r 7, r 0, #5 mov r 5, r 7, lsl #1 bl PP mov r 2, r 6 ... utilisation de r 7 qui contient i + 5 Carrier, Devismes (Grenoble I) Introduction-Vocabulaire Problèmes Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 16 Problèmes Conclusion Carrier, Devismes (Grenoble I) Introduction-Vocabulaire @ c’est incorrect ! ! ! Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 17 Problèmes Problèmes à résoudre 1 Appels en cascade 2 Gestion de la récursivité 3 Gestion des variables et paramètres les paramètres données, le résultat, les variables locales, les variables temporaires 4 Passage de paramètre (par adresse ou par valeur) Paramètres : il faut une zone de stockage commune à l’appelant et à l’appelé L’appelant y range les valeurs avant l’appel et l’appelé y prend ces valeurs et les utilise Variables locales : il faut une zone de mémoire privée pour chaque procédure pour y stocker ses variables locales : il ne faut pas que cette zone interfère les variables globales ou locales à l’appelant Variables temporaires : ne doivent pas interférer avec les autres variables Généralisation : Il faut que la méthode choisie soit généralisable afin de pouvoir générer du code Remarque : on a généralement peu de registre à notre disposition Carrier, Devismes (Grenoble I) Fonctions et procédures Point important : Les solutions proposées doivent être systématiques dans le sens où ce sont celles qui permettent à un compilateur de générer automatiquement le code assembleur des fonctions 9 janvier 2015 18 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 20 Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Un premier problème : appels en cascade Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Conclusion : appels en cascade Un programme appelle une procédure P qui elle-même appelle une procédure Q programme α ... ... appel P ... ... ... procédure P β ... ... appel Q ... ... retour procédure Q Stockage de l’adresse de retour ... ... ... retour On ne peut pas travailler avec un seul registre pour sauvegarder les différentes adresses de retour. Il faut sauvegarder une adresse pour chacun des différents appels. Problème Lors de l’appel de P, l’adresse α est rangée dans lr et lors de l’appel de Q, l’adresse β est rangée aussi dans lr et écrase la valeur précédemment sauvegardée. Carrier, Devismes (Grenoble I) Introduction-Vocabulaire Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 21 Problèmes Un deuxième problème : fonctions récursives (1/2) Carrier, Devismes (Grenoble I) Introduction-Vocabulaire Fonctions et procédures Codage en ARM 9 janvier 2015 Problématique de l’appel et du retour 22 Problèmes Fonctions récursives (2/2) Même chose avec les variables locales ! Supposons que x est stocké dans r 0 et le résultat de la fonction fact dans r 1 int fact (int x) { if (x==0) then return 1 else return x * fact(x-1); int fact (int x) { int loc; if x==0 loc = 1; else { loc = fact (x-1); loc = x * loc; }; return loc; } Considérons l’appel fact(3) fact(3) // appel principal int n, y; .... lecture d’un entier dans n y = fact(n); .... utilisation de la valeur de y Carrier, Devismes (Grenoble I) r0 ← 3 fact(2) r0 ← 2 On a perdu la valeur 3 Fonctions et procédures 9 janvier 2015 22 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 22 Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Conclusion : fonctions récursives Introduction-Vocabulaire Codage en ARM Problématique de l’appel et du retour Problèmes Solutions Conclusion 1 On ne peut pas travailler avec une seule zone de paramètres, il en faut une pour chaque appel et pas pour chaque fonction. Les paramètres effectifs (ou arguments) sont attachés à l’appel d’une fonction et pas à l’objet fonction lui-même Solution au prochain cours ! Conclusion 2 On ne peut pas travailler avec une seule zone pour les variables locales, il en faut une pour chaque appel et pas pour chaque fonction. Les variables locales sont attachées à l’appel d’une fonction et pas à l’objet fonction lui-même Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 23 Gestion des variables et paramètres Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 24 Gestion des variables et paramètres Plan Programmation des appels de procédure et fonction Deuxième séance Fabienne Carrier 1 Problème du retour 2 Gestion des variables et paramètres Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 1 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 2 Problème du retour Gestion des variables et paramètres Appels en cascade : un exemple Problème du retour Gestion des variables et paramètres Exécutions possibles X est faux A1 A2 ( B1 B2 B3 ) A3 ( C1 ( B1 B2 B3 ) C2 C3 C4 ) A4 Soit Ai , Bi , Ci des instructions élémentaires Soit A, B, C des procédures, A étant la principale X est vrai la première fois puis faux A1 A2 (B1 B2 B3) A3 ( C1 (B1 B2 B3) C2 ( C1 (B1 B2 B3) C2 C3 C4 ) C3 C4 ) A4 Soit X une expression booléenne Considérons le programme suivant : procédure A A1 A2 B A3 C A4 procédure B B1 B2 B3 procédure C C1 B C2 si X alors C C3 C4 X est vrai deux fois de suite puis faux A1 A2 (B1 B2 B3) A3 (C1 (B1 B2 B3) C2 ( C1 (B1 B2 B3) C2 ( C1 (B1 B2 B3) C2 C3 C4 ) C3 C4 ) C3 C4 ) A4 Problème : Comment mettre en place de tels enchaı̂nements en langage machine ? Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 4 Gestion des variables et paramètres Solution partielle Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 5 Gestion des variables et paramètres Notion de pile En ARM, l’adresse de retour est sauvegardée dans le registre lr. Pour résoudre le problème précédent, il faut plusieurs registres ou cases mémoire. Problèmes : Le nombre de registres disponibles est limité. Le nombre de places nécessaires n’est pas connu à l’avance. Remarque : Une pile est un mécanisme dit LIFO : Last In First Out (Dernier entré, premier sorti) Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 6 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 7 Problème du retour Gestion des variables et paramètres Mécanisme de pile Problème du retour Gestion des variables et paramètres Comment réaliser une pile ? (1 /3) Une zone de mémoire, Notion de tête de pile : dernier élément entré L’élément en tête de pile est appelé sommet. Un repère sur la tête de la pile SP : pointeur de pile, stack pointer Deux choix indépendants : Deux opérations possibles : Comment progresse la pile : le sommet est en direction des adresses croissantes (ascending) ou décroissantes (descending) Le pointeur de pile pointe vers une case vide (empty) ou pleine (full) Dépiler : suppression de l’élément en tête de la pile Empiler : ajout d’un élément en tête de la pile Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 Problème du retour 8 Gestion des variables et paramètres Comment réaliser une pile ? (2 /3) Carrier, Devismes (Grenoble I) Fonctions et procédures dépiler reg Comment réaliser une pile ? (3 /3) Mem Mem 0 0 sommet de pile croissant croissant décroissant décroissant 1er vide Mem[sp]←reg sp←sp+1 sp←sp-1 reg←Mem[sp] derer plein sp←sp+1 Mem[sp]←reg reg←Mem[sp] sp←sp-1 1er vide Mem[sp]←reg sp←sp-1 sp←sp+1 reg←Mem[sp] derer plein sp ←sp-1 Mem[sp]←reg reg←Mem[sp] sp←sp+1 avant Fonctions et procédures 9 janvier 2015 après SP SP max Remarque : Il existe des instructions ARM dédiées à l’utilisation de la pile (exemple : pour la gestion full descending on utilise STMFD pour empiler et LDMFD pour dépiler) Carrier, Devismes (Grenoble I) 9 Gestion des variables et paramètres Mem désigne la mémoire sp désigne le pointeur de pile reg désigne un registre quelconque sens évolution repère empiler reg 9 janvier 2015 Problème du retour max empiler 10 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 11 Problème du retour Gestion des variables et paramètres Appel/retour : utilisation d’une pile Problème du retour Gestion des variables et paramètres Application sur l’exemple La taille de codage d’une instruction est supposée être égale à 1 Appel de procédure, deux actions exécutées par le processeur : 10 11 12 13 14 15 sauvegarde de l’adresse de retour dans une pile c’est-à-dire empiler la valeur PC + taille modification du compteur programme (rupture de séquence) c’est-à-dire PC ← adresse de la procédure A1 A2 empiler 13 ; sauter à 20 (B) A3 Fonctions et procédures 30 31 32 33 34 35 36 9 janvier 2015 12 Gestion des variables et paramètres Trace d’exécution Carrier, Devismes (Grenoble I) retour: dépiler PC A4 Remarque : Ce n’est pas la solution utilisée par le processeur ARM. Problème du retour B1 B2 B3 empiler 15 ; sauter à 30 (C) Au retour, PC prend pour valeur l’adresse en sommet de pile puis le sommet est dépilé : PC ← depiler(). Carrier, Devismes (Grenoble I) 20 21 22 23 Carrier, Devismes (Grenoble I) C1 empiler 32; sauter à 20 (B) C2 si X alors empiler 34 ; sauter à 30 C3 C4 retour: dépiler PC Fonctions et procédures Problème du retour 9 janvier 2015 13 Gestion des variables et paramètres Trace d’exécution Fonctions et procédures 9 janvier 2015 14 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 15 Problème du retour Gestion des variables et paramètres Appel/retour : solution utilisée avec le processeur ARM C’est le programmeur qui doit gérer les sauvegardes dans la pile ! si nécessaire . . . Fonctions et procédures Problème du retour 9 janvier 2015 Gestion des variables et paramètres Application à l’exemple Lors de l’appel, l’instruction BL réalise un branchement inconditionnel avec sauvegarde de l’adresse de retour dans le registre nommé lr (i.e., r14). Carrier, Devismes (Grenoble I) Problème du retour 16 Gestion des variables et paramètres Remarque 10 11 12 13 14 15 A1 A2 bl B A3 bl C A5 20.0 20.1 21 22 23.0 23.1 empiler lr 30.0 30.1 31 32 empiler lr 36.0 36.1 dépiler vers lr mov pc, lr = (sauver 13 dans lr ; sauter à 20.0) = (sauver 15 dans lr ; sauter à 30.0) B1 B2 B3 depiler dans lr mov pc, lr C1 bl B .. ... Carrier, Devismes (Grenoble I) (restaure lr dans le compteur programme) = (sauver 32 dans lr ; sauter à 20.0) (restaure lr dans le compteur programme) Fonctions et procédures Problème du retour 9 janvier 2015 17 Gestion des variables et paramètres Gestion des variables, des paramètres : généralisation Lorsqu’une procédure n’en appelle pas d’autres, on parle de procédure feuille la sauvegarde dans la pile n’est pas nécessaire. La gestion des appels en cascade nous a montré que les adresses de retour nécessitent une gestion en pile C’est le cas de la procédure B dans l’exemple. En fait, c’est le fonctionnement général des appels de procédure qui a cette structure : chaque variable locale et/ou paramètre est rangé dans la pile et la case mémoire associée est repérée par son adresse. 20 21 22 23 Carrier, Devismes (Grenoble I) B1 B2 B3 mov pc, lr Fonctions et procédures 9 janvier 2015 18 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 20 Problème du retour Gestion des variables et paramètres Exemple Problème du retour Gestion des variables et paramètres Flot d’exécution en partant de A procedure A {procedure principale, sans parametre} var u : entier u=2; B(u+3); u=5+u; B(u) procedure B(donnee x : entier) var s, v : entier s=x+4 ; C(s+1); v=2; C(s+v) procedure C(donnee y : entier) var t : entier t=5; ecrire(t*4); t=t+1 Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 21 Gestion des variables et paramètres Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 22 Gestion des variables et paramètres Organisation des informations dans la pile lors de l’exécution d’une procédure Remarques Dans l’exemple précédent, nous observons une gestion des zones de mémoire nécessaires pour les paramètres et les variables en pile ! L’approche est identique pour tout : résultats de fonction, paramètres, etc. variables locales sens evolution de la pile Et il faut, dans la même pile, sauvegarder les adresses de retour (cf. problème des appels en cascade) Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 adresse de retour parametres et valeur de retour de fonction 23 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 24 Problème du retour Gestion des variables et paramètres Organisation du code appelant P : préparer les paramètres BL Q libérer la place allouée aux paramètres Carrier, Devismes (Grenoble I) Problème du retour Gestion des variables et paramètres Comment accéder aux variables locales et aux paramètres ? On pourrait utiliser le pointeur de pile SP : accès indirect avec déplacement : [SP , ]dpl ] dpl >= 0 appelé Q : sauver l’adresse de retour allouer la place pour les variables locales corps de la fonction libérer la place réservée pour les variables locales récupérer adresse de retour retour Fonctions et procédures Problème du retour 9 janvier 2015 Mais si on utilise la pile, par exemple pour sauvegarder la valeur d’un registre que l’on souhaite utiliser, il faut re-calculer les déplacements. Pas pratique ! Pose des problèmes de généralisation 25 Gestion des variables et paramètres Accès aux variables et paramètres : frame pointer (1/2) Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 26 Gestion des variables et paramètres Accès aux variables et paramètres : frame pointer (2/2) Utiliser un repère sur l’environnement courant (paramètres et variables locales) qui reste fixe pendant toute la durée d’exécution de la procédure. variables locales Ce repère est traditionnellement appelé frame pointer en compilation FP Accès à un paramètre : [fp, ]dpl param] dpl param > 0 Accès à une variable locale : [fp, ]dpl varloc ] dpl varloc < 0 adresse de retour Un registre frame pointer existe dans la plupart des architectures de processeur : il est noté fp dans le processeur ARM. Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 parametres et valeur de retour de fonction 27 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 28 Problème du retour Gestion des variables et paramètres Organisation du code en utilisant le registre frame pointer Problème du retour Gestion des variables et paramètres Organisation de la pile lors de l’exécution avec frame pointer Comme pour le registre mémorisant l’adresse de retour, le registre fp doit être sauvegardé avant d’être utilisé. appelant P : préparer les paramètres BL Q libérer la place allouée aux paramètres Carrier, Devismes (Grenoble I) appelé Q : sauver l’adresse de retour sauver l’ancienne valeur de fp placer fp pour repérer les nouvelles variables allouer la place pour les variables locales corps de la fonction libérer la place réservée pour les variables locales restaurer fp récupérer adresse de retour retour Fonctions et procédures Problème du retour 9 janvier 2015 var loc FP paramètres D’où si les adresses sont sur 4 octets : Accès aux variables locales : adresse de la forme fp − 4 − déplacement Accès aux paramètres : adresse de la forme fp +8+ déplacement 29 Gestion des variables et paramètres En ARM : code de B B: @ sauvegarde adresse retour sub sp, sp, #4 str lr, [sp] @ sauvegarde ancien fp sub sp,sp,#4 str fp,[sp] @ mise en place nouveau fp mov fp,sp @ reservation variables locales s,v sub sp,sp,#8 @ s <- x+4 ldr r1, [fp,#+8] add r1,r1,#4 str r1,[fp,#-4] @ passage de s+1 en parametre de C ldr r1, [fp,#-4] add r1,r1,#1 sub sp,sp,#4 str r1,[sp] bl C @ appel C Carrier, Devismes (Grenoble I) ancien fp adresse ret Carrier, Devismes (Grenoble I) Fonctions et procédures Problème du retour 9 janvier 2015 30 Gestion des variables et paramètres Exercice add sp,sp,#4 @ depile le parametre @ v<-2 mov r1,#2 str r1,[fp,#-8] @ passe de s+v en parametre de C ldr r1, [fp,#-4] ldr r2, [fp,#-8] add r1,r1,r2 sub sp,sp,#4 str r1,[sp] Ecrire en ARM le code des procédures A et C Montrer l’évolution de la pile, pc, sp, fp, r 1, r 2 au cours de l’exécution du programme proposé. bl C @ appel C add sp,sp,#4 @ depile parametre add sp,sp,#8 @ depile s,v @ retour a l’ancien fp ldr fp,[sp] add sp,sp,#4 @ recuperation adresse retour ldr lr, [sp] add sp,sp,#4 mov pc,lr @ retour Fonctions et procédures 9 janvier 2015 31 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 32 Problème du retour Gestion des variables et paramètres Solution : code de A Carrier, Devismes (Grenoble I) Gestion du résultat de fonction Problème du retour Gestion des variables et paramètres Solution : code de C Fonctions et procédures Problème des variables temporaires 33 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse 9 janvier 2015 Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires 9 janvier 2015 34 Passage de paramètre par adresse Plan Programmation des appels de procédure et fonction Troisième séance Fabienne Carrier Stéphane Devismes 1 Gestion du résultat de fonction 2 Problème des variables temporaires 3 Passage de paramètre par adresse Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 1 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 2 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Rappel : les paramètres données Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Résultat d’une fonction Les valeurs des paramètres effectifs sont calculées avant l’appel C’est la procédure appelante qui connait les informations. Deux étapes avant l’appel : 1 Le résultat d’une fonction est calculé par l’appelée 2 Le résultat doit être rangé à un emplacement accessible par l’appelante de façon à ce que cette dernière puisse le récupérer. Il faut donc utiliser une zone mémoire commune à l’appelante et l’appelée. Evaluation des paramètres, Stockage des valeurs des paramètres dans la pile. Par l’exemple, la pile. Carrier, Devismes (Grenoble I) Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires 4 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse Gestion du résultat de fonction 9 janvier 2015 Résultat dans la pile (1/3) Fonctions et procédures Problème des variables temporaires 9 janvier 2015 5 Passage de paramètre par adresse Résultat dans la pile (2/3) Avant l’appel d’une fonction qui a deux paramètres données Les valeurs des deux paramètres sont empilés 1 avant l’appel, L’appelant réserve une place pour le résultat dans la pile 2 L’appelée rangera son résultat dans cette case dont le contenu sera récupéré par l’appelant après le retour Une case est réservée pour le résultat de la fonction SP adresse retour Une place pour le résultat de la fonction paramètre donnée paramètre donnée Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 6 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 7 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Gestion du résultat de fonction Problème des variables temporaires Structure du code de l’appel de la fonction et du corps de la fonction Résultat dans la pile (3/3) Lors de l’exécution du corps de la fonction. 1 Les variables locales sont accessibles par une adresse de la forme : fp − depl avec depl ≥ 4, 2 Les paramètres données par les adresses : fp + 8 + 4 et fp + 8 + 8 et 3 La case résultat par l’adresse fp + 8. appelant P : empiler les paramètres réserver une place dans la pile pour le résultat appelée Q : sauver l’adresse de retour sauver l’ancienne valeur de fp placer fp pour repérer les nouvelles variables allouer la place pour les variables locales corps de la fonction le résultat est rangé en fp+8 libérer la place réservée pour les variables locales restaurer fp récupérer adresse de retour retour BL Q SP FP récupérer le résultat libérer la place allouée aux paramètres et au résultat var locale ancien fp adresse retour Une place pour le résultat de la fonction paramètre donnée paramètre donnée Carrier, Devismes (Grenoble I) Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires Passage de paramètre par adresse 8 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse 9 janvier 2015 Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires 9 janvier 2015 9 Passage de paramètre par adresse Application : état de la pile lors de l’exécution du corps de fact Application : codage de la fonction factorielle int fact (int x) { if (x==0) then return 1 else return x * fact(x-1);} fp(fact) fp(main) adresse retour Case pour le résultat de la fonction param x y n main(){ int n, y; ... y = fact(n); ... } Carrier, Devismes (Grenoble I) fp(main) Remarque : Dans cet exemple comme il n’y a pas de variables locales on pourrait se passer de mettre en place fp pour la fonction appelée. On l’a tout de même utilisé de façon à adresser les paramètres toujours de la même façon. Fonctions et procédures 9 janvier 2015 10 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 11 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Application : la fonction main Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Application : la fonction fact @ empiler x-1 fact: main: @ empiler lr @ place pour resultat @ r1 ← n ... @ sequence d’appel de fact(n) @ empiler la valeur de n, parametre donnee bl fact @ sauvegarde ancien fp et place fp(fact) @ recuperer le resultat de l’appel r1=fact(x-1) @ liberation parametre et resultat @ recuperer la valeur du parametre x : r0=x alors: @ r1 = x-1 sub r 1, r 0, #1 Carrier, Devismes (Grenoble I) Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires 12 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse Gestion du résultat de fonction 9 janvier 2015 @ r0 * r1 = x * fact(x-1) mul r 3, r 0, r 1 @ ranger le resultat @ ranger le resultat (1) mov r 1, #1 @ appel bal fsi @ recuperation du resultat dans r1 sinon: @ r0 contient x @ on range le resultat dans y @ appel de fact(x-1) @ preparer parametre et resultat @ on recupere la place allouee au resultat et au parametre bl fact @ r0=x cmp r 0, #0 bne sinon @ reserver la place pour le resultat de fact fsi: @ recuperer fp @ retour Fonctions et procédures Problème des variables temporaires 9 janvier 2015 13 Passage de paramètre par adresse Application : codage d’une fonction factorielle avec des variables locales Exercice int fact (int x) { int loc, r; if x==0 { r = 1; } else { loc = fact (x-1); r = x * loc; } return r; } Dérouler l’exécution avec n = 3 en dessinant les différents états de la pile, c’est-à-dire la zone de mémoire repérée par sp. main () { int n, y; ... y = fact(n); ... } Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 14 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 15 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Etat de la pile lors de l’exécution du corps de factorielle juste après l’appel dans main Gestion du résultat de fonction Problème des variables temporaires Nouvelle version de la fonction fact @ empiler adr retour fact: @ case resultat @ appel @ recuperer resultat @ desallouer param et res @ mise en place fp @ place pour loc et r Case pour r sp @ apres l’appel @ loc=fact(x-1) @ r0=x @ r1=loc @ x*loc @ r=x*loc @ if x==0 ... Case pour loc fp @ r0=x ancien fp adresse retour finsi: @ return r alors: Case pour le résultat Passage de paramètre par adresse @r=1 @ recuperer place var loc param x sinon: @ recuperer fp @ appel fact(x-1) @ preparer param et resultat @ retour @ r0=x @ r1=x-1 Carrier, Devismes (Grenoble I) Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires 16 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse Gestion du résultat de fonction 9 janvier 2015 Méthode 9 janvier 2015 17 Passage de paramètre par adresse Application à l’exemple de la fonction fact Problème : Le code de la fonction fact utilise les registres r0, r1, r2. Les registres utilisés par une procédure ou une fonction pour des calculs intermédiaires locaux sont modifiés fact: Or il serait sain de les retrouver inchangés après un appel de procédure ou fonction @ empiler adr retour sub sp, sp, #4 str lr , [sp] @ mise en place fp et allocation loc et r sub sp, sp, #4 str fp, [sp] mov fp, sp sub sp, sp, #8 @ sauvegarde de r0, r1, et r2 (empiler) Solution : Sauvegarder les registres utilisés : r0, r1, r2... dans la pile. Et cela doit être fait avant de les modifier donc en tout début du code de la procédure ou fonction. Carrier, Devismes (Grenoble I) Fonctions et procédures Problème des variables temporaires Fonctions et procédures 9 janvier 2015 @ if x==0 ... ... 19 Carrier, Devismes (Grenoble I) @ restaurer les registres r0, r1, r2 (depiler) @ desallouer var locales add sp, sp, #8 ldr fp, [sp] @ ancien fp add sp, sp, #4 @ depiler adr retour dans lr ldr lr , [sp] add sp, sp, #4 mov pc, lr @ retour Fonctions et procédures 9 janvier 2015 20 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Vocabulaire Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Notations On se place maintenant dans le cas d’une procédure ayant des paramètres de type donnée et des paramètres de type résultat. Il existe différentes façons de gérer le paramètre z. Nous n’en étudions qu’une seule : la méthode dite du passage par adresse. procedure XX (donnees x, y : entier; resultat z : entier) u,v : entier ... u=x; v=y+2; ... z=u+v; ... Nous utilisons la notation suivante : procedure XX (donnees x, y : entier; adresse z : entier) u,v : entier ... u=x; v=y+2; ... mem[z]=u+v; ... Les paramètres données ne doivent pas être modifiés par l’exécution de la procédure : les paramètres effectifs associés à x et y sont des expressions qui sont évaluées avant l’appel, les valeurs étant substituées aux paramètres formels lors de l’exécution du corps de la procédure. @ mem[z] designe le contenu de la memoire d’adresse z Le paramètre effectif associé au paramètre formel résultat est une variable dont la valeur n’est significative qu’après l’appel de la procédure ; cette valeur est calculée dans le corps de la procédure et affectée à la variable passée en argument. Carrier, Devismes (Grenoble I) Gestion du résultat de fonction Fonctions et procédures Problème des variables temporaires 22 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse Gestion du résultat de fonction 9 janvier 2015 Fonctions et procédures 9 janvier 2015 Problème des variables temporaires 23 Passage de paramètre par adresse Solution : état de la pile lors de l’exécution de la procédure L’exemple d’appel traité XX a,b,c : entier sp b=3; .... XX (b, 7, adresse de c); Carrier, Devismes (Grenoble I) Fonctions et procédures fp 9 janvier 2015 24 Carrier, Devismes (Grenoble I) v u ancien fp adresse retour adresse de c 7 b Fonctions et procédures z y x 9 janvier 2015 25 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Problème des variables temporaires Passage de paramètre par adresse Procédure XX main XX: .bss a: b: c: Gestion du résultat de fonction .skip 4 .skip 4 .skip 4 ... @u←x .text main: ... @ v ← y +2 ... @ r 0 ← valeur de b ptr a: ptr b: ptr c: @ empiler b @ r0 ← 7 bl XX ... @ empiler 7 @ calcul de u + v @ r 0 ← adresse de c @ r 2 ← z, i.e., adresse c @ mem[z ] ← u + v , i.e., mem[adresse c ] ← u + v @ empiler adresse de c ... Carrier, Devismes (Grenoble I) Gestion du résultat de fonction bal exit .word a .word b .word c Fonctions et procédures Problème des variables temporaires ... 26 Carrier, Devismes (Grenoble I) Passage de paramètre par adresse 9 janvier 2015 Gestion du résultat de fonction Exercice Fonctions et procédures Problème des variables temporaires 9 janvier 2015 27 Passage de paramètre par adresse Solution : la procédure principale Codez en ARM le programme suivant : procedure swap(adresse x : entier, adresse y : entier) z : entier z=mem[x] si z > mem[y] mem[x]=mem[y] mem[y]=z fin procedure procedure main() a,b : entier a=9 b=7 afficher a afficher b swap(adresse a,adresse b) afficher a afficher b fin procedure Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 28 Carrier, Devismes (Grenoble I) Fonctions et procédures 9 janvier 2015 29 Gestion du résultat de fonction Problème des variables temporaires Passage de paramètre par adresse Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Solution : la procédure swap Introduction à la structure interne des processeurs : une machine à 5 instructions Fabienne Carrier Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Introduction Fonctions et procédures Le processeur vu du programmeur Interprétation Organisation 9 janvier 2015 Automate d’interprétation 30 Déroulement d’un programme Plan Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation 9 janvier 2015 1 Déroulement d’un programme Aujourd’hui 1 Introduction 2 Le processeur vu du programmeur 3 Carrier, Devismes (Grenoble I) Aujourd’hui nous allons étudier comment un processeur exécute un programme. Interprétation Pour cela, nous allons considérer une machine simpliste : 4 Organisation 5 Automate d’interprétation 6 Déroulement d’un programme Carrier, Devismes (Grenoble I) un processeur à 5 instructions. Introduction à la structure interne des processeurs 9 janvier 2015 2 Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 4 Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Structure Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Les instructions Les instructions sont décrites ci-dessous. On donne pour chacune une syntaxe de langage d’assemblage et l’effet de l’instruction. On considère un processeur comportant un seul registre de données directement visible par le programmeur : ACC (pour accumulateur). clr : mise à zéro du registre ACC. ld #vi : chargement de la valeur immédiate vi dans ACC. La taille du codage d’une adresse et d’une donnée est 4 bits. st ad : rangement en mémoire à l’adresse ad du contenu de ACC. Quelle est la taille de la mémoire ? jmp ad : saut à l’adresse ad. add ad : mise à jour de ACC avec la somme du contenu de ACC et du mot mémoire d’adresse ad. Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation 9 janvier 2015 6 Déroulement d’un programme Codage des instructions Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation 9 janvier 2015 7 Déroulement d’un programme Exemple de programme (1/2) Les instructions sont codées sur 1 ou 2 mots de 4 bits chacuns : le premier mot représente le code de l’opération (clr, ld, st, jmp, add) ; le deuxième mot, s’il existe, contient une adresse ou bien une constante. et : Le codage est le suivant : clr ld #vi st ad jmp ad add ad Carrier, Devismes (Grenoble I) 1 2 3 4 5 Que contient la mémoire après assemblage (traduction en binaire) et chargement en mémoire ? On suppose que l’adresse de chargement est 0. vi ad ad ad Introduction à la structure interne des processeurs ld #3 st 8 add 8 jmp et 9 janvier 2015 8 Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 9 Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Exemple de programme (2/2) Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Interprétation des instructions ? L’interprétation c’est la description de l’exécution du programme. et : Reprenons l’exemple précédent : ld #3 st 8 add 8 jmp et L’exécution du programme commence par l’interprétation de la première instruction, dont le code est en mémoire à l’adresse 0. Ce code étant celui de l’instruction ld, l’interprète lit une information supplémentaire (ici, une valeur) dans le mot d’adresse 1. Que calcule ce programme ? La valeur est alors chargée dans le registre ACC. Finalement, le compteur programme (PC) est modifié de façon à traiter l’instruction suivante. Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation 9 janvier 2015 Automate d’interprétation 10 Déroulement d’un programme Algorithme d’interprétation Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation 9 janvier 2015 12 Déroulement d’un programme Exécution du programme En adoptant un point de vue fonctionnel, en considérant les ressources du processeur comme les variables d’un programme, l’algorithme d’interprétation des instructions peut être décrit de la façon suivante : pc ← 0 tantque vrai selon mem[pc] mem[pc]=1 {clr} : mem[pc]=2 {ld} : mem[pc]=3 {st} : mem[pc]=4 {jmp} : mem[pc]=5 {add} : acc ← 0 acc ← mem[pc+1] mem[mem[pc+1]] ← acc acc ← acc + mem[mem[pc+1]] pc ← pc+1 pc ← pc+2 pc ← pc+2 pc ← mem[pc+1] pc ← pc+2 Exercice : Dérouler l’exécution du programme précédent en utilisant cet algorithme. Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 13 Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 14 Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Partie opérative Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Structure de la partie opérative Le processeur comporte une partie qui permet de stocker des informations dans des registres (visibles ou non du programmeur), de faire des calculs (+, -, and,...). Cette partie est reliée à la mémoire par les bus adresses et données. On l’appelle Partie Opérative. Selon l’organisation de cette partie opérative, un certain nombre d’actions de base sont possibles : on les appelle des micro-actions. opérations UAL res=0 res=op1 res=op1+1 res=op1+op2 Bus Adr Dans la partie opérative on a des registres : pc, acc, rinst, ma (memory address), md (memory data),... MA op1 0 PC 1 UAL res ACC La partie opérative donne aussi des infos qui servent à élaborer les conditions (flag). op2 Bus Don Rinst Carrier, Devismes (Grenoble I) Introduction MD Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation 9 janvier 2015 16 Déroulement d’un programme Micro-actions et micro-conditions Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation 9 janvier 2015 17 Déroulement d’un programme Introduction On fait des hypothèses FORTES sur les transferts possibles : md ← mem[ma] mem[ma] ← md rinst ← md reg0 ← 0 reg0 ← reg1 lecture d’un mot mémoire. écriture d’un mot mémoire affectation affectation affectation reg0 ← reg1 + 1 incrémentation reg0 ← reg1 + reg2 opération C’est la seule possibilité en lecture ! C’est la seule possibilité en écriture ! C’est la seule affectation possible dans rinst reg0 est pc, acc, ma, ou md reg0 est pc, acc, ma, ou md reg1 est pc, acc, ou md reg0 est pc, acc, ou md reg1 est pc, acc, ou md reg0 est pc, acc, ou md reg1 est pc, acc, ou md reg2 est pc, acc, ou md Le processeur comporte une partie qui permet : d’enchainer des calculs et/ou des manipulations de registres et/ou des accès à la mémoire. C’est la Partie Contrôle, aussi appelée algorithme d’interprétation des instructions du processeur. C’est une machine séquentielle (automate) avec actions. On fait aussi des hypothèses sur les tests : (rinst = entier) Ces 3 types de transferts et les tests constituent le langage des micro-actions et des micro-conditions. Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 18 Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 20 Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Une première version Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Réalisation et optimisation pc <! 0 ma <! pc Cet automate est réalisé de manière systématique avec du matériel (des transistors). md <! Mem[ma] rinst <! md load,add, jmp, stor clear pc <! pc+1 Optimisation : minimiser le nombre d’états pour réduire la taille du processeur et accélérer le temps d’exécution d’une instruction. acc <! 0 ma <! pc pc <! pc+1 add md <! Mem[ma] load store jmp acc <! md md <! Mem[ma] md <! acc pc <! pc+1 Quelques pistes : ma <! md ma <! md pc <! md pc <- pc +1 peut être fait en avance. acc <! acc + md Mem[ma] <! md ma <- md commun à plusieurs chemins. pc <! pc+1 pc <! pc+1 Remarque : La notation de la condition clear doit être comprise comme le booléen rinst = 1. Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Le processeur vu du programmeur Interprétation Organisation 9 janvier 2015 Automate d’interprétation 21 Déroulement d’un programme Version amélioration ma <! pc md <! Mem[ma] load 8 Carrier, Devismes (Grenoble I) 1 ma <! pc 2 md <! Mem[ma] 3 rinst <! md 4 debut : pc <! pc+1 ici : clear acc <! 0 6 Interprétation Organisation Automate d’interprétation 9 janvier 2015 22 Déroulement d’un programme 15 mnémonique ou directive .text clr ld st add jmp référence mode adressage #8 xx xx ici immédiat absolu ou direct absolu ou direct absolu ou direct 7 add, store jmp acc <! md Introduction à la structure interne des processeurs Le processeur vu du programmeur étiquette pc <! 0 5 pc <! pc+1 Introduction Exemple de code 0 load,add, jmp, stor Carrier, Devismes (Grenoble I) 10 .data ma <! md pc <! md 9 store add 11 md <! acc md <! Mem[ma] 12 Mem[ma] <! md acc <! acc + md Introduction à la structure interne des processeurs xx : 13 14 9 janvier 2015 Exercice : Que contient la mémoire après chargement en supposant que l’adresse de chargement est 0 et que xx est l’adresse 15. 23 Carrier, Devismes (Grenoble I) Introduction à la structure interne des processeurs 9 janvier 2015 25 Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Contenu en mémoire Introduction Le processeur vu du programmeur Interprétation Organisation Automate d’interprétation Déroulement d’un programme Déroulement état pc ma md rinst acc mem[15] Exercice : Donnez le déroulement au cycle près du programme. Carrier, Devismes (Grenoble I) Introduction Introduction à la structure interne des processeurs Compilation haut-niveau Compilation en assembleur Traduction 9 janvier 2015 Assembleur 26 Editeur de liens Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau Introduction à la structure interne des processeurs Compilation en assembleur Traduction 9 janvier 2015 Assembleur 27 Editeur de liens Plan 1 Introduction 2 Compilation haut-niveau 3 Compilation en assembleur 4 Traduction 5 Assembleur 6 Editeur de liens La vie des programmes Fabienne Carrier Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 1 Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 2 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Aujourd’hui Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Un exemple en langage C /* fichier fonctions.c */ int somme (int *t, int n) { int i, s; s = 0; for (i=0;i<n;i++) s = s + t[i]; return (s); } Nous allons étudier en détail les différentes étapes de compilation permettant de produire un exécutable à partir d’un ou plusieurs fichiers sources. int max (int *t, int n) { int i, m; m = t[0]; for (i=1;i<n;i++) if (m < t[i]) m = t[i]; return (m); } Dans le fichier main.c les fonctions somme et max sont dites importées : elles sont définies dans un autre fichier. ================================== Remarque : lorsque l’on compile plusieurs fichiers sources en un seul exécutable, on parle de compilation séparée. Dans le fichier fonctions.c, somme et max sont dites exportées : elles sont utilisables dans un autre fichier. /* fichier main.c */ extern int somme (int *t, int n); extern int max (int *t, int n); #define TAILLE 10 static int TAB [TAILLE]; main int for u = v = Carrier, Devismes (Grenoble I) Introduction La vie des programmes Compilation haut-niveau Compilation en assembleur 9 janvier 2015 Traduction Assembleur 4 Editeur de liens Compilation () { i,u,v; (i=0;i<TAILLE;i++) scanf ("%d", &TAB[i]); somme (TAB, TAILLE); max (TAB, TAILLE); } Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 6 Editeur de liens Exemple avec ARM : essai.s et lib.s essai.s fonctions.c main.c traducteur traducteur fonctions.s main.s Pour compiler , produire un exécutable, on enchaine premiere phase de la compilation assembleur assembleur fonctions.o main.o editeur de liens exec Remarque : la phase de traduction comporte une phase de pré-traitement dite phase de pré-compilation où le code source est transformé en code source enrichi (les directives de pré-compilations — # — sont traitées) Carrier, Devismes (Grenoble I) les commandes : gcc -c fonctions.c gcc -c main.c gcc -o exec main.o fonctions.o La commande gcc -c main.c produit un fichier appelé main.o. La commande gcc -c fonctions.c produit un fichier fonctions.o. Les fichiers fonctions.o et main.o contiennent du binaire translatable, c’est-à-dire, du code binaire qui ne peut pas directement être exécuté en mémoire. La commande gcc -o exec main.o fonctions.o produit le fichier exec qui contient du binaire exécutable. Ce fichier résulte de la liaison des deux fichiers objets (.o). On parle d’édition de liens. Remarque : gcc cache l’appel à différents outils (logiciels). La vie des programmes 9 janvier 2015 7 .text .global main main: mov r0, #0 bcle: cmp r0, #10 beq fin ldr r3, adr_xx ldr r2, [r3] bl add1 str r2, [r3] add r0, r0, #1 bal bcle fin: bal exit adr_xx: .word xx .data .word 99 xx: .word 3 Carrier, Devismes (Grenoble I) lib.s .global add1 .text add1 : add r2, r2, #1 mov pc, lr La vie des programmes 9 janvier 2015 9 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Compilation Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Du langage C vers l’assembleur Pour compiler , on enchaine les commandes : lib.s essai.s assembleur assembleur arm-eabi-gcc -c essai.s arm-eabi-gcc -c lib.s arm-eabi-gcc -o essai essai.o lib.o L’objectif d’un langage de haut niveau type langage C est de permettre au programmeur de s’abstraire des détails inhérents au fonctionnement de la machine. Les commandes arm-eabi-gcc -c essai.s et arm-eabi-gcc -c lib.s produisent les fichiers essai.o et lib.o. Il permet de manipuler des concepts bien plus élaborés. Les fichiers essai.o et lib.o contiennent du binaire translatable. essai.o lib.o editeur de liens Mais il empêche la gestion de certains de ces détails. La commande arm-eabi-gcc -o essai essai.o lib.o produit le fichier essai qui contient du binaire exécutable. Ce fichier résulte de la liaison des deux fichiers objets (.o). On parle d’édition de liens. La première phase de la compilation consiste en la traduction systématique d’une syntaxe complexe en un langage plus simple et plus proche de la machine. Remarque : arm-eabi-gcc cache différents outils. essai La commande arm-eabi-gcc appliqué à un fichier .s avec l’option -c correspond à la commande arm-eabi-as. La commande arm-eabi-gcc avec l’option utilisée avec -o correspond à la commande d’édition de liens arm-eabi-ld. Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 10 Editeur de liens Problématique Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 12 Editeur de liens Premier cas L’objectif de l’assembleur est de produire du code binaire à partir du langage d’assemblage. .text .global main main: mov r0, #0 bcle: cmp r0, #10 beq fin ldr r3, adr_xx ldr r2, [r3] bl add1 str r2, [r3] add r0, r0, #1 bal bcle fin: bal exit adr_xx: .word xx .data .word 99 xx: .word 3 Il n’est pas toujours possible de produire du binaire qui puisse être directement copié en mémoire pour deux raisons principalement : Cas 1 On ne connaı̂t pas en général l’adresse à laquelle les zones text et data doivent être rangées en mémoire. Cas 2 Le programme peut faire référence à des noms qui ne sont pas définis dans le fichier en cours de traduction. Dans le premier cas, on peut produire une image du binaire à partir de l’adresse 0, à charge du matériel de translater l’image à l’adresse de chargement pour l’exécution (il faut garder les informations permettant de savoir quelles sont les adresses à translater) Dans le deuxième cas on ne peut rien faire. Carrier, Devismes (Grenoble I) Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 14 Carrier, Devismes (Grenoble I) L’adresse associée au symbole xx est : adresse de début de la zone data + 4 mais encore faut-il connaı̂tre l’adresse de début de la zone data ! Si on considère que la zone data est chargée à l’adresse 0, l’adresse associée à xx est alors 4. Si on doit translater le programme à l’adresse 2000, il faut se rappeler que à l’adresse adr xx on doit modifier la valeur 4 en 2000 + 4. Cette information à mémoriser est appelée une donnée de translation (relocation en anglais). La vie des programmes 9 janvier 2015 15 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Deuxième cas Introduction Compilation haut-niveau Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Que contient un fichier .s ? Dans le fichier essai.o il n’est pas possible de calculer le déplacement de l’instruction bl add1 puisque l’on ne sait pas où est l’étiquette add1 quand l’assembleur traite le fichier essai.s. En effet l’étiquette est dans un autre fichier : lib.s .text .global main main: mov r0, #0 bcle: cmp r0, #10 beq fin ldr r3, adr_xx ldr r2, [r3] bl add1 str r2, [r3] add r0, r0, #1 bal bcle fin: bal exit adr_xx: .word xx .data .word 99 xx: .word 3 Carrier, Devismes (Grenoble I) Introduction .text .global main main: mov r0, #0 bcle: cmp r0, #10 beq fin ldr r3, adr_xx ldr r2, [r3] bl add1 str r2, [r3] add r0, r0, #1 bal bcle fin: bal exit adr_xx: .word xx .data .word 99 xx: .word 3 Reprenons l’exemple en langage C. Suite à la traduction en langage d’assemblage, dans le fichier main.s les références aux fonctions somme et max ne peuvent être complétées car les fonctions en question ne sont pas définies dans le fichier main.c mais dans fonctions.c. La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 16 Editeur de liens Que contient un fichier .o ? des directives : .data, .bss, .text, .word, .hword, .byte, .skip, .asciz, .align des étiquettes appelés aussi symboles des instructions du processeur des commentaires : @ blabla Note : Parfois une directive (.org) permet de fixer l’adresse où sera logé le programme en mémoire. Cette facilité permet alors de calculer certaines adresses dès la phase d’assemblage. Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 17 Editeur de liens Exemple : essai.o, entête un entête contenant la taille du fichier, les adresses des différentes tables, la taille de la zone de données non initialisées (bss), etc. On obtient l’entête avec la commande arm-eabi-readelf -a essai.o. ELF Header: Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2’s complement, little endian Version: 1 (current) OS/ABI: ARM ABI Version: 0 Type: REL (Relocatable file) Machine: ARM Version: 0x1 Entry point address: 0x0 Start of program headers: 0 (bytes into file) Start of section headers: 184 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 0 (bytes) Number of program headers: 0 Size of section headers: 40 (bytes) Number of section headers: 9 Section header string table index: 6 la zone de données (data) parfois incomplète la zone des instructions (text) parfois incomplète les informations associées à chaque symbole rangées dans une section appelée : table des symboles. les informations permettant de compléter ce qui n’a pu être calculé... On les appelle informations de translation et l’ensemble de ces informations est rangé dans une section particulière appelée table de translation. une table des chaines à laquelle la table des symboles fait référence. Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 18 Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 19 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Exemple : essai.o, organisation des tables Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Exemple : essai.o, zone data On obtient l’entête avec la commande arm-eabi-readelf -a essai.o. On obtient la zone .data avec la commande arm-eabi-objdump -s -j .data essai.o. Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00000000 000034 00002c 00 AX 0 0 1 [ 2] .rel.text REL 00000000 00033c 000018 08 7 1 4 [ 3] .data PROGBITS 00000000 000060 000008 00 WA 0 0 1 [ 4] .bss NOBITS 00000000 000068 000000 00 WA 0 0 1 [ 5] .ARM.attributes ARM_ATTRIBUTES 00000000 000068 000010 00 0 0 1 [ 6] .shstrtab STRTAB 00000000 000078 000040 00 0 0 1 [ 7] .symtab SYMTAB 00000000 000220 0000f0 10 8 12 4 [ 8] .strtab STRTAB 00000000 000310 000029 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) Carrier, Devismes (Grenoble I) Introduction La vie des programmes Compilation haut-niveau Compilation en assembleur essai.o: Contenu de la section .data: 0000 63000000 03000000 9 janvier 2015 Traduction format de fichier elf32-littlearm Assembleur 20 Editeur de liens Exemple : essai.o, zone text Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 21 Editeur de liens Exemple : essai.o, zone text La zone .text avec désassemblage avec la commande arm-eabi-objdump -j .text -d essai.o. On obtient la zone .text avec la commande arm-eabi-objdump -j .text -s essai.o. essai.o: Disassembly of section .text: 00000000 <main>: 0: e3a00000 mov r0, #0 00000004 <bcle>: 4: e350000a cmp r0, #10 8: 0a000005 beq 24 <fin> c: e59f3014 ldr r3, [pc, #20] ; 28 <adr_xx> 10: e5932000 ldr r2, [r3] 14: ebfffffe bl 0 <add1> 18: e5832000 str r2, [r3] 1c: e2800001 add r0, r0, #1 20: eafffff7 b 4 <bcle> format de fichier elf32-littlearm Contenu de la section .text: 0000 0000a0e3 0a0050e3 0500000a 14309fe5 0010 002093e5 feffffeb 002083e5 010080e2 0020 f7ffffea feffffea 04000000 00000024 <fin>: 24: eafffffe b 0 <exit> 00000028 <adr_xx>: 28: 00000004 .word 0x00000004 Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 22 Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 23 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Exemple : essai.o, table des symboles Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Exemple : essai.o, table de translation On obtient l’entête avec la commande arm-eabi-readelf -s essai.o. Symbol table ’.symtab’ Num: Value Size 0: 00000000 0 1: 00000000 0 2: 00000000 0 3: 00000000 0 4: 00000000 0 5: 00000004 0 6: 00000024 0 7: 00000028 0 8: 00000028 0 9: 00000004 0 10: 00000000 0 11: 00000000 0 12: 00000000 0 13: 00000000 0 14: 00000000 0 contains 15 entries: Type Bind Vis NOTYPE LOCAL DEFAULT SECTION LOCAL DEFAULT SECTION LOCAL DEFAULT SECTION LOCAL DEFAULT NOTYPE LOCAL DEFAULT NOTYPE LOCAL DEFAULT NOTYPE LOCAL DEFAULT NOTYPE LOCAL DEFAULT NOTYPE LOCAL DEFAULT NOTYPE LOCAL DEFAULT NOTYPE LOCAL DEFAULT SECTION LOCAL DEFAULT NOTYPE GLOBAL DEFAULT NOTYPE GLOBAL DEFAULT NOTYPE GLOBAL DEFAULT Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau Ndx UND 1 3 4 1 1 1 1 1 3 3 5 1 UND UND Name On obtient la table de translation avec la commande arm-eabi-readelf -a essai.o. $a bcle fin adr_xx $d xx $d Relocation section Offset Info 00000014 00000d01 00000024 00000e01 00000028 00000202 main add1 exit La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 24 Editeur de liens Exemple : lib.o, organisation des tables La vie des programmes Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 25 Editeur de liens Exemple : lib.o, tables des symboles Symbol table ’.symtab’ Num: Value Size 0: 00000000 0 1: 00000000 0 2: 00000000 0 3: 00000000 0 4: 00000000 0 5: 00000000 0 6: 00000000 0 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00000000 000034 000008 00 AX 0 0 1 [ 2] .data PROGBITS 00000000 00003c 000000 00 WA 0 0 1 [ 3] .bss NOBITS 00000000 00003c 000000 00 WA 0 0 1 [ 4] .ARM.attributes ARM_ATTRIBUTES 00000000 00003c 000010 00 0 0 1 [ 5] .shstrtab STRTAB 00000000 00004c 00003c 00 0 0 1 [ 6] .symtab SYMTAB 00000000 0001c8 000070 10 7 6 4 [ 7] .strtab STRTAB 00000000 000238 000009 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) Carrier, Devismes (Grenoble I) ’.rel.text’ at offset 0x33c contains 3 entries: Type Sym.Value Sym. Name R_ARM_PC24 00000000 add1 R_ARM_PC24 00000000 exit R_ARM_ABS32 00000000 .data 9 janvier 2015 26 Carrier, Devismes (Grenoble I) contains 7 entries: Type Bind Vis NOTYPE LOCAL DEFAULT SECTION LOCAL DEFAULT SECTION LOCAL DEFAULT SECTION LOCAL DEFAULT NOTYPE LOCAL DEFAULT SECTION LOCAL DEFAULT NOTYPE GLOBAL DEFAULT La vie des programmes Ndx Name UND 1 2 3 1 $a 4 1 add1 9 janvier 2015 27 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Etapes d’un assembleur Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Rôle de l’éditeur de liens Le travail de l’éditeur de liens consiste à : Identifier les symboles définis et exportés d’un côté et les symboles non définis de l’autre (importés). 1 Reconnaissance de la syntaxe (lexicographie et syntaxe) et repérage des symboles. Fabrication de la table des symboles utilisée par la suite dès qu’une référence à un symbole apparait. 2 Traduction = production du binaire. Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur Rassembler les zones de même type et effectuer les corrections nécessaires. Remarque : L’édition de liens rassemble des fichiers objets. L’assembleur ne peut pas produire du binaire exécutable, il produit un binaire incomplet dans lequel il conserve des informations permettant de le compléter plus tard. La phase d’édition de liens bien qu’elle permette de résoudre les problèmes de noms globaux produit elle aussi du binaire incomplet car les adresses d’implantation des zones text et data ne sont pas connues. 28 Editeur de liens Phase de chargement : production de binaire exécutable édition de liens au moment de l’exécution (appel de la fonction) ce qui permet de partager des fonctions et de ne pas charger en mémoire plusieurs fois le même code. 9 janvier 2015 Compilation haut-niveau La vie des programmes Compilation en assembleur 9 janvier 2015 Traduction Assembleur 30 Editeur de liens ELF Header: Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2’s complement, little endian Version: 1 (current) OS/ABI: ARM ABI Version: 0 Type: EXEC (Executable file) Machine: ARM Version: 0x1 Entry point address: 0x810c Start of program headers: 52 (bytes into file) Start of section headers: 144432 (bytes into file) Flags: 0x2, has entry point, GNU EABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 2 Size of section headers: 40 (bytes) Number of section headers: 24 Section header string table index: 21 édition de liens au moment du chargement en mémoire (au lieu de rassembler le contenu de deux fichiers complets, on ne charge que le code des fonctions utilisées, par ex. pour les bibliothèques) ou La vie des programmes Introduction Que contient un fichier exécutable ? entête Le calcul des adresses définitives peut avoir lieu de façon statique ou de façon dynamique au moment ou on en a besoin. Deux solutions possibles : Carrier, Devismes (Grenoble I) Carrier, Devismes (Grenoble I) 31 Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 32 Introduction Compilation haut-niveau Compilation en assembleur Traduction Assembleur Editeur de liens Que contient un fichier exécutable ? organisation des tables Section Headers: [Nr] Name [ 0] [ 1] .init [ 2] .text [ 3] .fini [ 4] .rodata [ 5] .eh_frame [ 6] .ctors [ 7] .dtors [ 8] .jcr [ 9] .data [10] .bss [11] .comment [12] .debug_aranges [13] .debug_pubnames [14] .debug_info [15] .debug_abbrev [16] .debug_line [17] .debug_str [18] .debug_loc [19] .debug_ranges [20] .ARM.attributes [21] .shstrtab [22] .symtab [23] .strtab Type NULL PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS NOBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS PROGBITS ARM_ATTRIBUTES STRTAB SYMTAB STRTAB Carrier, Devismes (Grenoble I) Introduction Compilation haut-niveau Addr 00000000 00008000 00008020 0000a520 0000a53c 0000a548 00012d84 00012d8c 00012d94 00012d98 000136f4 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Off 000000 008000 008020 00a520 00a53c 00a548 00ad84 00ad8c 00ad94 00ad98 00b6f4 00b6f4 00b8e0 00bc30 00c2cc 01ad1f 01d675 01fab9 020ef2 023058 023340 023350 0237f0 024bd0 Size 000000 000020 002500 00001c 00000c 00083c 000008 000008 000004 00095c 000108 0001e6 000350 00069c 00ea53 002956 002444 001439 002163 0002e8 000010 0000df 0013e0 0007d1 9 janvier 2015 Traduction Assembleur 33 Editeur de liens Que contient un fichier exécutable ? section data 12ea8 00000000 00000000 63000000 03000000 ...................... La vie des programmes Compilation en assembleur Traduction Assembleur Editeur de liens Que contient un fichier exécutable ? table des symboles Carrier, Devismes (Grenoble I) Introduction Ndx Name UND 1 2 3 2 2 2 2 9 2 add1 La vie des programmes Compilation haut-niveau Compilation en assembleur bcle fin adr_xx $d xx 9 janvier 2015 Traduction Assembleur 34 Editeur de liens Que contient un fichier exécutable ? section text Contents of section .data: ...................... Carrier, Devismes (Grenoble I) Compilation haut-niveau Symbol table ’.symtab’ contains 318 entries: Num: Value Size Type Bind Vis 0: 00000000 0 NOTYPE LOCAL DEFAULT 1: 00008000 0 SECTION LOCAL DEFAULT 2: 00008020 0 SECTION LOCAL DEFAULT 3: 0000a520 0 SECTION LOCAL DEFAULT ......................... 74: 0000821c 0 NOTYPE LOCAL DEFAULT 75: 0000823c 0 NOTYPE LOCAL DEFAULT 76: 00008240 0 NOTYPE LOCAL DEFAULT 77: 00008240 0 NOTYPE LOCAL DEFAULT 78: 00012eb4 0 NOTYPE LOCAL DEFAULT ......................... 230: 00008244 0 NOTYPE GLOBAL DEFAULT ......................... ES Flg Lk Inf Al 00 0 0 0 00 AX 0 0 4 00 AX 0 0 4 00 AX 0 0 4 00 A 0 0 4 00 A 0 0 4 00 WA 0 0 4 00 WA 0 0 4 00 WA 0 0 4 00 WA 0 0 4 00 WA 0 0 4 00 0 0 1 00 0 0 8 00 0 0 1 00 0 0 1 00 0 0 1 00 0 0 1 01 MS 0 0 1 00 0 0 1 00 0 0 8 00 0 0 1 00 0 0 1 10 23 213 4 00 0 0 1 La vie des programmes Compilation en assembleur Introduction 9 janvier 2015 35 00008218 <main>: 8218: e3a00000 mov r0, #0 0000821c <bcle>: 821c: e350000a 8220: 0a000005 8224: e59f3014 8228: e5932000 822c: eb000004 8230: e5832000 8234: e2800001 8238: eafffff7 cmp r0, #10 beq 823c <fin> ldr r3, [pc, #20] ; 8240 <adr_xx> ldr r2, [r3] bl 8244 <add1> str r2, [r3] add r0, r0, #1 b 821c <bcle> 0000823c <fin>: 823c: ea000007 b 8260 <exit> 00008240 <adr_xx>: 8240: 00012eb4 .word 0x00012eb4 00008244 <add1>: 8244: e2822001 8248: e1a0f00e add r2, r2, #1 mov pc, lr Carrier, Devismes (Grenoble I) La vie des programmes 9 janvier 2015 36 Introduction Contrôleur d’entrées-sorties Décodage d’adresses Introduction Contrôleur d’entrées-sorties Décodage d’adresses Plan Organisation d’un ordinateur Fabienne Carrier 1 Introduction 2 Contrôleur d’entrées-sorties 3 Décodage d’adresses Stéphane Devismes Université Joseph Fourier, Grenoble I 9 janvier 2015 Carrier, Devismes (Grenoble I) Introduction Organisation d’un ordinateur Contrôleur d’entrées-sorties 9 janvier 2015 1 Décodage d’adresses Organisation de l’ordinateur Organisation d’un ordinateur Contrôleur d’entrées-sorties 9 janvier 2015 2 Décodage d’adresses Peut-on ajouter des programmes et les lancer ? (cartouche de jeu, par exemple ...) Peut-on ajouter des programmes en langage machine écrits, compilés et assemblés soi-même ? Y-a-t-il des mémoires secondaires ? (disque dur, clé USB, CD-Rom, . . .) Les PC Les ordinateurs portables Les serveurs Les super-calculateurs Les téléphones portables Il y a des points communs : Dans l’électro-ménager, . . . Processeur Mémoire Bus adresses, données Signaux de contrôle (Read /Write, autres), ... Contrôleurs d’entrées-sorties Décodeur On parle souvent de systèmes embarqués pour désigner un ordinateur qui ne ressemble pas à un ordinateur ! C’est-à-dire, pas de clavier, pas de souris, pas de disque, pas d’écran, mais un processeur avec un programme Exemple : Le contrôleur de distribution d’essence d’une station service. Organisation d’un ordinateur Introduction Critères de classification Il existe différentes sortes d’ordinateurs : Carrier, Devismes (Grenoble I) Carrier, Devismes (Grenoble I) 9 janvier 2015 4 Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 5 Introduction Contrôleur d’entrées-sorties Décodage d’adresses Vision externe Introduction Contrôleur d’entrées-sorties Décodage d’adresses Lectures/écriture Ecriture Lors d’une écriture (instruction STORE) dans un des trois registres Mcommande, Métat, Mdonnéessort, le processeur envoie la donnée à écrire dans le bus de donnée puis la donnée est transférée du bus de donnée au registre du circuit contrôleur d’Entrées-Sorties. Un simple circuit avec 4 registres Le circuit est vu par le processeur (espace d’adressage) comme 4 mots : Mcommande (un mot de commande) Métat (un mot d’état) Mdonnéessort (données sortantes) Mdonnéesentr (données entrantes) Lecture Lors d’une lecture (instruction LOAD) dans le registre Mdonnéesentr ou dans le registre Métat, le processeur récupère le contenu du registre Mdonnéesentr (resp. Métat) via le bus de donnée. Les 4 mots (Mcommande, Métat, Mdonnéessort, Mdonnéesentr) seront supposés aux adresses CNTRL, CNTRL+1, +2, +3. Attention : CNTRL est une adresse constante, pas déterminée par l’assembleur. Elle a un sens physique qu’on va voir. . . Carrier, Devismes (Grenoble I) Introduction Organisation d’un ordinateur Contrôleur d’entrées-sorties 9 janvier 2015 7 Décodage d’adresses Notations Carrier, Devismes (Grenoble I) Introduction Organisation d’un ordinateur 9 janvier 2015 Contrôleur d’entrées-sorties 8 Décodage d’adresses Utilisation du contrôleur d’entrées-sorties : exemple Dans la documentation technique d’un contrôleur, certaines valeurs sont prédéfinies. Commande Signification LOAD reg, Métat Considérons ici l’exemple (simpliste) d’un contrôleur graphique avec les valeurs prédéfinies suivantes : METTRE l’adresse CNTRL dans un registre regad puis LOAD reg, [regad+1] STORE reg, Mdonnéessort libre : cette valeur dans le mot d’état signifie que le contrôleur est prêt à accepter une commande. Le contrôleur tient à jour son état de disponibilité pour que le processeur puisse savoir si il est occupé ou non. METTRE l’adresse CNTRL dans un registre regad puis STORE reg, [regad+2] fond écran : cette valeur, envoyée vers le mot de commande, affiche un fond d’écran de la couleur contenue dans le registre de données sortantes. rouge : code de la couleur rouge, peut être contenu dans le registre de données sortantes. Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 9 Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 10 Introduction Contrôleur d’entrées-sorties Décodage d’adresses Exercice Introduction Contrôleur d’entrées-sorties Décodage d’adresses Etude du matériel d’entrées-sorties : les entrées Ecrire un programme qui change la couleur de fond d’écran en rouge via le contrôleur graphique. bus données (lié au processeur) bus données bus adresses ext 2 bits faibles entrantes commande état sortantes proc entrantes commande état sortantes proc ext L’adresse est dans [CNTRL, CNTRL+3] connexion des données lire/ecrirebar Remarque : On aurait de même des actions d’envoi : ad dans [toto, toto+15] entrantes commande état envoi sortantes acquittement acquittement proc d’un caractère à l’écran, 4 bits faibles clock, reset,.. de positionnement de la tête de lecture d’un disque dur, selection autre contrôleur connexion des adresses ensemble des signaux de contrôle connexion du contrôle ... Fig. 1 – Connexions entre processeur, contrôleur d’entrées sorties et monde extérieur ; le dessin est en trois parties pour mettre en évidence les trois types d’informations véhiculées par les fils, mais bien sûr les fils sont tous présents dans l’assemblage. Les contrôleurs réels sont parfois très simples, parfois très complexes deux bits de bus adresses (pour sélectionner l’un des 4 mots CNTRL +0, +1, +2 ou +3) un signal de sélection provenant du décodeur d’adresses le signal Read /Write du processeur un paquet de données (8 fils) venant du monde extérieur. Disons pour simplifier 8 interrupteurs le signal d’horloge (par exemple le même que le processeur). On peut raisonner comme si, à chaque front de l’horloge la valeur venant des interrupteurs était échantillonnée dans le registre Mdonnéesentr. une entrée ACQUITTEMENT si c’est un contrôleur de sortie. (simple affichage comme ci-dessus, contrôleur réseau. . .) parfois pour une hexadécimaux. On note val x une valeur représentée en hexa. On dira, pour simplifier, que l’entrée A ”vaut” 67 x pour dire que les 8 fils sont dans les états 0110 0111. L’ordinateur est organisé ainsi : (Voir figure 2 seule commande, plusieurs données. . . Carrier, Devismes (Grenoble I) Organisation d’un ordinateur Introduction Contrôleur d’entrées-sorties 9 janvier 2015 11 Décodage d’adresses Etude du matériel d’entrées-sorties : les sorties bus données proc ext connexion des données lire/ecrirebar proc bus adresses ext entrantes commande état sortantes entrantes commande état envoi sortantes acquittement acquittement clock, reset,.. proc 2 bits faibles entrantes commande état sortantes selection L’adresse est dans [CNTRL, CNTRL+3] ad dans [toto, toto+15] 4 bits faibles autre contrôleur connexion des adresses ensemble des signaux de contrôle connexion du contrôle Fig. 1 – Connexions entre processeur, contrôleur d’entrées sorties et monde extérieur ; le dessin est en trois parties pour mettre en évidence les trois types d’informations véhiculées par les fils, mais bien sûr les fils sont tous présents dans l’assemblage. Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 1. Le mot (lu ou écrit) est pris dans une mémoire morte (ROM)Contr ssi l’entrée A est ées-sorties telle que 0 x Introduction ôleur d’entr <= A <= 3F x c’est à dire A7 A6 A5 A4 A3 A2 A1 A0 sont compris entre 0 0 0 0 0 0 0 0 et 00111111 Ceci couvre les 64 monômes canoniques pour lesquels A7 =0 et A6 =0. Le boı̂tier physique de ROM, qui contient 64 mots reçoit deux types d’information – les 6 fils A5 A4 A3 A2 A1 A0 qui permettent d’adresser un des 64 mots – UN FIL de sélection selrom qui vaut 1 ssi A7 =0 et A6 =0. On voit que selrom=A7 ’.A6 ’. 9 janvier 2015 12 Décodage d’adresses Exemple Il délivre sur le bus données du processeur le contenu du registre Mdonnéesentr si il y a sélection, lecture et adressage de Mdonnéesentr, c’est-à-dire si le processeur exécute une instruction LOAD à l’adresse CNTRL +3 Il délivre sur le bus données du processeur le contenu du registre Métat si il y a sélection, lecture et adressage de Métat, c’est-à-dire si le processeur exécute une instruction LOAD à l’adresse CNTRL +1. On peut raisonner comme si le contenu du registre Mdonnéessort était affiché en permanence sur 8 pattes de sorties vers l’extérieur (8 diodes, par exemple). 2. Le mot (lu ou écrit) est pris dans le contrôleur d’entrées sorties (vu précédemment) ssi l’entrée A est telle que 58 x <= A <= 5B x (On a choisi que CNTRL = 58 x) c’est à dire ssi A7 A6 A5 A4 A3 A2 A1 A0 sont compris entre 0 1 0 1 1 0 0 0 et 01011011 Ceci couvre 00 les 4 monômes canoniques pour lesquels A7 =0, A6 =1, A5=0, A4 =1, A3 =1, A2=0. 5C 4 ///// Le boı̂tier physique de contrôleur, qui contient mots, reçoit deux types d’information - les 201 fils A1 A0 qui permettent d’adresser . . . un des 4 mots – UN 02 FIL de sélection selcntr qui vaut 1 ssi A7 =0, A6 =1, A5 =0, A4 =1, A3 =1, A2 =0. ///// On voit que selcntr=A7’.A6 .A5 ’.A4 .A5F 3 .A2 ’ On raisonne avec des adresses sur 8 bits. selrom selrom selrom L’adresse A est codé sur 8 bits A7,. . .,A0. ... 3. Le mot (lu ou écrit) est pris dans le boı̂tier mémoire vive ssi l’entrée A est telle que 80 x 60 de ///// <= A3E <= FF x c’est à dire ssi A7 A6 A5 A4 A3 A2 A1 A0 sont compris entre . . . 1 0 0 0 0 0 0 0 et 3F 40 ... 57 58 59 5A 5B selrom selrom ///// ///// selcntr selcntr selcntr selcntr Une sortie ENVOI si c’est un contrôleur de sortie. 7E 7F 80 81 ... FE FF 3 ///// ///// selram selram selram selram On représente les valeurs portées par ces 8 fils par deux chiffres hexadécimaux. On note valx une valeur représentée en hexa. On dira que l’entrée A vaut 67x pour dire que les 8 fils sont dans les états 0110 0111. hexadécimaux. On note val x une valeur représentée en hexa. On dira, pour simplifier, que l’entrée A ”vaut” 67 x pour dire que les 8 fils sont dans les états 0110 0111. L’ordinateur est organisé ainsi : (Voir figure 2 Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 13 Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 15 Introduction Contrôleur d’entrées-sorties Décodage d’adresses Sélecteur pour la ROM Décodage d’adresses Le mot (lu ou écrit) est pris dans le contrôleur d’entrées-sorties (vu précédemment) si et seulement si : Le boı̂tier physique de contrôleur, qui contient 4 mots, reçoit deux types Le boı̂tier physique de ROM, qui contient 64 mots reçoit deux types d’information : d’information : Introduction Contrôleur d’entrées-sorties Sélecteur pour le contrôleur d’entrées-sorties Un mot (lu ou écrit) est pris dans la mémoire morte (ROM) si et seulement si : Carrier, Devismes (Grenoble I) Introduction Organisation d’un ordinateur 9 janvier 2015 Contrôleur d’entrées-sorties 16 Décodage d’adresses Sélecteur pour la RAM Carrier, Devismes (Grenoble I) Organisation d’un ordinateur Introduction 9 janvier 2015 Contrôleur d’entrées-sorties 17 Décodage d’adresses Connexions processeur/contrôleur/mémoires/décodeur ROM E/S RAM 00 A0 A1 A2 A3 A4 A5 80 5B FF selrom 3F Le mot (lu ou écrit) est pris dans la mémoire vive (RAM) si et seulement si : 58 A0 A1 selcntr A0 A1 A2 A3 A4 A5 A6 selram A7 Le boı̂tier physique de RAM, qui contient 128 mots, reçoit deux types d’information : Bus de données Bus d'adresses A6 A5 A4 A3 A2 A1 A0 A0 A1 A2 A3 A4 A5 A6 A7 adresseinvalide Processeur R/-W Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 18 Carrier, Devismes (Grenoble I) Organisation d’un ordinateur 9 janvier 2015 19 Transistor Portes logiques Circuits combinatoires Conclusion Transistor Portes logiques Circuits combinatoires Conclusion Plan Transistor, Portes Logiques et Circuits Combinatoires Stéphane Devismes 9 janvier 2015 Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques Transistor 2 Portes logiques 3 Circuits combinatoires 4 Conclusion Fabienne Carrier Université Joseph Fourier, Grenoble I Devismes, Carrier (Grenoble I) 1 9 janvier 2015 Circuits combinatoires 1 Conclusion Définition Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires 2 Conclusion Type de transistors Il y a deux principaux types de transistors : Le transistor à jonctions (technologie dite bipolaire). Le transistor est le composant électronique actif fondamental en électronique utilisé principalement comme Dans cette famille, on trouve notamment les circuits RTL (Resistor Transistor Logic), TTL (Transistor Transistor Logic), DTL (Diode Transistor Logic) ou encore ECL (Emitter Coupled Logic). interrupteur commandé et pour l’amplification, mais aussi pour stabiliser une tension, moduler un signal Le transistor à effet de champ (technologie dite unipolaire). ainsi que de nombreuses autres utilisations. Dans cette famille, on trouve notamment les circuits MOS (Metal Oxyde Semiconductor) qui sont en général moins rapides, sauf les plus récents comme HMOS ou XMOS3. Remarque : Aujourd’hui, tous les processeurs sont en technologie MOSFET, ou des améliorations. Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 4 Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 5 Transistor Portes logiques Circuits combinatoires Conclusion Fonctionnement d’un transistor Transistor Portes logiques Circuits combinatoires Conclusion Définition Un transistor fonctionne comme un interrupteur (ici, un transistor à jonction NPN). La forme la plus élémentaire de circuit est la porte logique. Son comportement est dit binaire car il est caractérisé par deux états : l’état 0, qui représente la valeur logique faux et l’état 1, qui représente la valeur logique vrai. Les constructeurs utilisent dans certains cas une logique dite positive : l’état 1 correspond à une tension comprise entre 2 et 5 volts (niveau haut) et l’état 0 à une tension comprise entre 0 et 1 volt (niveau bas). Dans d’autres cas, ils utilisent une logique dite négative où l’état 1 correspond au niveau bas, tandis que l’état 0 correspond au niveau haut. Si la tension d’entrée Ve est inférieure à une valeur critique, le transistor se bloque et n’est pas conducteur ; l’interrupteur est ouvert et la tension de sortie Vs est proche de Vcc , donc à un niveau haut. Si la tension d’entrée Ve est supérieure à la valeur critique, le transistor bascule, ce qui le rend conducteur ; l’interrupteur est fermé et la tension de sortie est au niveau bas, proche de la masse. La résistance R est conçue pour limiter le courant à travers le transistor, dans ce dernier cas. Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires Remarque : La transmission n’est pas instantanée : le délai de traversée d’une porte correspond au temps de propagation des signaux de l’entrée vers la sortie (de l’ordre de quelques dixième nanosecondes pour la porte la plus simple). 6 Conclusion Porte NON Devismes, Carrier (Grenoble I) Transistor 9 janvier 2015 Circuits combinatoires 8 Conclusion Porte NON-ET La porte logique la plus simple est celle qui réalise une inversion logique. Elle est symbolisée par : La porte logique du NON-ET : Elle est construite avec un seul transistor : Table de vérité V1 0 0 1 1 Table de vérité Ve 0 1 Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires Portes logiques Transistor, Portes Logiques et Circuits Combinatoires Vs 1 0 9 janvier 2015 9 Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires V2 0 1 0 1 Vs 1 1 1 0 9 janvier 2015 10 Transistor Portes logiques Circuits combinatoires Conclusion Porte NON-OU Transistor Portes logiques Circuits combinatoires Conclusion Fonctions booléennes La porte logique du NON-OU : Avec les trois portes NON, NON-ET et NON-OU ont obtient une logique complète : toute fonction booléenne peut être décrite avec ces opérateurs ! Table de vérité V1 0 0 1 1 Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques V2 0 1 0 1 Exemple : Pour obtenir un OU il suffit de relier un NON-OU et un NON. Vs 1 0 0 0 9 janvier 2015 Circuits combinatoires 11 Conclusion Autres symboles Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires 12 Conclusion Principes des circuits intégrés Un circuit intégré est une plaquette de silicium sur laquelle sont intégrées les portes du circuit. La plaquette est encapsulée dans un boı̂tier avec sur les côtés des broches permettant les connexions électriques. Ces circuits sont classés suivant la densité d’intégration, c’est-à-dire le nombre de portes ou transistors par circuits (ou par mm2 ) : SSI Small Scale Integration 1 à 10 portes par circuit MSI Medium Scale Integration 10 à 100 LSI Large Scale Integration 100 à 100 000 VLSI Very Large Scale Integration plus de 100 000 F IGURE: Un circuit SSI dans un boı̂tier à 14 broches : circuit TTL 7400 de Texas Instruments. Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 13 Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 14 Transistor Portes logiques Circuits combinatoires Conclusion Définition Transistor Portes logiques Circuits combinatoires Conclusion Circuit FPGA Ce sont des réseaux logiques programmables (Field Programmable Logic Array ou Field Programmable Gate Array) qui permettent de réaliser des fonctions lorsqu’elles sont sous la forme d’une somme de produits. Considérons par exemple 20 broches dont 12 correspondent à des entrées et 6 à des sorties. Les 12 entrées sont inversées, ce qui fournit 24 variables internes. Ces 24 variables sont toutes connectées à 50 portes ET, ce qui donne 1 200 fusibles, au départ intacts. Un circuit combinatoire est un circuit comportant des entrées et des sorties booléennes et dont les sorties sont une expression logique des valeurs d’entrées. Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires Programmer le circuit consiste alors à détruire certains fusibles pour obtenir les produits de la fonction à programmer. Les 6 sorties proviennent de 6 portes OU qui reçoivent chacune les sorties des 50 portes ET. On obtient ainsi 300 fusibles dont certains sont détruits pour obtenir la somme des termes de la fonction. 16 Conclusion Multiplexeur Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires 17 Conclusion Décodeur Un multiplexeur comporte 2n entrées, 1 sortie et n lignes de sélection. La configuration des n lignes de sélection fournit une valeur parmi les 2n entrées et connecte cette entrée à la sortie. Un décodeur comprend n entrées et 2n sorties, la sortie activée correspondant à la configuration binaire du mot formé par les n entrées. Un tel circuit sert à sélectionner des adresses de la mémoire. Sélecteur 0 Sortie 1 Exemple : n = 1 Devismes, Carrier (Grenoble I) Devismes, Carrier (Grenoble I) Exemple : Un décodeur 3 vers 8 (n = 3). Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 18 Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 19 Transistor Portes logiques Circuits combinatoires Conclusion Comparateur Transistor Portes logiques Circuits combinatoires Conclusion Décaleur Un décaleur est formé de (n + 1) entrées D1 , ..., Dn , C et de n sorties S1 , ..., Sn et opère un décalage de 1 bit sur les entrées D1 , ..., Dn . Si C = 1, il s’agit d’un décalage à droite et si C = 0, d’un décalage à gauche. Un comparateur à 2 × n entrées et 1 sortie, les 2 × n entrées formant deux mots de n bits : A et B. La sortie vaut 1 si le mot A = B, 0 sinon. Exemple : n = 2 Exemple : n = 3 Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires 20 Conclusion Demi-additionneur B 0 1 0 1 Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires 21 Conclusion Additionneur Un additionneur additionne deux bits (A et B) et une retenue (Re ) et évalue la retenue éventuelle (Rs ). Un demi-additionneur additionne deux bits (A et B) et évalue la retenue éventuelle (R ). A 0 0 1 1 Devismes, Carrier (Grenoble I) S = A+B 0 1 1 0 A 0 0 0 0 1 1 1 1 R 0 0 0 1 Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 22 B 0 0 1 1 0 0 1 1 Re 0 1 0 1 0 1 0 1 Devismes, Carrier (Grenoble I) S = A+B 0 1 1 0 1 0 0 1 Rs 0 0 0 1 0 1 1 1 Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 23 Transistor Portes logiques Circuits combinatoires Conclusion Du demi-additionneur à l’additionneur Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques Transistor Portes logiques Circuits combinatoires Conclusion Addition de mots (sur 4 bits) 9 janvier 2015 Circuits combinatoires 24 Conclusion UAL Devismes, Carrier (Grenoble I) Transistor Transistor, Portes Logiques et Circuits Combinatoires Portes logiques 9 janvier 2015 Circuits combinatoires 25 Conclusion Conclusion Avec des transistors on fait des portes logiques Avec des portes logiques on fait des circuits combinatoires Avec des circuits combinatoires on fait des UALs, des unités de commandes. . . Mais pour faire un processeur, il faut aussi faire des registres Il faut aussi pouvoir faire de la mémoire Solution : circuit séquentiel, mais c’est une autre histoire . . . Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 26 Devismes, Carrier (Grenoble I) Transistor, Portes Logiques et Circuits Combinatoires 9 janvier 2015 28