Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parHamza ABMICO Modifié depuis plus de 6 années
1
Représentation interne de l’information Architecture de base d’un ordinateur 1
2
1.Introduction Information Instructions Données Caractère Numérique Entiers Réels Non signés Signés Assembleur 2 Introduction Les systèmes de numération et le changements de bases Codage des nombres entiers Codage des caractères Codage des nombres réels (norme IEEE)
3
1.Introduction Différents types d’information: Nombres, instructions, image, texte... Et Même représentation dans la machine: forme binaire Information élémentaire chiffre binaire (0 ou 1), appelé bit Chiffre binaire, binary digit Information complexe un ensemble de bit (caractère, nombre, les instructions...) Le codage de l’information = établir une correspondance entre la représentation externe (le caractère A, le chiffre 36) et la représentation interne (une suite de bit) 3
4
Pourquoi le binaire? Que des avantages ! D’abords, les opérations fondamentales deviennent simples (0 ✕ 0=0 1 ✕ 0=0 1 ✕ 1=1) que avec 10 chiffres. Facilement accepté par l’ordinateur : présence ou absence du courant, Représentation facile par les systèmes bistables. (ex: une bascule) Deux valeurs de tensions: Tension entre 0 et 1 V (bloquant) Tension entre 2 et 5 V (passant) Deux symbole 0 et 1 Choix arbitraire: possible d’utiliser φ et ψ Systèmes bistables = systèmes à deux états stables, ex Interrupteur (ON/OFF), Stylo à bille(pointe rentrée/ pointe sortie) 4
5
5
6
Représentation des nombres (1) Attention Bien faire la différence entre un nombre (par exemple dix) et sa (ses) représentations : 10 (décimal), 1010 (binaire), A (hexadécimal) Pour représenter un entier, on choisit une base. Les plus connues: 10 (décimal), la plus connue pour l’homme, 2 (binaire), pour l’ordi, 16 (hexadécimal), représentation plus compacte que le binaire. 1 (unaire), quand on compte sur ses doigts Plus rares... 12 (duodécimal) utilisé par les Egyptiens pour le compte en heures/mois, 6
7
Représentation des nombres (2) Après le choix de la base, le choix des symboles Les “chiffres arabes” utilisés pour le système décimal se composent de 10 symboles : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Pour les bases 2 a 9 on utilise (une partie de) ces symboles ex : en binaire 0 et 1 Pour une base 11 ou plus il faut compléter : ex : en hexa, on utilise les chiffres et A B C D E F Comment ça marche? les entiers positifs En base b (≥ 2) on note (n t...n 1 n 0 ) b le nombre n qui vaut (en décimal) n = n t × b t +... + n 1 × b 1 + n 0 × b 0 Les nombres fractionaires En base b (≥ 2) on note (n t...n 1 n 0, n -1 n -2… n -p ) b le nombre n qui vaut (en décimal) n = n t × b t +... + n 1 × b 1 + n 0 × b 0 +n -1 × b -1 +... + n -p × b -p Cette représentation est unique, Exemple : 1101 2 = 13 10 Qu’est ce qu’on sait représenter? les entiers positifs, la partie entière et la partie fractionnaire d’un réel Qu’est ce qui manque? 1. la virgule 005 / 002 =? ? ? 2. le signe des entiers négatives 003 - 005 =? ? ? 7
8
Le problème principale: la Précision finie Pas très commode en calcul et c’est le problème principale: Stockage en mémoire ⇒ taille limitée pour chaque donnée. (Taille de codage) 1. En décimal : trois chiffres On peut représenter les nombres de 000 à 999 mais pas : les nombres plus grands que 999 588 + 657 =? ? ? 2. En binaire : k bits (un entier sur k bits sa valeur décimale entre 0 et 2 k -1) On peut donc l’écrire dans un registre de taille k (case mémoire de k positions) C’est le constructeur qui fixe la longueur des registres (i.e le plus grand nombre représentable en machine) Des nombres qui dépassent le maximum peuvent être représentés sur plusieurs mots Ex: 2 mot = double précision = toujours taille limité = au niveau des opérations arithmétiques problème de dépassement de capacité (de précision) Dépassement de capacité = indicateur de dépassement est mis à 1 (un case mémoire d’un bit) selon les machines, les calcules continus ou signale une erreur 8
9
Le codage est sur un nombre fixé de bits. Habituellement, le codage est sur 1, 2 ou 4 octets (pus rarement 8 octets, par exemple les processeurs DEC Alpha, appelé aussi Alpha AXP). 9
10
Entiers relatifs Entiers positifs ou nuls: Pour le Codage sur n bits, on utilise n-1 bits pour représenter le nombre en base 2. Le bit restant: Le bit de poid fort est toujours à zéro pour les positifs. But pour les négatifs: On cherche un code représentant le nombre –3 qui évitera à l’ordinateur de réfléchir: Effectuer les opérations usuelles d’une manière naturelle i.e effectuer les calculs 6+3 ou 6+(-3) sans réfléchir Sans perdre du temps c-à-d toujours de la même manière: ne faire que des additions Pas besoin alors de 2 composants On va parler de deux codages: la représentation en complément à 1, la représentation en compléments à 2.
11
Représentation en complément à un (1) Définition: Complément à un On appel complément à un d’un nombre N un autre nombre N’ tel que : N+N’=2 n -1 n : est le nombre de bits de la représentation du nombre N. Exemple : Soit N=1010 sur 4 bits donc le complément à un de N : N’= (2 4 - 1)-N N’=(16-1 )-(1010) 2 = (15 ) - (1010) 2 = (1111) 2 – (1010) 2 = 0101 Remarque 1: Pour trouver le complément à un d’un nombre, il suffit d’inverser tous les bits de ce nombre : si le bit est un 0 mettre à sa place un 1 et si c’est un 1 mettre à sa place un 0. Le complément à un du complément à un d’un nombre est égale au nombre lui même. CA 1 (CA 1 (N))= N 1 0 0 1 + 1 1
12
Définition: La représentation en complément à un Dans la représentation en complément à 1, le bit du poids fort nous indique le signe ( 0 : positif, 1 : négatif ). Les autres bits représente le complément à un de la valeur absolue pour les négatifs et la valeur absolue en binaire pour les positifs. Exemple Quelle est la valeur décimale représentée par la valeur 101010 en complément à 1 sur 6 bits ? Le bit poids fort indique qu'il s'agit d'un nombre négatif. On a CA 1 (CA 1 (N))= N Alors Valeur = - CA 1 (101010) = - (010101) 2 = - ( 21) 10 Représentation en complément à un (2) 12
13
Valeur décimal Valeur en binaire Valeur en CA1 + 0 + 1 + 2 + 3 000 001 010 011 000 001 010 011 - 3 - 2 - 1 - 0 - 011 - 010 - 001 - 000 100 101 110 111 On remarque que dans cette représentation le zéro possède une double représentation ( +0 et – 0 ). Si on travail sur 3 bits : Dans cette représentation, le bit du poids fort nous indique le signe. Point négatif 13 Représentation en complément à un (3)
14
Sur 3 bits on remarque que les valeurs sont comprises entre -3 et +3 -3 ≤ N ≤ +3 - ( 4-1 ) ≤ N ≤ + (4 -1 ) -(2 2 -1) ≤ N ≤ +(2 2 -1 ) -(2 (3 -1) -1) ≤ N ≤ +(2 (3 -1) -1 ) Si on travail sur n bits, l’intervalle des valeurs qu’on peut représenter en CA 1 : -(2 (n -1) -1) ≤ N ≤ +(2 (n -1) -1 ) 14 Représentation en complément à un (4)
15
Représentation en complément à deux (1) Remarque 1: Si on suppose que a est un nombre sur n bits alors : a + 2 n = a modulo 2 n et si on prend le résultat sur n bits on va obtenir la même valeur que a. a + 2 n = a Exemple : soit a = 1001 sur 4 bits 2 4 = 10000 1 0 0 1 1 0 0 0 0 + 1 1 0 0 1 Si on considère (on stocke) le résultat sur 4 bits on trouve la même valeur de a = 1001 15
16
Remarque 2: Si on prend deux nombres entiers a et b sur n bits, on remarque que la soustraction peut être ramener à une addition : a – b = a + (-b) Pour cela il suffit de trouver une valeur équivalente à -b ? a – b = a + 2 n – b = a + (2 n – 1) – b + 1 = a + CA1(b) + 1 La valeur CA1(b)+1 s’appelle le complément à deux de b : CA1(b)+1 = CA2(b) Et enfin on va obtenir : a - b = a+ CA2(b) transformer la soustraction en une addition. 16 Représentation en complément à deux (2)
17
Exemple Trouver le complément à 2 de : 01000101 sur 8 bits ? CA2(01000101)= CA1(01000101)+ 1 CA1(01000101)= (10111010) CA2(01000101)=(10111010)+ 1 = (10111011) Remarque 3 : Le complément à deux du complément à deux d’un nombre est égale au Nombre lui même: CA2(CA2(N))= N Pour trouver le compétemment à 2 d’un nombre : il faut parcourir les bits de ce nombre à partir du poids faible et garder tous les bits avant le premier 1 et inverser les autres bits qui viennent après. 0 1 0 0 0 1 0 1 1 0 1 1 1 1 0 1 0 1 0 0 0 0 1 0 1 1 0 0 17 Représentation en complément à deux (3)
18
Définition: La représentation en complément à deux Dans la représentation en complément à 2, le bit du poids fort nous indique le signe ( 0 : positif, 1 : négatif ). Les autres bits représente le complément à u2 de la valeur absolue pour les négatifs et la valeur absolue en binaire pour les positifs.. Exemple : Quelle est la valeur décimale représentée par la valeur 101010 en complément à deux sur 6 bits ? Le bit poids fort indique qu'il s'agit d'un nombre négatif. On a CA2(CA2(N))= N Alors Valeur = - CA2(101010) = - (010101 + 1) = - (010110) 2 = - ( 22) Représentation en complément à deux (4) 18
19
valeurValeur en binaire Valeur en CA2 + 0 + 1 + 2 + 3 000 001 010 011 000 001 010 011 - 4 - 3 - 2 - 1 - 100 - 011 - 010 - 001 100 101 110 111 Si on travail sur 3 bits : Dans cette représentation, le bit du poids fort nous indique le signe. On remarque que le zéro n’a pas une double représentation. 19 Représentation en complément à deux (5)
20
Sur 3 bits on remarque que les valeurs sont comprises entre -4 et +3 -4 ≤ N ≤ +3 - 4 ≤ N ≤ + (4 -1 ) - 2 2 ≤ N ≤ +(2 2 -1 ) -2 (3 -1) ≤ N ≤ (2 (3 -1) -1 ) Si on travail sur n bits, l’intervalle des valeurs qu’on peut représenter en CA2 : -(2 (n -1) ) ≤ N ≤ +(2 (n -1) -1 ) La représentation en complément à deux ( complément à vrai ) est la représentation la plus utilisée pour la représentation des nombres relatifs dans la machine. 20 Représentation en complément à deux (6)
21
Opérations arithmétiques en CA2 + 9 + 4 + 13 0 1 0 0 1 0 0 1 0 0 + 0 1 1 0 1 Effectuer les opérations suivantes sur 5 Bits, en utilisant la représentation en CA2 Le résultat est positif (01101) 2 = ( 13) 10 Un report: le bit de poids fort qu’il suffit d’ignorer. Le résultat est positif (00101) 2 = ( 5) 10 + 9 - 4 + 5 0 1 0 0 1 1 1 1 0 0 + 1 0 0 1 0 1 Report 21
22
- 9 - 4 - 13 1 0 1 1 1 1 1 1 0 0 + 1 1 0 0 1 1 - 9 + 9 + 0 1 0 1 1 1 0 1 0 0 1 + 1 0 0 0 0 0 Le résultat est négatif : Résultat = - CA2 (10011)= -( 01101) = - 13 Le résultat est positif (00000) 2 = ( 0) 10 Report 22 Opérations arithmétiques en CA2
23
La retenue et le débordement On dit qu’il y a une retenue si une opération arithmétique génère un report (il suffit alors d’ignorer ce le bit de report). On dit qu’il y a un débordement (Over Flow ) ou dépassement de capacité: si le résultat de l’opération sur n bits et faux. Le nombre de bits utilisés est insuffisant pour contenir le résultat Autrement dit le résultat dépasse l’intervalle des valeurs sur les n bits utilisés. 23
24
Opérations arithmétiques en CA2 Cas de débordement + 9 + 8 + 17 0 1 0 0 1 0 1 0 0 0 + 1 0 0 0 1 - 9 - 8 - 17 1 0 1 1 1 1 1 0 0 0 + 0 1 0 1 1 Le débordement est détecté si: la somme de deux nombres positifs donne un nombre négatif. Ou la somme de deux nombres négatifs donne un Nombre positif. Identiquement équivalent à la retenue entrante sur le bit de poids fort est différente de la retenue sortante. 1 Négatif Positif 1 0 0 24
25
Extension de signe en arithmétique signée Entier signé sur n bits → entier signé sur n + k bits. Méthode On rajoute des bits à gauche de la même valeur que le bit de signe. 5 10 = (sur 4 bits) = (sur 8 bits) −4 = (sur 4 bits) = (sur 8 bits) Permet de coder un nombre avec plus de bits 25
26
La représentation des nombres réels Un nombre réel est constitué de deux parties : la partie entière et la partie fractionnelle ( les deux parties sont séparées par une virgule ) Problème : comment indiquer à la machine la position de la virgule ? Il existe deux méthodes pour représenter les nombre réel : Virgule fixe : la position de la virgule est fixe Virgule flottante : la position de la virgule change ( dynamique ) 26
27
La virgule fixe Dans cette représentation la partie entière est représentée sur n bits et la partie fractionnelle sur p bits, en plus un bit est utilisé pour le signe. Exemple : si n=3 et p=2 on va avoir les valeurs suivantes valeurP.FP.ESigne + 0,0 + 0,25 + 0,5 + 0,75 + 1,0. 00 01 10 11.00. 000 001. 00000..00000.. Dans cette représentation les valeurs sont limitées et nous n’avons pas une grande précision Solution « naïve », pourquoi? On pense alors à une représentation plus souple. Virgule fixe encore utilisée des fois pour des raisons de rapidité: opérations entières 27
28
Représentation en virgule flottante (1) Elle s’est imposée depuis le début des années 60. Chaque nombre réel peut s’écrire de la façon suivante : N= ± M * b e M : mantisse, b : la base, e : l’exposant Exemple : (15,6) 10 = 0,156 * 10 +2 - ( 110,101) 2 = - (0,110101) 2 * 2 +3 (0,00101) 2 = ( 0,101) 2 * 2 -2 Remarque : on dit que la mantisse est normalisée si le premier chiffre avant la virgule est toujours différent de 0. En binaire, ce chiffre est toujours égale à 1, donc pas besoin de le stocker dans la mantisse. Plutôt de gaspiller ce bit, on préfère le conserver pour augmenter la précision. D’ou le nom mantisse: en math, c’est la partie située après la virgule. 28
29
1 bit p bits k bits Signe mantisseExposantMantisse normalisée Représentation en virgule flottante (2) La représentation en virgule flottante sur n bits est définie par La mantisse est sous la forme signe/valeur absolue 1 bit pour le signe et k bits pour la valeur. L’exposant ( positif ou négatif ) est représenté sur p bits : Pour la représentation de l’exposant, on utilise : Le complément à deux (arithmétique signé) Exposant décalé ou biaisé (arithmétique non signé) 29
30
Représentation de l’exposant en complément à deux (1) On veut représenter les nombres ( 0,015) 8 et -( 15, 01) 8 en virgule flottante sur une machine ayant le format suivant : Signe mantisseExposant en CA2Mantisse normalisée 1 bit 4 bits 8 bits (0,015) 8= (0,000001101) 2 = 1,101 * 2 -6 Signe mantisse : positif ( 0) Mantisse normalisé : 1,101 Exposant = -6 utiliser le complément à deux pour représenter le -6 Sur 4 bits CA2(0110)=1010 0 1 0 1 01 0 1 0 0 0 0 0 1 bit 4 bits 8 bits 30
31
- (15,01) 8 = - (001101,000001) 2 = - 1,101000001 * 2 3 Signe mantisse : négatif ( 1) Mantisse normalisée : 1,101000001 Exposant = 3, en complément à deux sa valeur est ( 0011) 1 0 0 1 11 0 1 0 0 0 0 0 1 bit 4 bits 8 bits Remarque : si la mantisse est sur k bits et si elle est représenté sur la machine sur k’ bits tel que k> k’, alors la mantisse sera tronquée : on va prendre uniquement k’ bits perdre dans la précision. On remarque que la mantisse est sur 9 bits (101 0000 01), et sur la machine seulement 8 bits sont utilisés pour la mantisse. Dans ce cas on va prendre les 8 premiers bits de la mantisse 31 Représentation de l’exposant en complément à deux (2)
32
Représentation virgule flottante avec l’ Exposant décalé ( biaisé ) L’exposant est placé avant la mantisse pour simplifier la comparaison des nombres en virgule flottante. (c’est l’idéal) En complément à 2, l’exposant de 2 -1 est (111...1) alors que l’exposant de 2 est (00..01). Donc si on compare les exposants 2 -1 serait supérieur à 2. (oups) Pour stocker le nombre on utilise l’exposant biaisé: en complément à 2, l’intervalle des valeurs qu’on peut représenter sur p bits : - 2 (p -1) ≤ N ≤ 2 (p -1) -1 Si on rajoute la valeur 2 (p -1) à tout les termes de cette inégalité : - 2 (p -1) + 2 (p -1) ≤ N + 2 (p -1) ≤ 2 (p -1) - 1 + 2 (p -1) 0 ≤ N + 2 (p -1) ≤ 2 p - 1 On pose N’= N + 2 (p -1) donc : 0 ≤ N’ ≤ 2 p -1 Dans ce cas on obtient des valeur positives. La valeur 2 (p -1) s’appelle le biais ou le décalage 32
33
Avec l’exposant biaisé on a transformé les exposants négatifs à des exposants positifs en rajoutons à l’exposant la valeur 2 p -1. Exposant Biaisé = Exposant réel + décalage Evite de faire intervenir le signe de l’exposant et facilite alors la comparaison 33 Représentation virgule flottante avec l’ Exposant décalé ( biaisé )
34
Exemple On veut représenter les nombres ( 0,015) 8 et -( 15, 01) 8 en virgule flottante sur une machine ayant le format suivant : Signe mantisseExposant décaléMantisse normalisée 1 bit 4 bits 11 bits (0,015) 8 =(0,000001101) 2 = 1,101 * 2 -6 Signe mantisse : positif ( 0) Mantisse normalisé : 1,101 Exposant réel = -6 Calculer le biais : b= 2 4-1 = 8 Exposant Biaisé = -6 + 8 = +2 = ( 0010) 2 0 00101 0 1 0 0 0 0 0 0 0 0 1 bit 4 bits 11 bits 34
35
- (15,01) 8 =(001101,000001) 2 = 1,101000001 * 2 3 Signe mantisse : négatif ( 1) Mantisse normalisée : 1,101000001 Exposant réel = + 3 Calculer le biais : b= 2 4-1 = 8 Exposant Biaisé = 3 + 8 = +11 = ( 1011) 2 1 10111 0 1 0 0 0 0 0 1 0 0 1 bit 4 bits 11 bits 35
36
Opérations arithmétiques en virgule flottante Pour l’addition et la soustraction, il faut que les exposants aient la même valeur il faut: 1. Dénormaliser 2. Additionner ou soustraire les mantisses 3. Normaliser Pour la multiplication (resp la division), on additionne (resp soustrait) les exposants et on multiplie (resp divise) les mantisses. 1. Addition des exposants 2. Multiplication des mantisses 3. Normalisation du résultat 36
37
Exercice Donner la représentation des deux nombres N1= (-0,014) 8 et N2=(0,14) 8 sur la machine suivante : Signe mantisse Exposant biaisé (décalé) Mantisse normalisée Calculer N2-N1 ?. 1 bit 5 bits 10 bits 37
38
Avant de représenter les deux nombres on doit calculer le biais (décalage) B = 2 5-1 = 2 4 = 16 N1 = (-0,014) 8 = (-0,000001100) 2 = (-1,100) 2. 2 - 6 ExpB= -6 + 16 = 10 = (1010) 2 N2 = (0,14) 8 = (0,001100) 2 = (1,100) 2. 2 -3 ExpB = -3 + 16 = 13 = (01101) 2 Donc on va avoir la représentation suivante pour N1 et N2: 1010101000000000 0011011000000000 N1 N2 1 001 0110 0000 0000 ( 9600) 16 0011 01 10 0000 0000 (3600) 16 38
39
N2 - N1 = 0,14 – (-0,014) = 0,14 + 0,014 N2 - N1 = (0,1100) 2. 2 -2 +(0,1100) 2. 2 -5 = (0,1100) 2. 2 -2 +(0,0001100) 2. 2 -2 = (0,1101100) 2. 2 -2 Si on fait les calculs avec l’exposant biaisé : N2 - N1 = (0,1100) 2. 2 14 + (0,1100) 2. 2 11 = (0,1100) 2. 2 14 + (0,0001100) 2. 2 14 = (0,1101100) 2. 2 14 Exposant biaisé = 14 Exposant réel = Exposant biaisé – Biais Exposant réel = 14 – 16 = -2 Donc on trouve le même résultat que la première opération. 39
40
Codage des caractères Les caractères englobent : les lettres alphabétiques ( A, a, B, B,.. ), les chiffres, et les autres symboles ( >, ; / : …. ). Le codage le plus utilisé est le ASCII (American Standard Code for Information Interchange) Dans ce codage chaque caractère est représenté sur 8 bits. Avec 8 bits on peut avoir 2 8 = 256 combinaisons Chaque combinaison représente un caractère Exemple : Le code 65 (01000001) 2 correspond au caractère A Le code 97 (01100001) correspond au caractère a Le code 58 (00111010 )correspond au caractère : Actuellement il existe un autre code sur 16 bits, se code s’appel UNICODE. 40
41
41
42
Les instructions Écrites en langage machine ( ceci sera abordé dans le dernier chapitre ) Représentent les opérations effectués par un ordinateur (addition, accès à la mémoire: lecture et écriture,...) Composées de: Code de l’opération à effectuer (appelé opcode) Les opérandes impliqués dans l’opération Différents format en code machine ( dépend du langage assembleur utilisé ) Exemple: ajouter les registres 1 et 2 et placer le résultat dans le registre 6 shamt indique un décalage (shift amount) fonct pour déterminer la nature exacte de l'opération [ op | rs | rt | rd | shamt | fonct ] 0 1 2 6 0 32 décimal 000000 00001 00010 00110 00000 100000 binaire Regitre: une case mémoire de plusieurs bits dans un microprocesseur (voir assembleur) 42
43
Rappel: Nombre fractionnaire en base 2 Nombre fractionnaire en binaire La partie entière est convertie séparément La partie fractionnaire est multipliée par 2 (en binaire) On isole à chaque étape la partie entière puis on multiplie la partie fractionnaire par 2. On arrête la conversion : Soit quand la résultat est nul Soit quand le nombre de chiffres désiré est atteint Passage binaire au décimal (nombre fractionnaire) On applique la règle : (A) 10 = Σ ai.Bi Le chiffres après la virgule ont des poids de puissance négative 43
44
Exemple Trouvez l’équivalent de 35,57 en binaire avec 4 bits après la virgule Étapes Partie entière : (35) 10 = (100011) 2 Partie fractionnaire : 0,57 ×2 = 1,14 a -1 = 1 0,14 ×2 = 0,28 a -2 = 0 0,28 ×2 = 0,56 a -3 = 0 0,56 ×2 = 1,12 a -4 = 1 Arrêt D’où : (35,57) 10 = (100011,1001) 2 Trouvez l’équivalent de (A) 2 =1101,011 en décimal Solution (A) 10 = 1.2 3 + 1.2 2 + 0.2 1 + 1.2 0 + 0.2 -1 + 1.2 -2 + 1.2 -3 (A) 10 = 13,375 44
45
Architecture de base d’un ordinateur l’architecture est l’étude et la description du fonctionnement des composants internes d’un ordinateur. Elle traite : – le type des informations manipulées et de leur codage, – le dialogue entre composants, – le fonctionnement logique (pas électronique) interne des composants. 45
46
Le processeur Le processeur est un circuit électronique complexe qui exécute chaque instruction très rapidement, en quelques cycles d'horloges. Toute l'activité de l'ordinateur est cadencée par une horloge unique, de façon à ce que tous les circuits électroniques travaillent ensembles. La fréquence (combien de changement par seconde) de cette horloge s'exprime en MHz (millions de battements par seconde). Par exemple, un ordinateur ``PC Pentium 133'' possède un processeur de type Pentium et une horloge à 133 MHz. Le processeur est divisé en deux parties, l'unité de commande et l'unité de traitement : l'unité de commande est responsable de la lecture en mémoire et du décodage des instructions; l'unité de traitement, aussi appelée Unité Arithmétique et Logique (U.A.L.), exécute les instructions qui manipulent les données. 46
47
Le schéma général d’un ordinateur La plupart des ordinateurs ont l’organisation suivante: 47
48
La mémoire est un composant central; c’est un tableau de mots binaire de taille fixe. Chaque mot est repéré par un nombre appelé adresse, et les programmes feront référence aux données et aux instructions en mémoire par leurs adresses. Le programme exécuté est dans la mémoire centrale: Une copie du programme est effectivement souvent stockée sur un CDROM ou un disque dur, mais ce n’est pas avant d’avoir été copié en mémoire centrale. Un programme qu’exécute un ordinateur est composé d’instructions sous forme de mots mémoire. Le langage utilisé pour coder les instructions en mots binaires est appelé langage machine, c’est le seul que comprenne le processeur. La taille des instructions varie beaucoup selon le type des processeurs. Parfois toutes les instructions ont la même taille, égale à un ou plusieurs mots mémoire ; parfois elles ont des tailles variables selon la complexité de l’instruction. Le processeur a besoin de garder la trace d’un certain nombre d’informations pendant l’exécution des instructions. Il utilise pour cela des registres, qui sont des mots mémoire fixes, à accès très rapide. 48
49
Les bus Les données circulent entre les différents sous-systèmes d’un ordinateur sur des bus, sorte d’autoroute, des circuits spécialisés jouent le rôle d’échangeurs aux carrefour. 49
50
La carte mère 50
51
Exemple d’évolution des processeurs: Intel 51
52
Les Langages L’activité d’une machine est rythmée par le CPU qui exécute le cycle suivant : chercher une instruction en mémoire (RAM), l’exécuter, chercher l’instruction suivante en mémoire, etc. Une instruction est une suite de bits contenant le code de l’opération (addition, soustraction, recherche d’un mot en mémoire, etc.) et ses opérandes (arguments de l’opération). Pour éviter d’avoir à connaître ce langage difficilement manipulable par l’homme, on définit des langages de plus haut niveau d’où une architecture en couches de machines virtuelles. 52
53
Les machines actuelles Interprétation : chaque instruction du langage L n est traduite en la séquence adéquate du langage L n-1 exécutable, donc, par la machine virtuelle M n-1. À chaque exécution il y a ré- interprétation. Compilation : un programme de la machine M n, en entier est traduit une fois pour toute en un programme en langage L n-1 exécutable directement par la machine virtuelle M n-1. 53
54
Les Rappels : Introduction à la logique des propositions et l’algèbre de Boole Portes et circuits logiques combinatoires But: Circuits Arithmétiques Addition Multiplication Division Unité Arithmétique et logique 54
55
Travailler avec les binaires Le Besoin de faire des opérations sur des données au niveau matèrial... Alors, l’Arithmétique binaire En architecture matériel = circuits logiques réalisant ces opérations Histoire George Boole a défini vers 1850 une algèbre qui s’applique à des fonctions logiques de variables logiques variables booléennes (deux valeurs : 1 (Vrai) et 0 (Faux)) Proposition (intéressante) Toute fonction logique peut être réalisée à l’aide d’un petit nombre de fonctions logiques de bases qu’on préfère représenter par des opérateurs logiques (ou portes logiques). 55
56
Théorèmes fondamentaux de l’algèbre de Boole Attention : dans l’algèbre de Boole 1 + 1 = 1 56
57
Formes normales Théorème Chaque fonction logique a une représentation sous forme normale conjonctive (resp. sous forme normale disjonctive) FND : grand OU de petits ET = Somme de produits FNC : grand ET de petits OU = Produit de sommes Pour mettre une formule sous forme de somme de produits : 1. on fait rentrer les non le plus au cœur de la formule, pour avoir uniquement des négations de variable (lois de Morgan). 2. on utilise la distributivité de + par rapport au produit Remarque : la formule obtenue à partir d’une table de vérité est une somme de produits (=forme normale disjonctive). Exemple: (a + (bc)) × b = a × bc × b = a × (b+c) ×b = ab + a b c = ab (c+c) + a b c = abc + abc + abc = abc + abc Ecrire cette fonction sous sa forme normale conjonctive 57
58
Fonctions booléennes (exemple) A toute fonction logique est associée une table de vérité. A une variable: 4 fonctions distinctes A deux variables: 16 fonctions distinctes ( 2 2 n ) Notation : ET(a,b), notée ab (multiplicativement). OU(a,b), notée a + b (additivement). NAND(a,b), notée ab. Complémentaire de ET. NOR(a,b), notée a + b. Complémentaire de OU. XOR(a,b), notée a ⊕ b. OU exclusif. af0f0 f1f1 f2f2 f3f3 00011 10101 f 0 : f 1 : f 2 : f 3 : f 0 : f 1 : f 2 : f 3 : f 4 : abf0f0 f1f1 f2f2 f3f3 f4f4 0000110 0101101 1001101 1111000 58
59
Combien de fonctions logiques ? Théorème Il existe 2 ^ 2 n fonctions logiques de n variables booléennes À toute fonction logique est associée une table de vérité. À toute table de vérité est associée une fonction logique. une table de vérité à n variables possède 2 n lignes. Pour chaque ligne la fonction peut prendre 2 valeurs. Il y a donc 2 ^ 2 n fonctions Beaucoup de fonctions logiques...... mais on peut tout représenter avec quelques fonctions (très peu de fonctions) (c’est ce qu’on va voir) Remarque : toutes les fonctions logiques (élémentaires) décrites plus tôt peuvent s’appliquer à n variables 59
60
Tout faire avec OU et NON Théorème Toute fonction logique est représentable à l’aide des fonctions OU et NON. Preuve : Toute fonction a une table de vérité, et donc : 1. la fonction est vraie si on est sur une des lignes où elle vaut un. 2. si on est sur la première ligne où f vaut 1 OU la deuxième où vaut 1 OU la troisième etc. 3. être sur une ligne c’est dire avoir des valeurs fixes pour les variables : par exemple, a vaut 1 ET b vaut 0 ET c vaut 0 → a b c (des mintermes) 4. cela nous donne une formule avec des OU, NON et ET 5. D’après le loi de Morgan, ET exprimable à partir de OU et NON Cas particulier : si toutes les lignes sont à 0 alors f = 0 = a + a Un exemple : a b f 0 0 1 0 1 1 f = a + b + a + b + a + b 1 0 0 1 1 1 60
61
Tout faire avec une seule porte On sait tout faire avec OU et NON. Il suffit de trouver une porte qui sait représenter les fonctions OU et NON Théorème L’opérateurs NAND ( resp. NOR) est complet (i.e. il permet de représenter à lui seul tous les opérateurs logiques). Preuve : NAND(a, a) = a = NON(a), D ’ après Morgan, ab = a + b d’où NAND(NAND(a, a),NAND(b, b)) = ab = a + b 61
62
Synthèse de circuit Proposition Toute fonction logique peut être réalisée à partir de portes logiques, en formant un circuit. Logique Circuit Fonctions logique Circuits logique Opérateurs logique Portes logique Variables (paramètres) Fils d’entrée Résultat (s) Fil (s) de sortie 62
63
Portes logiques de base NON ANDOR XOR NANDNOR Chaque porte logique est réalisée électroniquement par un ou deux transistors 63
64
64
65
Les transistors Le transistor est la brique de base avec laquelle sont construits les circuits électroniques tels les micro-processeurs. C’est un transmetteur qui, selon la commande, est passant ou non (interrupteur) Type n: Sortie = si (commande) alors entrée sinon Z Type p: Sortie = si (commande) alors Z sinon entrée Commande prend sa valeur dans {0,1} Entrée prend sa valeur dans {0,1} Sortie prend sa valeur dans {0,1,Z} La valeur de Z n’est ni 0, ni 1 (des résidus dans le matériels) commande sortie entrée commande sortie entrée 65
66
ABZ 001 011 101 110 Des Portes simples avec des Transistors AZ AZ V DD V SS V SS (0) V DD (1) 10 A B Z A B Z V DD V SS NON-ET 66
67
Plusieurs portes logiques forment des circuits logiques. Les circuits logiques combinatoire sont des circuits sans état interne. 67
68
Exemple de circuit Un fil porte une valeur binaire (0 ou 1) gros points = points de contact (soudure) Quelle est la fonction correspondante au circuit suivant? a b c Quel est la différence entre ces deux circuits? a b c a b c Plusieurs circuits pour la même fonction logique 68
69
De la table de vérité aux NAND Proposition On peut construire un circuit avec des portes NAND directement partir de la table de vérité. Comment ? Proposition OU de ET = NAND de NAND ab cd = ab + cd = ab + cd Théorème N’importe quelle fonction peut se représenter à l’aide d’au plus 3 étages de NAND. étage??? Pensez à une écriture différentes: ab + c = OU (ET(Non(a),b), Non (c)) Preuve : Table de vérité → un étage de NON, un étage de ET, un étage de OU OU de ET → NAND de NAND portes NON → portes NAND avec deux fois la même entrée On a bien trois étages de NAND. 69
70
Pourquoi des portes NAND Maintenant, vous vous demandez sûrement pourquoi ces informations sur la porte NAND. Après tout, pourquoi ne pas utiliser juste des portes logiques du type : Et, OU, NON ? Il existe deux raisons à cela : Les portes NAND sont généralement moins chères à construire, et donc à l’achat, que les autres portes logiques. (4 transistors NAND, 6 transistors and) Il est aussi plus facile de construire des circuits complexes à partir de circuits de même types que de les construire avec des circuits différents. Les comparaison entre les circuits deviennent facile avec les mêmes portes logiques Mais pour être complet, il faut dire que les mêmes raisons et la même démarche pourrait être faite à partir des portes NOR. La correspondance entre les portes NOR et NAND est orthogonale. Mais la culture électronicienne fait la part plus belle aux NAND qu’au NOR. 70
71
La synthèse d’un circuit - la méthode 1. La réalisation d’un circuit passe d’abord par la recherche des expressions booléennes (fonctions logiques), ensuite par leur simplification basée sur l’algèbre de Boole (exemple : les diagrammes de Karnaugh, (cf exemples TD). 1. Représenter l’expression booléennes à l’aide de portes (NAND par ex) Le circuit doit être le moins coûteux possible. Pour calculer le gain de simplification on note : le nombre de portes leur type leur nombre d’entrées et cela avant simplification et après simplification. Remarque : on ne compte pas en général les portes non. 71
72
Circuits complexes Pour fabriquer des circuits réalisant des fonctions complexes : on ne se contente pas d’assembler les portes logiques séparément, mais des circuits intégrés logiques (réutilisables): plusieurs portes représentées par une seule boîte (= un composant) muni de broches permettant d’assurer les connections électriques. Il existe deux Familles de circuits intégrés... selon la densité d’intégration,.. c’est à dire le nombre de portes par circuit : SSI (Small Scale Integration) 1 à 10 portes/circuit, MSI (Medium Scale Integration) 10 à 100 portes/circuit, LSI (Large Scale Integration) 100 à 100000 portes/circuit, VLSI (Very Large Scale Integration) plus de 100000 portes/circuit, entréessorties... 72
73
Les Circuits Arithmétiques réutilisables Addition Multiplication Division UAL 73
74
Demi Additionneur Le demi additionneur est un circuit combinatoire qui permet de réaliser la somme arithmétique de deux nombres A et B chacun sur un bit. A la sotie on va avoir la somme S et la retenu R ( Carry). HA (half-adder) XyXy SRSR Pour trouver la structure ( le schéma ) de ce circuit on doit en premier dresser sa table de vérité 74
75
En binaire l’addition sur un seul bit se fait de la manière suivante: xyRS 0000 0101 1001 1110 La table de vérité associée : De la table de vérité on trouve : 75
76
76 Deux réalisations possibles du half-adder
77
L’additionneur 4 bits En considérant la retenue du rang précédent. En binaire lorsque on fait une addition il faut tenir en compte de la retenue entrante. r4r4 r3r3 r2r2 r1r1 r 0 = 0 + x4x4 x3x3 x2x2 x1x1 y4y4 y3y3 y2y2 y1y1 r4r4 s4s4 s3s3 s2s2 s1s1 r i-1 xixi + yiyi r i sisi 77
78
Additionneur complet 1 bit L’additionneur complet un bit possède 3 entrées : xi : le premier nombre sur un bit. yi : le deuxième nombre sur un bit. ri-1 (ou re): le retenue entrante sur un bit. Il possède deux sorties : Si : la somme Ri (ou rs): la retenue sortante Additionneur complet a i b i r i-1 SiRiSiRi 78
79
Schéma d’un additionneur complet 79 la somme s vaut un si entre les bits x, y et la retenue d’entrée re le nombre de bits à un est impair ; la retenue de sortie rs vaut un si les bits x et y valent un, ou si l’un ou l’autre de ces bits vaut un alors que la retenue d’entrée re vaut un. De la même manière est réaliser la soustraction, la multiplication mais le dilemme est de faire le bon compromis entre rapidité et coût (cf TD additionneur).
80
Additionneur 4 bits 80 L’additionneur 4 bits se réalise à l’aide d’additionneurs Complets mis bout à bout.
81
Remarques 1. On suppose dans les circuits combinatoires que la vitesse de propagation est instantanée ce qui n’est pas le cas : on a une propagation temporelle de la retenue, les bits de poids forts sont additionnés après les bits de poids faibles. 2. L’additionneur parallèle est asynchrone : les sorties ne sont pas toutes stabilisées en même temps (cas défavorable : n * temps de passage dans un additionneur). 3. Pour accélérer l’addition, il existe des circuits combinatoires à prédiction de retenue calculant directement la retenue de rang i en fonction des entrées de rang inférieur à i (cf TD additionneur) 4. Une autre possibilité est l’additionneur série utilisant un seul additionneur complet (plus économique, moins performant) dans lequel on injecte séquentiellement les bits de même rang. Les opérandes passent alors par un registre à décalage. 81
82
Anticipation de la retenue 82 Les formules données en TD
83
L’Association des Additionneurs à Anticipations des Retenus La technique d’anticipation de la retenus ne peut pas être utilisée au delà de 7 à 8 bits, Pour l’exploiter sur des additionneurs de plus grande taille. On peut subdiviser les mots à additionner en groupes de 4 bits, Anticiper ensuite les retenus d’un groupe à un groupe. On définit GG qui indique qu’une retenue est générée par le groupe, c’est à dire générée an niveau du bit 3, ou générée au niveau du bit 2 et propagée au rang 3, etc. : GG = G3+G2*P3+G1*P2*P3+G0*P1*P2*P3 GP indique qu’une retenue arrivant par retenu entrante au niveau bit 0 sera propagée tout au long du groupe, c’est à dire qu’à chaque rang de bit i il y a au moins un ’1’sur ai ou bi, c’est à dire encore qu’à chaque rang i on a Pi = 1 : GP = P0*P1*P2*P3 83
84
Additionneur d’anticipation de retenus à 32 bits 84
85
Le soustracteur La soustraction en complément à 2, calcule correctement les n derniers bit du résultat en se basant sur X – Y ≅ X -Y + 2 n On a déjà vu que pour l’addition, La retenue sortante est égale au (n+1) ième bit du résultat. Dans le cas de la soustraction, il faut inverser ce bit, car la soustraction a été faite justement en inversant le n+1 ieme bit (en additionnant 2n `a X -Y ). D’ou la porte xor. 85
86
Les bits de conditions La comparaison des nombres signés peut se faire par un circuit à part. 86
87
Les bits de conditions Plusieurs unités centrales de traitement (CPU) utilisent les bits de conditions pour implanter les sauts conditionnels lors de comparaisons du type if (x < y) actions 1 else actions 2 C’est en particulier le cas du Pentium et de plusieurs CPU de type CISC (Complex Instruction Set Computers). Pour comparer deux nombres signés X et Y on calculera donc leur différence S = X-Y On utilisera les bits de condition suivants : Z = S 0+ S 1..+ S n-1 (une porte ou) (Egalité) N = S n-1 (Inférieur ou Supérieur) 87
88
Les bits de conditions Reste à vérifier la correction du résultat. Le résultat de l’addition est ou bien correct ou il y a une différence de 2 n avec la bonne réponse ou bien il y débordement. La somme est incorrecte (on dit qu’il y a débordement) si et seulement si X et Y ont même signe et S le signe contraire; donc: La soustraction est incorrecte si le signe du résultat est incorrect; ceci se passe si X et Y sont de signes contraires et si S a le signe de Y; donc: 88
89
Les bits de conditions Dans les deux cas, la formule globale est Les bits N, Z et V servent pour vérifier la correction du résultat et faire la comparaisons de nombre signés en représentation complément à deux. Plus besoin d’un circuit comparateur. 89
90
Incrémenteur Retrancher ou ajouter 1 à un nombre est une opération fréquemment réalisée par un processeur, on pourrait utiliser l’addition mais on peut optimiser (le fait que les registres soient équipés d’incrémenteur ou décrémenteur permet de libérer l’UAL et retrouver une exécution parallèle d’opérations. Entrée= e n-1,..., e 0 et la sortie =s n-1,..., s 0 Incrémenter revient à inverser le 1er bit (et les bits suivants s’il y a propagation de retenue). D’où les formules : 90
91
Unité Arithmétique Logique Une UAL est une Unité Arithmétique et Logique réalisant les opérations de base : opérations logiques (et, ou et non ), opérations arithmétiques, comparaisons. Un code d’entrée détermine la partie du circuit qui va fournir le résultat. À la fin de l’opération des indicateurs sont regroupés dans un registre : dernière retenue, overflow, nullité du résultat, signe, supériorité, etc. 91
92
Unité Arithmétique Logique 92 Circuit combinatoire d’une UAL rudimentaire à 1 bit possédant 4 opérations (et, ou, non et addition ) de code d’opérations sur 2 bits F0 et F1 (00 : ou, 01 : et, 10 : non, 11 : addition ) Fin du chapitre 2, Partie 1
93
Les registres Les compteurs binaires Mémoire de registre 93
94
Définitions Un système séquentiel est un système dont les sorties à l'instant t dépendent à la fois des entrées à cet instant, mais aussi de ce qui s'est passé auparavant; état du système. Un système séquentiel peut être synchrone ou asynchrone selon qu’il est commandée ou pas par un signal d’horloge: asynchrone si les variables d’entrées changent, l’évolution de la sortie est incontrôlable de l’extérieur (les sorties ne sont pas tous valides au même instant). synchrone si le changement des variable de sortie est contrôlable de l’extérieur par un signal qu’on appelle signal d’horloge. Quelle est l’intérêt d’un signal d’horloge? Quelle est l’intérêt de l’état d’un système? 94
95
Notion de temps Une horloge est un composant passant indéfiniment et régulièrement d’un niveau haut à un niveau bas (succession de 1 et de 0), chaque transition s’appelle un top. 2 unités de temps pour chaque additionneur Synchronisation: Attendre que la sortie de tous les additionneurs soit valide avant de propager le résultat Estimer le temps de calcul pour déterminer l’intervalle de lecture du résultat Insérer des «barrières» qui synchronisent les sorties Les « barrières » cadencées (contrôlées) par un signal externe périodique horloge + S1S1 r1r1 + S0S0 r0r0 + S2S2 r2r2 + S3S3 r3r3 y1y1 y0y0 y2y2 y3y3 x1x1 x0x0 x2x2 x3x3 0 000 horloge T=cycle Signal d’horloge 0/1 1 010 t=8 t=0 00111100
96
00011001 Notion de Mémorisation Maintenir les entrées pendant la durée du calcul mémorisation. + S1S1 r1r1 + S0S0 r0r0 + S2S2 r2r2 + S3S3 r3r3 y1y1 y0y0 y2y2 y3y3 x1x1 x0x0 x2x2 x3x3 t=8t=6 t=4 t=2 0 00 0 t=0 00111100 1 001 t=8 horloge t=200 t=4 0 00001111 T=cycle0/1 10010001
97
Bascule RS Elle est réalisée par le circuit séquentiel suivant: Caractéristiques: deux états stables pour les configurations R=0 et S=0. Fonctionnement: la cellule est en mode ’lecture’ lorsque les entrées R et S sont toutes les deux à 0 ; la paire (Q, Q’) est alors nécessairement dans un des deux états (0, 1) ou (1, 0). pour mémoriser 0 (c’est à dire que les sorties soient dans l’état (Q, Q’) = (0,1) quand la cellule reviendra en mode lecture): il faut appliquer un 1 au signale R (reset),puis le remettre à 0. Peut-importe son état antérieur, la cellule se retrouve alors dans l’état auto-stable (Q,Q’) =(0,1). pour mémoriser 1 (c’est à dire que les sorties soient dans l’état (Q,Q’w) =(1,0) quand la cellule reviendra en mode lecture): il faut appliquer un 1 au signale S(set),puis le remettre à 0. Peut-importe son état antérieur, la cellule se retrouve alors dans l’état auto-stable (Q,Q) =(1,0). Pour stabiliser les configurations: Bascule synchrone RSC 97
98
Bascule D La bascule RSC ne résout pas le problème des conditions interdites. D = delay 2 entrées D : la valeur en entrée C : entrée de contrôle : un signal d'horloge 1 sortie Q Q + = D si C = 1 Q + = Q si C = 0 Principe de fonctionnement: le signal d’horloge C retarde le signal en entrée D d'une période d'horloge Bascule D à partir de la bascule RSC 98
99
BASCULE T Tout comme la bascule D, la bascule T (trigger) mémorise également un bit de façon synchrone, mais elle a des modalités différentes d’utilisation. L’état mémorisé de la bascule T s’inverse (après le front d’horloge) si et seulement si son entrée vaut 1. Lorsque cette entrée vaut 0, l’ état reste inchangé. Q + =QT + QT
100
BASCULE T La bascule T est obtenue en rebouclant sue elle-même une bascule RS. Le fonctionnement : La sortie T change de valeur à chaque front-montant. Elle réalise un diviseur de fréquence: la sortie T à une fréquence deux moindre que celle de H.
101
Bascule JK synchrone JK = « rien de particulier », variante de RS Comme pour RS mais ajoute le cas de R=S=1 Si J = K = 1 alors Q + = Q Synchrone : plus une horloge (front descendant ou montant) JKQQ+Q+ 0000 0011 0100 0110 1001 1011 1101 1110 JK Q 00011110 00011 11001 Q + = JQ + KQ
102
Chronogramme d’une bascule JK synchrone
103
Représentation graphique des différents types de bascule Bascule asynchrone Pas d'entrée CLK ou de contrôle Bascule synchrone Entrée CLK Synchrone sur front : rajoute un triangle sur l'entrée de contrôle Si « rond inverseur » Bascule latch : Modifie la sortie quand valeur d'horloge à 0 (1 par défaut) Bascule flip-flop : Actif sur front descendant (montant par défaut)
104
Initialisation des bascules Quelle que soit la bascule, elle peut être réinitialiser par une combinaison de ses entrées et un coup d’horloge. Sur la plupart des bascules, il existe également des signaux spécifiques d’initialisation asynchrone, c’est-à-dire ne nécessitant pas le signal d’horloge. Ils sont appelés généralement ‘clear ‘pour la remise à zéro et ‘preset’ pour la remise à 1. Exemple: bascule T
105
Les bascules JK avec un comportement asynchrone et un comportement synchrone
106
Choix des bascules La bascule D est clairement adaptée aux situations où on doit stocker un bit présent. La bascule T est adaptée aux situations de changement ou d’inversion. La bascule JK semble plus universelle. Par analogie avec les portes combinatoires, on pourrait se demander si cette bascule est plus puissante. La réponse est non. ces trois bascules ont une puissance d’expression équivalente: elle mémorise un bit et ne diffère que par les modalités de stockage de ce bit. On peut fabriquer facilement une bascule JK a partir d’une bascule T et inversement.
107
Exercice Synthèse d’un circuit séquentiel Réaliser le circuit qui permet de réaliser le cycle suivants à l’aide de bascule JK?
108
Elles sont utilisées pour leurs effets mémoires et chacune permet de stocker un bit. 108
109
Les registres: définition Un registre est un ensemble de n bascules ordonnées. Un registre permet de mémoriser une information sur n bits. Registre : mot mémoire de n bits Composant utilisé en interne dans un processeur pour stocker des valeurs lors de l'exécution d'un programme par ce processeur
110
Exemple avec signale lecture et écriture Exemple : registre 4 bits 4 bascules D stockent les 4 bits 4 bits Ix en entrée pour écrire le mot 4 bits Ox en sortie pour récupérer la valeur du mot Une entrée L (pour « load ») précise si on conserve la valeur du mot stocké (valeur 0) ou écrit le mot avec les 4 bits en entrée (valeur 1) Selon la valeur de L, à chaque front montant de l'horloge, les sorties des multiplexeurs prennent les valeurs ix ou reprennent les valeurs déjà stockées par les bascules
111
Type de registre Il existe plusieurs types de registres : Registre à entrées parallèles et sorties parallèles (Registre à chargement parallèle ). Registre à entrée série et sortie série Registre à entrée série et sortie parallèle. Registre à entrée parallèle et sortie série. Registre à décalage circulaire.
112
Registre à entrées parallèles et sorties parallèles (Registre à chargement parallèle ) Il peut charger une information sur N bits en même temps. Les n bascules changement d’états en même temps. Chaque bascule Di prend la valeur de l’information i. Il possède une entrée de chargement chg ( chg=0 état mémoire, chg=1 chargement )
113
Registre à entrés en série et sortie en série L’information est introduite bit par bit ( en série). L'ensemble de l’information stocké dans le registre est décalé d'une position. La bascule B0 reçoit une nouvelle entrée ES. Un tel registre est appelé registre à entrée série à gauche et à sortie série à droite.
114
registre à entrée en série à droite et à sortie en série à gauche.
115
Registre à entrée série et sortie parallèle.
116
Registre à entrée parallèle (ou entree en série au choix) et sortie série.
117
Registre à décalage circulaire C'est un registre qui effectue un décalage vers la gauche en répercutant la sortie de la dernière bascule vers l'entrée de la première bascule. Le décalage peut être un décalage droite ( circulaire droite) ou gauche ( circulaire gauche)
118
Principe d’un circuit mémoire (SRAM) 3 broches de commande: CS: sélection du boîtier (“chip select”) si CS=1; RD: lecture/écriture (1/0); OE: activation des sorties (“output enable”). Mémoire à 4 mots de 3 bits C’est un interrupteurs à trois états (0, 1, déconnecté) Permet de connecter I 0 -I 2 et O 0 -O 2 sur les mêmes lignes de données
119
Principe d’une mémoire (DRAM) Chaque bit d'une DRAM est constitué par un transistor et un condensateur : le condensateur détermine la valeur du bit : le bit vaut 1 si le condensateur est chargé, il vaut 0 dans le cas contraire. le transistor gère l'accès au condensateur L'inconvénient des DRAM est que le condensateur possède une tendance naturelle à se décharger. Pour que l'information reste cohérente, on va devoir réaliser un rafraîchissement de la mémoire toutes les quelques millisecondes. Ce rafraîchissement consiste à lire et à réécrire la donnée. Les avantages de la DRAM sont : sa grande densité d'intégration (car un bit est représenté par un transistor), son faible coût de fabrication, sa faible consommation électrique (entre un sixième à la moitié de celle des SRAM). En revanche le temps d'accès de la DRAM est plus important que celui de la SRAM (environ 50-70 ns). 119
120
Détection et correction d'erreur (1) Les erreurs mémoire Les mémoires d'ordinateurs peuvent parfois stocker des valeurs erronées, du fait de sautes de tension, des champs magnétique a proximité, de la chaleur ou autres. Pour se protéger de ces phénomènes, les mémoires récentes utilisent des codes auto-correcteurs. La mémoire possède des capacités de stockage supplémentaires permettant l'enregistrement d'informations de contrôle On vérifie la cohérence de ces informations chaque fois qu'un mot est lu à partir de la mémoire 120
121
Détection et correction d'erreur (2) Bit de parité (Parity Checking) Pour chaque groupe de 8 bits (octet) on ajoute un bit supplémentaire dit bit de parité qui prend la valeur 1 quand il y a un nombre pair de 1 dans le groupe de 8 bits. A chaque rafraichissement de la mémoire (dans le cas des DRAM ou bien lecture dans le cas de SRAM) on effectue un contrôle de parité. Si une erreur est détectée on envoie un signal NMI (Non Masquable Interrupt) au CPU qui décide soit d'arrêter la machine, soit de fermer l'application exploitant la zone de donnée erronée. Cette technique bien qu'intéressante possède cependant deux désavantages : les mémoires sont plus difficiles à gérer et donc plus coûteuses, on utilise 12,5 % d'espace en plus pour stocker le bit de parité, on ne peut pas corriger l'erreur et la détection d'erreur n'est pas totale car si deux bits changent de valeur l'erreur ne sera pas détectée. 121
122
Détection et correction d'erreur (3) Le s mémoires ECC (Error correction coding) Pour résoudre ces défauts, inhérents aux mémoires utilisant un bit de parité, on a inventé d'autres types de mémoires : les mémoires ECC. Ces mémoires utilisent des méthodes de détection d'erreur plus sophistiquées, qui utilisent au moins deux bits supplémentaires par case mémoire. Existent dans des environnements hostiles sans tomber un panne : la mémoire d'un calculateur implanté dans un satellite ou une navette spatiale. Plusieurs algorithmes de correction existent, le plus souvent, la technique de correction d'erreur utilisé est un code de Hamming, couplé avec un bit de parité. Cela permet de détecter les erreurs qui modifient 2 bit ou un nombre impair de bits, et de corriger les erreurs qui ont modifiées 1 bit. 122
123
Exercice 1 Au début, le registre R1 est chargée avec la donnée A le registre R2 avec la donnée B et la bascule D est initialisée à zéro.
124
Décrire la suite du fonctionnement pour les quatre premières impulsion d’horloges sachant que : InitialisationABrEs(R1)Es(R2 ) D Impulsion 1a0a0 b0b0 0a0a0 Z0Z0 r1r1 Impulsion 2 Impulsion 3 Impulsion 4
125
Exercice 2 Soit un circuit décrit par la figure suivante: L=0 mémoire, L=1 chargement synchrone Le registres Y, X sont initialisés à 0. Les registres A et B sont initialement chargés avec les données A et B.
126
Question Compléter le tableau suivant à chaque top d’horloge. Analyser le contenu des registre X et Y en fonction des données A et B. Quelle est la fonction réalisée par ce circuit? Registre A Registre B FiA-BRegistre XRegistre Y T0T0 T1T1 T2T2 T3T3
127
TD n° 4 : les compteurs binaires 127
128
Les compteurs: définition Un compteur est un circuit séquentiel qui possède N états ( E 0, E 1,…..,E n-1 ). À chaque top d’horloge, il passe de l’état E i à l’état E i+1. Il revient toujours à l’état initiale E 0 : Un compteur possède un cycle ( une séquence d’états). Un compteur est constitué de n bascules. Le nombre d’états d’un compteur est inférieurs ou égale à 2 n. Il existe deux types de compteurs : les compteurs synchrones et asynchrones.
129
Types de compteurs Les compteurs modulo 2 n ( cycle complet): n=2 : 0,1,2,3,0 modulo 4 n=3 : 0,1,2,3,4,5,6,7,0 modulo 8 n=4 : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0 modulo 16 Les compteurs modulo N ( cycle incomplet ) Pour N=5 : 0,1,2,3,4,0 modulo 5 Pour N= 10 : 0,1,2,3,4,5,6,7,8,9,0 modulo 10 Les compteurs à cycle quelconque : 0,2,5,6,7,8,10,0
130
Étude des compteurs modulo 2 n exemple Modulo 8 ( bascules JK) On remarque que Q 0 passe à chaque fois de 0 à 1 et de 1 à 0 : un basculement J0=K0=1. On remarque que Q1 passe de 1 à 0 et passe de 0 à 1 à chaque fois que Q0 passe de 1 à 0: Q1 est utilisée comme une horloge pour Q2 avec J1=K1=1 pour avoir un basculement On remarque que Q2 passe de 0 à 1 à chaque fois que Q1 passe de 1 à 0: Q1 est utilisée comme une horloge pour Q2 avec J2=K2=1 pour avoir un basculement. Ce compteur est appelé un compteur ASYNCHRONE : chaque bascule possède sa propre horloge.
131
Un Compteur asynchrone modulo 8
132
Études des Compteurs modulo N exemple modulo 6(cycle incomplet)
133
Un compteur modulo 6 asynchrone
134
Étude des compteurs synchrones modulo 2 n exemple Modulo 8 (bascule JK) Toutes les bascules possèdent la même horloge. Pour réaliser le compteur il faut déterminer les équations des J i et K i ?
135
Schéma d’un compteur modulo 8 synchrone D’après la table de vérité en trouve: J0=K0=1; J1=K1=Q0; J2=K2=Q0.Q1
136
Étude des compteurs synchrones modulo 2 n exemple Modulo 8 (bascule T) Une bascule T possède deux états: mémoire si T=0 basculement si T =1.
137
Étude des compteurs synchrones modulo 2 n exemple Modulo 8 (bascule D)
138
Schéma d’un compteur synchrone modulo 8 (bascule D)
139
Étude des compteurs synchrones modulo N exemple Modulo 6 (bascule J K)
140
Caractéristiques modes d’accès mémoire principale mémoire cache 140
141
Classification des mémoires (1) 141 Distinguer entre RAM et ROM
142
Les caractéristiques techniques La capacité, représentant le volume global d'informations (en bits) que la mémoire peut stocker ; Le temps d'accès, correspondant à l'intervalle de temps entre la demande de lecture/écriture et la disponibilité de la donnée ; Le temps de cycle, représentant l'intervalle de temps minimum entre deux accès successifs ; Le débit, définissant le volume d'information échangé par unité de temps, exprimé en bits par seconde ; La non volatilité caractérisant l'aptitude d'une mémoire à conserver les données lorsqu'elle n'est plus alimentée électriquement. 142
143
Classification des mémoires (3) La mémoire vive ou RAM (Random Access Memory) pour mémoire à accès aléatoire, est une mémoire volatile, cela signifie que si l'on coupe l'alimentation, les données qu'elle contient sont perdues. Ses caractéristiques sont les suivantes : elle sert à stocker les programmes exécutés par le processeur elle est accessible en lecture et en écriture elle est organisée sous forme matricielle Deux volatiles: La SRAM extrêmement rapide et onéreuse, utilisée là où la vitesse est importante (registres, caches, mémoires de commande). La DRAM, plus dense, moins rapide et moins chère, est la technologie habituelle des mémoires principales. Sur la carte mère cohabite mémoires persistantes (mémoires mortes –ROM-Read Only Memory), leur contenu est figé (ou presque) et conserve en permanence même hors alimentation électrique. Une de ces mémoires contient entre autres le BIOS (Basic Input/Output System) qui est le programme chargé de créer le lien entre le matériel et les logiciels. Les ROM sont fondues avec le programme qu'elles contiennent. Alors que pendant la phase de développement les programmes sont amenés à être modifiés, Les ROM ont petit à petit évolué de mémoires mortes figées (ROM classique) à des mémoires programmables, puis reprogrammables 143
144
Classification des mémoires (4) La mémoire PROM (Programmable ROM) est une ROM à enregistrement irréversible qui peut être programmée par un utilisateur grâce à un dispositif appelé programmateur de PROM. Pour simplifier, on peut dire que l'information est représentée dans une ROM par un élément conducteur pour la valeur 1 et un élément isolant pour la valeur 0. Une PROM est un composant dans lequel tous les bits valent 1. Lorsque l'on veut y introduire un programme, on place le composant sur un appareil spécial, puis on sélectionne les adresses devant contenir des 0 et on envoie une tension suffisante (12V) pour brûler l'élément conducteur (un fusible), qui prend ainsi la valeur 0. EPROM (Erasable Programmable ROM) sont des PROM pouvant être effacées. Ces puces possèdent une vitre permettant de laisser passer des rayons ultra-violets. Lorsque la puce est en présence de rayons ultra-violets d'une certaine longueur d'onde, les fusibles sont reconstitués, c'est-à-dire que tous les bits de la mémoire sont à nouveau à 1. EEPROM (Electrically EPROM) quant à elles utilisent un procédé électrique pour l'effacement des données. Elles sont donc bien plus pratiques que les EPROM. Les mémoires Flash réalisent la synthèse des technologies EEPROM et les SRAM. Elles sont rapide et nécessitent pas de rafraîchissement. Elle sont effaçables et reprogrammables rapidement par blocs de 64 Ko. Malheureusement son prix de revient est assez élevé, et on ne peut la reprogrammer qu'un nombre limité de fois (environ 100.000). 144
145
Classification des mémoires :Utilisation 145 Distinguer p/r à la proximité du processeur
146
Classification des mémoires : Utilisation les registres sont les éléments de mémoire les plus rapides. Ils sont situés au niveau du processeur et servent au stockage des opérandes et résultats intermédiaires. (illustrer l’utilisation au tableau) la mémoire cache est une mémoire rapide de faible capacité destinée à accélérer l'accès à la mémoire centrale en stockant les données les plus utilisées. la mémoire centrale contient les programmes (code + données) et est plus lente que les deux mémoires précédentes. La mémoire d'appui est l'équivalent de la mémoire cache pour la mémoire de masse. la mémoire de masse est un support de stockage généralement de grande capacité et sert au stockage et à l'archivage des informations. 146
147
Les caractéristiques techniques Les modes d’accès: accès par le contenu (mémoire associative) : les informations sont identifiées par une clé et la recherche s’effectue sur cette clé de façon simultanée sur toutes les positions de la mémoire (Ex : la mémoire cache). accès séquentiel: l’accès le plus lent, pour accéder à une information, particulière, on est obligé de parcourir toutes celles qui la précèdent (Ex : les bandes magnétiques), accès direct(aléatoire): les informations ont une adresse propre, ce qui permet de les accéder directement (Ex : Mémoire centrale, registres), 147
148
Mémoires caches But : Augmentation des performances éviter de rechercher en mémoire centrale des données déjà recherchées précédemment en les conservant près du processeur dans une mémoire à accès rapide. Le cache interne ou de niveau 1 ou L1 : dans le processeur Intel 486 : cache unifié = contient instructions et données, Pentium: actuellement au moins 2 caches; 1 cache de données et 1 caches d’instructions.Les avantages: les opérations mémoires sur des instructions et données indépendantes peuvent être simultanées. Le cache externe ou de niveau 2 ou L2 (unifié) : à côté du processeur, généralement de 256 ko. Exemple de fonctionnement : Le processeur demande une instruction présente dans une boucle d’un programme en plaçant l’adresse de cette instruction sur le bus d’adresse. Le processeur peut charger dans le cache une image à traiter. Le contrôleur de cache cherche si l’information est dans le cache en fonction de l’adresse. Dans le cas d’un échec, Le contrôleur de cache entame un cycle de lecture en mémoire centrale. La mémoire centrale envoie l’information au processeur et le contrôleur de cache la copie au passage dans le cache, en lui associant une clès. Au prochain accès à cette même instruction, le contrôleur de cache enverra directement la donnée au processeur sans démarrer un cycle de lecture en mémoire centrale. L’accès se fait par contenu. 148
149
Algorithme de remplacement dans le cache quel bloc du cache va recevoir le nouveau bloc mémoire? diverses stratégies sont employées choisir un bloc candidat de manière aléatoire choisir le plus ancien bloc du cache (FIFO, First In First Out) choisir le bloc le moins récemment utilisée (LRU Least Recently Used) choisir le bloc le moins fréquemment utilisée (LFU Least Frequently Used) les plus efficaces LFU LRU aléatoire les plus faciles à implanter aléatoire FIFO 149
150
Assemblage de blocs mémoires (Exercice) Indépendamment de la technologie utilisée et du mode de stockage, un circuit intégré de mémoire comprend m mots mémoires de n bits chacun. La taille voulue de la mémoire est habituellement plus grande que celle d'un seul circuit. Il faut alors connecter plusieurs circuits intégrés de même type. Exemple avec le circuit 2114A d’Intel: C’est un circuit de mémoire RAM statique de 1024*4 bits, il permet d’adresser 1024 mots de 4 bits, le circuit doit donc contenir 10 bits d’adressage (2 10 = 1024). Réaliser les circuits mémoire suivants: Mémoire de 1024 mots de 16 bits chacun réalisée à l’aide de circuit 2114 A d’Intel; Mémoire de 4096 mots de 4 bits chacun réalisée à l’aide de circuit 2114A. 150
151
Architecture de l’unité centrale de traitement L’unité centrale de traitement (CPU) est aussi appelé le processeur central. CPU+Mémoire centrale souvent appelé l’unité centrale. 151 Reg. adresse Reg. mot CO RI Décodeur Séquenceur de commandes Reg. d’état Horloge UAL résultat Registres opérandes résultat Mot-mémoire Ad r instruction Adr. opérande CPU Unité arithmétique et logique Unité de commande
152
Les registres spéciaux Le registre d’adresse (Memory Address Register): le registre où est stocké l’adresse de la case mémoire lue ou écrite lors d’un accès à la mémoire. La donnée transite par le registre de mot (Memory Data Register). Fonctionnement: Lors d’une lecture, la donnée (peut être instruction) parvient au processeur dans ce registre. Lors d’une écriture, la donnée est placée dans ce registre par le processeur avant d’être écrite dans la case mémoire. Les registres principaux: Le compteur ordinal (CO) (Program Counter (PC)): un registre contenant l'adresse en mémoire où est stockée l'instruction à chercher. Le registre instruction (RI): reçoit l'instruction qui doit être exécutée. Le décodeur de code opération: détermine quelle opération doit être effectuée, parmi toutes les opérations possibles. Le séquenceur: génère une séquence de microcommandes vers le microprocesseur cadencées par l’horloge. L’horloge: émet des impulsions électroniques régulières, synchronisant ainsi toutes les actions de l'unité centrale. 152
153
D’autres registres Accumulateur (ACC) : un registre qui contient un des opérandes avant l'exécution et le résultat après. Il peut aussi servir de registre tampon dans les opérations d'entrées-sorties. Naturellement le programmeur a accès à l'ACC, qui est toujours très sollicité pendant le traitement des données. Registres généraux : Les registres généraux permettent de sauvegarder des informations fréquemment utilisées pendant le programme ou des résultats intermédiaires, cela évite des accès à la mémoire, accélérant ainsi l'exécution du programme Registres d'indice (XR) : peuvent être utilisés comme les registres généraux pour sauvegarder et pour compter. Mais, en plus, ils ont une fonction spéciale qui est de grande utilité dans la manipulation des tableaux de données. Ils peuvent, en effet, être utilisés pour manipuler des adresses, suivant une forme particulière d'adressage, appelée adressage indexé. Registres de base : Utilisés comme les registres d'indice pour calculer des adresses effectives (adressage basé), les registres de base [base registers] sont conçus pour contenir une adresse de référence, pour obtenir l'adresse effective, il faut y ajouter le déplacement par rapport à l’adresse de référence. Registre d'état [PSW = Program Status Word] : Le registre d'état contient différents bits appelés drapeaux [flags] indiquant l'état d'une condition particulière dans le CPU. Par exemple, le bit indicateur Z indique si le résultat de l'opération effectuée est égal à zéro, le bit indicateur V indique un dépassement de capacité dans l’ACC, etc. Ces bits peuvent être testés par programme et ainsi déterminer la séquence d’instructions à suivre. Registre pointeur de pile [SP = Stack Pointer] Ce registre est utilisé pour simuler une pile dans la mémoire centrale, dans laquelle on réserve une zone de mémoire. Lorsqu'un mot est chargé dans la pile, son adresse est inscrite dans le SP ; lorsqu'un mot est lu, la lecture se fait à partir de l'adresse indiquée par le pointeur SP. Le pointeur indique à tout instant l'adresse correspondant au sommet de la pile. 153
154
Les instructions exécutés par le processeur sont stockées en mémoire. Toutes les instructions possibles sont représentées par des codes. Le code d’une instruction est appelé op-code. Les op-code peuvent être de longueur fixe comme dans le LC-3, MIPS ou de longueur variable comme dans le Pentium. 154
155
au langage Machine
156
Généralités sur les processeurs Le processeur (CPU : Central Processing Unit ) est un gigantesque circuit séquentiel dont les signaux d’entrées et de sorties sont principalement pris et écrits en mémoire RAM. Un programme est une suite d’instructions placées dans la mémoire. Une instruction est faite de 0 et 1 qui correspondent à des signaux pour le CPU. Deux instructions consécutives dans le programme sont consécutives dans la mémoire (consécutive dans l’espace virtuel, cf. adressage de la mémoire). Il existe dans tout processeur un registre spécial nommé PC (Program Counter, CO ) contenant l’adresse de l’instruction courante. Un compilateur traduit un programme écrit dans un langage conventionnel en instructions machine. Pour un langage, il existe un compilateur par type de processeur. Rôle du processeur : chercher une instruction, l’exécuter, écrire son résultat, chercher une instruction, etc. Registres spéciaux : – PC : adresse en RAM de l’instruction courante, incrémenté automatiquement et modifié lors des sauts. – IR (Instruction Register ) : contient l’instruction courante. – Flags : overflow (débordement), carry (retenue), zéro, etc. – SP (Stack Pointer ) : pointeur de pile pour le passage des paramètres de fonctions. Registres généraux : registres contenant les opérandes et les résultats des calculs, chaque registre a un numéro. Un concepteur de processeur commence par écrire les instructions que doit savoir exécuter le CPU, le circuit du CPU est réalisé ensuite. Fabricants de processeurs : Intel, AMD, Digital (Ultra), Motorola (68xxx), Sun (Sparc). 156
157
Types d’instructions L’ensemble des instructions compréhensibles par un processeur forme le jeu d’instruction. 1. transfert de données (load, move, store) : pour charger de la mémoire, sauver en mémoire, effectuer des transferts de registre à registre, de mémoire à mémoire, etc. ; 2. opérations arithmétiques (add, sub, mul, div) : les quatre opérations de base en entier, signé ou non, court ou long, ou en réel en virgule flottante, simple ou double précision ; 3. opérations logique (and, or, not, xor, etc.) ; 4. contrôle de séquence : branchement impératifs et conditionnels, boucles, appels de procédures, etc. ; 5. entrées/sorties (read, print, etc.) ; 6. manipulation diverses : décalages, conversions de format, incrémentation de registres, etc. Jeu d’instructions = 50 à 250 instructions. RISC (Reduced Instruction Set Computer) : petit nombre d’instruction, format fixe, câblé. CISC (Complex Instruction Set Computer) : jeu riche (racine carrée, multiplication en double précision))opérations microprogrammées. 157
158
Architecture CISC/RISC Deux catégories de processeurs : CISCRISC (les processeurs actuels ) AMD/Intel, Motorola...PowerPC, MIPS, SPARC, Alpha, ARM Instructions complexes (plusieurs cycles d’horloge) Instructions de taille variable Instructions séquentielles Peu de registres Instructions de taille fixe (1 mot) Instructions simples (un cycle) Pipeline (exécution de plusieurs instructions en même temps) Beaucoup de registres
159
Format d’instruction Chaque instruction est représentée en mémoire par une suite d’octets. Processeur Intel : 1 à 6 octets ; Mips : 4 octets. Un code en tête permet de connaître le type d’instruction. Exemple: processeur Mips 32 registres numérotés de 0 à 31 avec des instructions de taille fixe (32 bits). 1. Donne 0 17 18 8 0 32 Nombre de bits 6 5 5 5 5 6 – 0 : format de l’instruction (addition de contenus de registres); – 17, 18, 8 : numéros de registre (sur 5 bits car 32 registres) ; – 0 : pas utilisé dans l’addition ; – 32 : indique l’addition et signifie l’addition du contenu des registres 17 et 18 et le placement du résultat dans le registre 8. 159
160
Format d’instruction 2. Donne 8 8 7 9 Nombre de bits 6 5 5 16 – 8 : indique l’addition avec un opérande immédiat ; – 8, 7 : numéros de registres ; – 9 : opérande. Ici la valeur d’un des opérandes est directement codée dans l’instruction. Ce code signifie l’addition du registre 7 et de la valeur 9 et le stockage du résultat dans le registre numéro 8. 3. Donne 5 8 21 1140 Nombre de bits 6 5 5 16 – 5 : branchement si non égal ; – 8, 21 : numéros des registres à comparer ; – 1140 : adresse où il faut se rendre s’il n’y a pas égalité. Ces trois exemples sont données en langage machine (en binaire). 160
161
Format d’instruction Possibilité d’écrire ces instructions dans un format plus lisible pas un humain; le langage Assembleur. Les combinaisons de bits du langage machine sont représentées par des symboles dits mnémoniques (une combinaison d’étiquettes en lettres et en chiffres). Il faut connaître le nombre de ses registres généraux. Dans la pratique : – code mnémonique pour les opérandes ; – chaque registre à un nom ($1,..., $31) ; – les adresses ne sont données que par des étiquettes aussi. Exemple: les trois instructions précédentes en MIPS Étiquette Instruction Signification Loop add $8, $17, $18 ($8 = $17 + $18) addi $8, $7, 9 ($8 = $7 + 9) bne $8, $21, Loop aller à Loop si 161 La transformation du code assembleur en langage machine est accomplie par un programme nommé assembleur, dans l'autre sens par un programme désassembleur. Les opérations s'appellent respectivement assemblage et désassemblage.
162
Appel de fonction Deux problèmes se posent : 1. comment passer les paramètres à la fonction ? Dans le cas d’une fonction récursive aurons-nous assez de registres ? 2. il faut pouvoir se souvenir de l’instruction sur laquelle revenir dans la fonction appelante. Solution : utiliser une pile = zone de la RAM réservée dans laquelle on place toutes les variables locales aux fonctions ainsi que les adresses de retour. La pile s’étend vers les adresses décroissantes. 162
163
163
164
Mode d’adressage MIPS Immédiat : l’opérande est une constante contenue dans l’instruction Registre : l’opérande est un registre Indexé : l’opérande est à une adresse de base à laquelle est ajouté le contenu d’un registre comme déplacement 164 oprsrtimmédiat oprsrtrddécalfonct
165
Mode d’adressage MIPS Indexé sur le PC : l’opérande est à une adresse à laquelle est ajouté le contenu du compteur de programme comme déplacement Pseudo-direct : saut obtenu par concaténation des 26 bits du champs adresse d’une instruction j et des quatre bits de poids fort du PC Pc= (Pc+4 & oxF0000000) + 4 * d26 165
166
L’architecture du processeurs MIPS En informatique, le noyau d’un système d’exploitation est le logiciel qui assure : la communication entre les logiciels et le matériel ; la gestion des divers logiciels (tâches) d’une machine (lancement des programmes, ordonnancement…) ; la gestion du matériel (mémoire, processeur, périphérique, stockage…). Dans l’architecture MIPS R3000, l’espace adressable est divisé en deux segments : le segment utilisateur, et le segment noyau (le cas de la plupart des systèmes d’exploitation). Ceci offre une protection mémoire : le matériel n’autorise pas à un programme qui s’exécute dans le segment utilisateur d’accéder aux segments noyau. Le noyau ayant de grands pouvoirs sur l’utilisation des ressources matérielles, en particulier de la mémoire. le développement de code dans l’espace noyau est a priori plus délicat que dans l’espace utilisateur car la mémoire n’y est pas protégée. Ceci implique que des erreurs de programmation, altérant éventuellement les instructions du noyau lui-même, sont potentiellement beaucoup plus difficiles à détecter que dans l'espace utilisateur où de telles altérations sont rendues impossibles par le mécanisme de protection.
167
L’architecture du processeurs MIPS Un programme utilisateur utilise trois sous-segments (sections) dans le segment utilisateur: la section text contient le code exécutable en mode utilisateur. Elle est implantée conventionnellement l’adresse 0x00400000. Sa taille est fixe et calculée lors de l’assemblage. La principale tâche de l’assembleur consiste générer le code binaire correspondant au programme source décrit en langage d’assemblage, qui sera chargé en mémoire dans cette section. la section data contient les données globales manipulées par le programme utilisateur. Elle est implantée conventionnellement l’adresse 0x10000000. Sa taille est fixe et calculée lors de l’assemblage. Les valeurs contenues dans cette section peuvent être initialisées grâce des directives contenues dans le programme source en langage d’assemblage. la section stack contient la pile d’exécution du programme utilisateur. Sa taille varie au cours de l’exécution. Elle est implantée conventionnellement l’adresse 0x7FFFF000. La pile s’étend vers les adresses décroissantes. Trois sections sont également définies dans le segment noyau (kernel).
168
L’architecture du processeurs MIPS Architecture RISC... donc simple à comprendre Développé fin des années 90, à partir des travaux de John L. Hennessy Implémentations actuelles : MIPS32 et MIPS64 registres 32 registres génériques de 32 bits. taille du mot fait 4 octets, i.e. 32 bits (la taille d’un registre) L’accès à la mémoire est en général aligné sur les mots – On peut adresser 2 32 octets – Les adresses des mots sont des multiples de 4 load/store l’accès à la mémoire se fait seulement par des instructions explicites de chargement et mémorisation à partir de registres. (On adresse l’octet, mais on charge (on accède au) un mot (4 octet))
169
Les registres du mips NuméroNomUsage $0 zeroVaut zéro même après Ecriture $1 atRéserver à l’assembleur pour les macros ne doit pas être utilisé $2 v0v0 Evaluation des expression; ex: les valeur de retour des fonctions (appels systèmes) $3 v1v1 Evaluation des expression; ex: Utilisé pour les appels systèmes $4..$7 a 0..a 3 Passage d’argument pour les appels de fonction $8..$26 t 0..t 7 k 0..k 7 t 8..t 9 k 0 Registres de travail utilisables par le code utilisateurs $27, $28 K 1 g p Réservé aux procédures noyau $29 spsp Pointeur de pile $30 fpfp Pointeur de la zone des variables globales (section data) $31 rara Contient l’adresse de retour d’une fonction Chaque registre est connu par son numéro, qui varie entre 0 et 31, et est préfixé par un $. Par exemple, le registre 31 sera not $31 dans l’assembleur. Le registre $0 contient toujours la valeur 0, tous les autres registres sont identiques du point de vue de la machine. Afin de normaliser et de simplifier l’écriture du logiciel, des conventions d’utilisation des registres sont définies. Ces conventions sont particulièrement nécessaires lors des appels de fonctions.
170
Définir les principales règles d’écriture d’un programmes sources
171
Règles syntaxique (1) les noms de fichiers : suffixé par «.s » Exemple: monprogramme.s Les commentaires : ils commencent par un # et s’achèvent à la fin de la ligne courante. lw $10, 0($11) # sauve la valeur copiée dans la mémoire Les entiers : Une valeur entière décimale est notée sans préfixe, et une valeur entière hexadécimale est notée 0xFA (préfixée par zéro suivi de x). En hexadécimal, les lettres de A à F peuvent être écrites en majuscule ou en minuscule. Les chaîne de caractère : entre guillemets, et peuvent contenir les caractères d’échappement du langage C. Exemple : "Oh la jolie chaîne avec retour à la ligne\n". les labels : Ce sont des mnémoniques correspondant à des adresses en mémoire. Ces adresses peuvent être soit des adresses de variables stockées en mémoire (principalement dans la section data), soit des adresses de sauts (principalement dans la section text). Ce sont des chaînes de caractères qui doivent commencer par une lettre, un caractère « _ », ou un caractère «. ». Lors de la déclaration, ils doivent être suffixés par le caractère « : ». Pour y référer, on supprime le « : ».
172
Règles syntaxique (2).data space :.asciiz "Ceci est une chaîne de caractères...\n".text main: la $a0, space Attention : sont illégaux les labels qui ont le même nom qu’un mnémonique de l’assembleur Déclaration et initialisation de variables.ascii chaîne Cette directive place. partir de l’adresse du compteur d’adresse de la section concernée la suite de caractères entre guillemets.space n Un espace de taille n octets est réservé à partir de l’adresse courante de la section active. les immédiats : On appelle immédiat un opérande contenu dans l’instruction. Ce sont des constantes. Ce sont soit des entiers, soit des labels. Les valeurs de ces constantes doivent respecter une taille maximum qui est en fonction de l’instruction qui les utilise: 16 ou 26 bits.
173
Règles syntaxique (3) les arguments: La plupart des instructions nécessitent un ou plusieurs arguments. Si une instruction nécessite plusieurs arguments, ces arguments sont séparés par des virgules. Dans une instruction assembleur, on aura en général comme premier argument le registre dans lequel est mis le résultat de l’opération, puis ensuite le premier registre source, puis enfin le second registre source ou une constante. Exemple: add $3, $2, $1 Concernant les sauts, il n’est pas possible d’écrire des sauts à des adresses constantes, comme par exemple un j 0x0400000. Il faut nécessairement utiliser des labels j endloop. Exemple pour les labels: lw $12, 13($10) # $12 <= Mem[$10 + 13] Sw $20, -60($22) # Mem[$22 — 60] <= $20 S’ il n y a pas d entier devant la parenthèse ouvrante, le déplacement est nul. 173
175
Notations Notations : Imm : la valeur immédiate PC (program counter) : un registre particulier qui contient toujours l'adresse en mémoire de la prochaine instruction à exécuter. Mem[ad] : le contenu de la mémoire à l’adresse ad || : Concaténation entre deux chaînes de bits B n : Duplication du bit B n fois dans une chaîne de bits X p...q : Sélection des bits p à q dans une chaîne de bits X <= Assignation
176
L’architecture du processeurs MIPS (3) On distingue trois types d’instructions pour le MIPS Le type R (Registre) : deux opérandes registre, destination registre (instruction UAL) le type I (Immédiat) : un opérande registre, un opérande donnée directement dans la commande (appelée immédiat), destination registre (UAL) le type J (Jump) : les sauts (changer l’exécution séquentielle des programmes) (rupture de séquences) format des instructions : tiennent toutes sur 32 bits (un mot) 31 30 29 28 27 2625 24 23 22 2120 19 18 17 1615 14 13 12 1110 09 08 07 0605 04 03 02 01 00 R opcode (6)rs (5)rt (5)rd (5)shamt (5)funct (6) I opcode (6)rs (5)rt (5)immediate (16) J opcode (6)address (26) Regitre de destination opérandes Opérandes ou destination
177
Exemple InstructionFormatOpcodefunct add addu addi RRIRRI 0 08 20 21 opcode = code opération funct = complément à l’opcode shamt = décalage (pour les instructions de décalage) rs,rt,rd = registres source1, source2, destination immediate = valeur immédiate address = déplacement (adresse relative) La valeur en hexadécimale
178
Instructions arithmétiques Addition et soustraction, en signée et en non signée (u=unsigned) add et addu, sub et subu Paramètres : $rs, $rt Destination : $rd Exemple : add $rd, $rs, $rt Les contenus des registres $rs et $rt sont ajoutés pour former un résultat sur 32 bits qui est placé dans le registre $rr rd <= rs + rt Exception: génération d’une exception si dépassement de capacité Les mêmes en immédiat : addi et addiu. PAS de subi: (ça revient à une addition signée) addi $rt, $rs, imm rt <= (imm 15 16 || imm 15..0 ) + rs
179
Instructions logiques Opérations logiques bit à bit : and, nor, or, xor mais aussi andi, ori, xori. Exemple : - ori $rt, $rs, imm La valeur immédiate sur 16 bits subit une extension de zéros. rt <= (0 16 || imm 15…0 ) or rs - and $rd $rs, $rt rd <= rs and rt Il existe également des instructions de comparaisons registre/registre : slt, sltu ou registre/immédiat : slti, sltiu. - slti $rt, $rs, imm If (rs <(imm 15 16 || imm 15...0 )) rt <= 1 else rt <= 0
180
Les décalages En anglais, décalage = shift. Il y a des décalages à gauche : sl et à droite : sr les décalages à droite, peuvent être : logiques : on décale à droite et on ajoute des zéro à gauche ou arithmétiques : on décale à droite et on duplique le bit de signe à gauche Décalage à droite arithmétique immédiat Syntaxe : sra $rr, $ri, imm rr <= (ri 31 ) imm || (ri) 31...imm Décalage à droite logique immédiat Syntaxe : srl $rr, $ri, imm rr <= 0 imm || ri 31...imm Décalage à droite logique registre Syntaxe : srlv $rr, $ri, $rj Le registre $ri est décalé à droite du nombre de bits spécifié dans les 5 bits de poids faible du registre $rj. rr <= 0 rj || ri 31...rj
181
Instructions d’accès mémoire - fonctionnement L’adresse de la case mémoire à lire/modifier est désignée par : le contenu d’un registre $rs un décalage (offset) passée en immédiat. adresse = contenu de $rs + offset Exemple: L’instruction sw, regardez sa description dans la liste d’instructions lw $12, 13($10) # $12 <= Mem[$10 + 13] sw $20, -60($22) # Mem[$22 - 60] <= $20 S’il n’y a pas d’entier devant la parenthèse ouvrante, le déplacement est nul Intérêt de ce type d’adressage? utilisée pour la gestion de pile ou pour le type “struct” (en C par exemple) … Utile pour accéder à la case mémoire “suivante/précédente” (dans les tableau et les liste chaînée par exemple)
182
Les types de sauts Les sauts de type I : saut relatif, en général pas loin 16 bits suffisent pour la plupart des cas Les sauts de type J : sur 26 bits. permettent d’aller plus loin Les sauts de type R : Pour les jr, c’est une adresse absolue : on ne dit pas d’ajouter/enlever une certaine valeur à PC, mais on donne directement l’adresse où sauter. Sauts avec lien Certains des sauts ou branchements ont une variante “avec lien” jalr, bltzal, jal,... on garde en mémoire où on était dans le programme avant le saut, et on stocke cette valeur dans le registre $31 sert principalement lors de l’appel de fonctions : pour lancer la fonction on fait un saut avec lien on sauvegarde donc l’adresse de retour une fois la fonction effectuée, il faut continuer le programme où l’on s’était arrêté (valeur dans $31) Remarque : Si une fonction appelle une autre fonction, il faut un système de pile pour sauvegarder les deux adresses de retour ainsi que les paramètres d’appel (prochain chapitre).
183
Les instructions de sauts Étiquettes Dans les sauts relatifs, en assembleur, la destination du saut est une étiquette : elle se met en début de certaines lignes du programme permet de repérer la ligne, principalement pour les sauts dans la commande assembleur où la destination est une étiquette en langage machine on transforme l’étiquette en un nombre de lignes. Sauts relatifs: la destination du saut est calculé par un décalage à ajouter à la valeur du PC (registre CO) Branchement si registre égal registre Syntaxe : beq $ri, $rj, label if (ri = rj) pc <= pc+4+ adresse associée à label (4 * nb lignes associé label) Sauts absolus : donner directement l’adresse à laquelle on se rend (dans un registre ou via une étiquette) Saut inconditionnel immédiat Syntaxe: j label
184
Les instructions de sauts Sauts conditionnels On les appelle branchements : On fait un test si le test s’évalue à vrai on fait le saut sinon on passe à la ligne suivante. Exemples beq branch if equal : égalité entre deux registres, bne branch if not equal : inégalité entre deux registres, bgez, blez, bgtz, bltz : comparaisons à 0, Sauts inconditionnels Le saut est fait dans tous les cas Exemples jr (jump register) : on saute à la valeur indiquée par un registre j (jump simple) : adresse donnée sur 26 bits. (LE MEMO-MIPS EN PDF)
185
Les Appels système: Entrée-Sortie (syscall) Toutes les entrées–sorties sont prises en charge par la routine système syscall.
186
Chargement d’adresse et Macro instruction Une macro instruction : est une pseudo-instruction qui ne fait pas partie du jeu d’instructions machine, mais qui est acceptée par l’assembleur qui la traduit en une séquence de plusieurs instructions machine. Exemple macro-instruction : la $rr, adr instruction pour charger une adresse dans un registre (adr est une étiquette – un pointeur-) Calcul de adr par l’assembleur lui $rr, adr 31 … 16 // chargement d’une constante dans le poids fort d’un registre ori $rr, $rr, adr & 0xFFFF li $rr, imm Chargement d’un opérande immédiat sur 32 bits dans un registre Calcul de adr par l’assembleur lui $rr, imm 31 … 16 ori $rr, $rr, imm & 0xFFFF Utilité principale Pour afficher une chaîne de caractères il faut son adresse, on lui met donc une étiquette pendant sa déclaration, et avec la on récupère l’adresse en donnant l’étiquette.
187
Exemple de programme assembleur.data hello:.asciiz "hello\n" # hello pointe vers "hello\n\0 ".text main : li $v0, 4 # la primitive print_string la $a0, hello # a0 l'adresse de hello syscall
188
If then else On utilise des sauts conditionnels et inconditionnels: en Pascal la fonction minimun if t1 < t2 then t3 := t1 else t3 := t2 Assembleur Mips blt $t1, $t2, Then # si t1 >= t2 saut à Then move $t3, $t2 # t3 := t1 j End # saut à Fi Then: move $t3, $t1 # t3 := t2 End: # suite du programme
189
La boucle while Pascal: calcule dans t2 = 0 la somme des entiers de 1 à t1 while t1 > 0 do begin t2 := t2 + t1; t1 := t1 -1 end Programme équivalent while: if t1 <= 0 then goto End else begin t2 := t2 + t1; t1 := t1 - 1; goto While end; End: Code Mips While: ble $t1, $0, End add $t2, $t2, $t1 sub $t1, $t1, 1 j While End:
190
Opérations arithmétiques-Exercice assembleur langage machine L’instruction assembleur sub $8,$17,$18 donne en langage machine MIPS : r 8 <= r 17 -r 18 soit en hexa : langage machine assembleur Réciproquement, le code d’instruction MIPS suivant : 21CDFFFF se traduit en binaire en donc c’est une instruction avec rr= ri= imm= Cela correspond donc à
191
Opérations logiques - Exercice Exemple 1 Par exemple si $15 contient la valeur CAFECAFE, si $16 contient la valeur 00003456, et si $14 contient la valeur 02435614 alors and $14,$16,$15 produit le résultat suivant : le registre ? prend la valeur ? Exemple 2 Si la commande est xori $16,$15,0FAC (avec les mêmes valeurs dans les registres que pour l’exemple 1), alors le registre prend la valeur
192
Les décalages - Exercice Exemple 1: Si le registre $14 contient la valeur FFFF2381, alors srl $15,$14,4 met dans $15, sra $15,$14,4 met dans $15, sll $15,$14,3 met dans $15, Exemple 2: Assemblage : srav $13,$14,$15 Désassemblage : 000F4342 Pourquoi n’existe pas le décalage à gauche arithmétique?
193
Exercices Traduire le programme C suivants en assembleur MIPS # inc lude i n t main ( void ) { i n t a, b, c ; s c a n f ( "%d", &a ) ; s c a n f ( "%d", &b ) ; i f ( a < b ) { c=b ; } e l s e { c=a ; } p r i n t f ( "Plus grand : %d", c ) ; r e turn 0 ; }
194
Les fonction et la gestion de Pile 194
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.