Académique Documents
Professionnel Documents
Culture Documents
Architecture Des Ordinateurs
Architecture Des Ordinateurs
Mr Radouane CHAHIN
3
Introduction:Définitions
Ordinateur
Une machine de traitement de l'information (acquérir, conserver, traiter et restituer).
Type d'information & représentation
Valeurs numériques, textes, images, son, vidéos représentés sous forme de données numériques(Des 0 et des 1 ).
Informatique
Science du traitement de l'information.
Système informatique
Ensemble des moyens logiciels & matériels nécessaires pour satisfaire les besoins informatiques des utilisateurs.
4
Qu’est-ce qu’un ordinateur ?
• « Machine automatique de traitement de l’information obéissant à
des programmes formés par des suites d’opérations arithmétiques et
logiques » (Larousse 2002)
• Différents niveaux d’approche : utilisateur, programmeur machine,
concepteur de circuits logiques …
5
Qu’est ce qu’un microprocesseur ?
• Un microprocesseur est un circuit intégré complexe. Il résulte de
l’intégration sur une puce de fonctions logiques combinatoires (logiques
et/ou arithmétique) et séquentielles (registres, compteur, etc…). Il est
capable d'interpréter et d'exécuter les instructions d'un programme. Son
domaine d’utilisation est donc presque illimité.
6
Où trouve-t-on des systèmes à microprocesseur ?
• Les applications des systèmes à microprocesseurs sont multiples et variées :
Ordinateur, PDA, console de jeux, calculatrice, télévision, téléphone portable,
distributeur automatique d’argent, robotique, lecteur carte à puce, code
barre, automobile, instrumentation, etc…
Ordinateur micro-ordinateur nano-ordinateur(65mm x 30mm x 5mm)
7
Introduction: Utilisation des ordinateurs
Programme
Suite d'instructions dans un langage donnée, définissant un traitement exécutable par un ordinateur
• programmes systèmes
• programmes d'application
Système d'exploitation
Programme système qui gère les différentes ressources de la machine
Programmation
A partir d'un problème donne, réaliser un programme dont l‘exécution apporte une solution satisfaisante au
problème pose
• langages de programmation (machine, assembleur, évolues)
8
Evolution schématique des langages
9
De quoi allons-nous parler et quel chemin
allons nous suivre ?
10
Représentation de l’information
Objectifs du chapitre
1 Comprendre le principes des codages binaires.
2 Représenter des nombres entiers dans diverses représentations classiques (vas,
C1, C2).
3 Représenter des nombres réels en IEEE 754
4 Comprendre le lien entre représentation des nombres et calcul arithmétique
5 Représenter des données alphanumériques ASCII, UNCODE (UTF8,UTF16,UTF32)
11
Représentation de l’information
Différents types d'informations
• Instructions
• Données
• Nombres (entiers, réels)
• Images
• Vidéos
• Sons
• etc.
• Toujours représentées sous forme binaire (0 ou 1) a l'aide de bits.
12
Décimal Binaire Hexadécimal octal
Système binaire 1
2
1
10
1
2
1
2
3 11 3 3
• Binaire: 0, 1 4 100 4 4
5 101 5 5
• Décimal: 0, 1, …, 9 6 110 6 6
• Octal: 0, 1, …, 7 7 111 7 7
8 1000 8 10
• Hexadécimal: 0, 1, …, 9, A, B, C, D, E, F
9 1001 9 11
• E.g. Binaire-Décimal-Hexadécimal 10 1010 A 12
0000 = 0= 0 ; 0101 = 5 =5; 1010 = 10 = A 11 1011 B 13
12 1100 C 14
13 1101 D 15
14 1110 E 16
15 1111 F 17
13
Valeur numérique binaire
• Un nombre qui s'exprime en base B par les quatre chiffres 1101
s'analyse :
1*B3 + 1*B2 + 0*B1 + 1*B0 = (1101)10
qui donne :
• 1101 en base B = 10 :
1*103 + 1*102 + 0*101 + 1*100 = (1101)10
• 1101 en base B = 8 :
1*83 + 1*82 + 0*81 + 1*80 = (577)10
• 1101 en base B = 2 :
1*23 + 1*22 + 0*21 + 1*20 = (13)10
14
Conversion
• Binaire décimal: (10010)2=1*24 + 0*23 + 0*22 + 1*21 + 0*20 = (18)10
• Décimal binaire
(25)10 25÷2 = 12 reste 1
12÷2 = 6 reste 0
6÷2 = 3 reste 0
3÷2 = 1 reste 1
1÷2 = 0 reste 1
On obtient: (25)10 = (11001)2
• Binaire octal
On effectue le remplacement, de droite à gauche, de 3 bits par le chiffre octal correspondant. Si le nombre de
bits n’est pas un multiple de 3, on complète a gauche avec des zéros.
(101101)2 = (101 101)2 =(55)8
• Binaire hexadécimale
On effectue le remplacement, de droite à gauche, de 4 bits par le chiffre hexadécimal correspondant. Si le
nombre de bits n’est pas un multiple de 4, on complète a gauche avec des zéros.
(101101)2 = (0010 1101)2 = (2D)16 15
Un autre exemple
• Convertissons (01001101)2 en décimal à l'aide du schéma ci-
dessous:
27 26 25 24 23 22 21 20
0 1 0 0 1 1 0 1
• Résultat = (1001101)2
17
Valeurs: comparaison
• Comparer dans l’ordre de gauche à droite(comme nombre décimal)
• Si à une position, ai<bi, alors a<b
• Dans l’ordre croissant
000
001
010
011
100
101
110
111
18
Valeurs: addition
• 60+17 en base 2
11 1 1 1 0 0
+ 0 1 0 0 0 1
1 0 0 1 1 0 1
77
• 25 + 24 + 23 + 22 = 32 +16 + 8 + 4 = (60)10
• 24 + 20 = 16 + 1= (17)10
• 26 + 23 + 22 + 20 = 64 + 8 + 4 + 1 = (77)10
19
Valeurs: soustraction
• 8-1 en base 2
1 10 10 10
- 01 01 01 1
0 1 1 1
7
• 23 = (8)10
• 20 = (1)10
• 22 + 21 + 20 = 4 + 2 + 1 = (7)10
20
Valeurs: multiplication
7*5 en base 2
111
*101
111
1 1 01 0 0 .
1 1 1 . .
100 011
35
• 22 + 21 + 20 = 4 + 2 + 1 = (7)10
• 22 + 20 = 4+ 1= (5)10
• 25 + 21 + 20 = 32+ 2+ 1 = (35)10
21
Valeurs: division 100101 101
-000 00111
• 37/5 en base 2 100
100101 - 000
1001
/ 101
- 101
000111 1000
7 - 101
0111
• Tapez une équation ici. - 101
• 25 + 22 + 20 = 32+ 4+ 1 = (37)10 010
• 22 + 20 = 4+ 1= (5)10
• 22 + 21 + 20 = 4 + 2 + 1 = (7)10
22
Valeurs: négatives décimal binaire
3 façons de représenter +/- N avec n bits:
• Module et signe (noté M&S)
• on utilise le bit le plus à gauche pour représenter le signe
• Exemple mots de 4 bits ((3)10=(011)2) donc (0011)2 =(3)10 et (1011)2 =(-3)10
• Complément à 1 (noté Cà1)
• pour un nombre négatif, on prend la représentation de la partie entière et on
inverse tous les bits
• Exemple mots de 4 bits: ((4)10=(100)2) donc (0100)2=4 et (1011)2 =(-4)10
• Complément à 2 (noté Cà2)
• idem, mais avant d ‘inverser, on soustrait 1 (ou on inverse puis on ajoute 1)
• Exemple mots de 4 bits : ((6)10=(110)2) donc (0110)2=6 et (1010)2=(-6)10
23
Exemples: binaire décimal de nombre négative
Décimal si :M&S Décimal si :Cà1 Décimal si :Cà2
011 3 3 3
010 2 2 2
001 1 1 1
000 0 0 0
111 -3 -0 -1
110 -2 -1 -2
101 -1 -2 -3
100 -0 -3 -4
nombre Négative en M&S 1.on remplace bit de signe par - ;2. on calcule équivalent décimal (comme
précédemment partie nombre positive)
nombre Négative en Cà1 1.on remplace bit de signe par - ;2. On inverse chaque bits de Cà1( résultat M&S);
3. On calcule équivalent décimal comme précédemment
nombre Négative en Cà2 méthode 1 1.on remplace bit de signe par - ;2. On soustrais 1 ;3. On inverse chaque
bits de Cà1( résultat M&S);4. On calcule équivalent décimal comme précédemment
nombre Négative en Cà2 méthode 2 1.on remplace bit de signe par - ;2. On inverse chaque bits;3. On ajoute 1
(résultat M&S);4. On calcule équivalent décimal comme précédemment
24
Calcule :Addition (ADD)et soustraction(SUB)
• Le bit signe est traité comme tous les autres bits (on les additionne !)
• La soustraction est un cas particulier de l’addition
• les nombres négatifs sont traités comme des nombres à additionner
Exemple mots de 3 bits:
• Addition par Cà1, (si Retenue? on ajoute 1 au résultat)
0102+1102 = 10002un retenu +1 0012 équivalent on décimal 2+(-1)=1
0012+1012 = 1102pas de retenu 1102 équivalent on décimal 1+(-2)=-1
• Addition par Cà2 (Directe)
0102+1112 = 1 00120012 équivalent on décimal 2+(-1)=1
0012+1102 = 11121112 équivalent on décimal 1+(-2)=-1
25
Retenu ≠ débordement(à éviter)
• Le retenu (Carry )est rencontrée lorsqu’une retenue (carry) existe à la fin de l’opération
d’addition ou soustraction(comme décimal).
• La condition Overflow (débordement) est rencontrée lorsque l’addition de deux nombres
produit un nombre trop grand pour être représenté. En complément 2, cela se produit si:
(+A) + (+B) = −C ; (−A) + (−B) = +C ; (+A) − (−B) = −C ; (−A) − (+B) = +C;
0 = 0000 -8 = 1000
• Exemple débordement 7+3, mots de 4 bits, Cà2 1 = 0001 -7 = 1001
(+7) 0 1 1 1 Autre exemple mots de 4 bits, Cà2 2 = 0010 -6 = 1010
1111 + 0001 = 0000 (-1)+1=0 retenu, pas de débordement 3 = 0011 -5 = 1011
+ (+3) 0 0 1 1 1100 + 1100 = 1000 (-4)+(-4)=(-8) retenu, pas de débordement
4 = 0100 -4 = 1100
(-5) 1 0 1 0 0000 - 0001 = 1111 0-1=(-1) retenu, pas de débordement
0111 + 0001 = 1000 7+1=(-8) pas de retenu, débordement 5 = 0101 -3 = 1101
1000 - 0001 = 0111 (-8)-1=7 pas de retenu, débordement 6 = 0110 -2 = 1110
0100 + 0100 = 1000 4+4=(-8) pas de retenu ,débordement
1000 + 1000 = 0000 (-8)+(-8)=0 retenu ,débordement 7 = 0111 -1 = 1111
0100 + 0001 = 0101 4+1=5 pas de retenu, pas de débordement Tableau Cà2 sur 4 bit
0110 + 1001 = 1111 6+(-7)=(-1)pas de retenu, pas de débordement
1000 + 0001 = 1001 (-8)+1=(-7) pas de retenu, pas de débordement
26
Capacité de représentation M&S Cà1 Cà2
• Valeur entière avec 8 bits 011 3 3 3
• Valeur positive max: 010 2 2 2
de 000000002 à 111111112 de 0 à 25510 001 1 1 1
• Valeur max (complément à 1):
000 0 0 0
Positive de 000000002 à 011111112 de 0 à 12710
111 -3 -0 -1
Négative de 100000002 à 111111112de -127 à -010
110 -2 -1 -2
• Valeur max (complément à 2):
101 -1 -2 -3
Positive de 000000002 à 011111112de 0 à 12710
100 -0 -3 -4
Négative de 100000002 à 111111112 de -128 à -110
• Capacité de Représentation =
Pour les valeurs positifs: intervalle [0, 2 nombre bits -1]
Pour négative (complément à 1): intervalle [1-(2 nombre bits)/2, -1+(2 nombre bits)/2]
Pour négative (complément à 2): intervalle [-(2 nombre bits)/2, -1+(2 nombre bits)/2]
Exemple pour 3 bits:
Pour les valeurs positifs: intervalle [0, 23-1][0, 7]
Pour négative (complément à 1): intervalle [1-(23)/2, -1+(23)/2][1-4, -1+4][-3,3]
Pour négative (complément à 2): intervalle [-(23)/2, -1+(23)/2][-4, -1+4][-4,3]
27
Conversion chiffre réel Binaire décimal
• Virgule fixe dn-1 dn-2 dn-3 ….. d2 d1 d0 d-1 d-2 d-m avec n et m fixe
• Un nombre qui s'exprime en base B par 3 bits avec n=2 et m=1 le chiffres 101 s'analyse :
1*B1 + 0*B0 +1*B-1
en binaire (10,1)2 = 1*21 + 0*20 +1*2-1=(2,5)10
en octale(10,1)8 = 1*81 + 0*80 +1*8-1=(8,125)10
en hexadécimal (10,1)16 = 1*161 + 0*160 +1*16-1=(16,0625)10
• Incertitude constant =2-m n=3 m=0 n=2 m=1 n=1 m=2 n=0 m=3
• Pour d’autres n et m fixes, la même opération à différentes interprétations selon les valeurs de n et m
30
Valeurs: réel (virgule flottant)
• virgule flottante : la position de la virgule n'est pas fixe. Ces nombres sont des
approximations de nombres réels. Ecriture sous cette forme mantisse * Bexposant
Avec mantisse d0 d-1 d-2 d-m avec m fixe et exposant dn-1 dn-2 dn-3 ….. d2 d1avec n fixe
• Exemple 236,43= 0,23643 * 103
38
Un “texte” en ASCII
Cher ami,
67 104 101 114 32 97 109 105 44 (en décimal)
Il faut différencier entre
• Nombre
12 =(12)10=(00000000 001100)2
• Texte
"12" ou '12'= (49 50) 10
=(00110001 00110010)2
39
Un “texte” en UNICODE UTF-8
Cher ami,
67 104 101 114 32 97 109 105 44 (en décimal)
40
Représentation en mémoire : texte
En informatique, Un texte est une chaîne de caractères est à la fois conceptuellement une suite ordonnée de
caractères et physiquement une suite ordonnée d'unité de code (code unit exemple ASCII)
Dans une mémoire informatique, l'adresse mémoire du premier caractère est connu. Deux méthodes pour
délimiter la fin de la chaîne:
• soit elle est terminée par un caractère de fin de chaîne (zéro binaire en langage C, et on parle alors
d’ASCIIZ pour indiquer « terminé par un zéro »),
• soit le nombre de caractères est stocké en parallèle au début (BASIC,Pascal, PL/I).
Exemple mot FRANK en mémoire avec les deux méthodes
FRANK en mémoire, délimité par un caractère nul (utilisé pour afficher en écran en DOS)
F R A N K NUL k e f w
46 52 41 4E 4B 00 6B 65 66 77
FRANK en mémoire stocké avec la longueur (utilisé pour lire de clavier en DOS)
longueur F R A N K k e f w
05 46 52 41 4E 4B 6B 65 66 77
41
Encodage de l'information 1/2
• Objectif : Utilisation des codes pour représenter l'information afin de résoudre 3 types de problèmes :
• Assurer l‘ intégrité de l'information (détection et correction d'erreurs)
• Codes autovérificateurs (contrôle de parité ou somme de contrôle ), exemple code ASCII : 7 bits étaient utilisés
le bit 8 bits est la somme de nombre de 1 dans le code.
• Codes autocorrecteurs (double parité(2 bit ligne et colonne), hamming, codes polynomiaux).
• Minimiser la taille de l'information (compression), (Codage de Huffman)
• Garantir la sécurité de l'information (encryptage/chiffrement).
42
Encodage de l'information 2/2
Codage de Huffman
• consiste a remplacer les caractères les plus fréquents par des codes courts et les
caractères les moins fréquents par des codes longs
• utilise la notion de code préfixe
43
Méthode de codage de Hoffman 1/3
• exemple : "recherchechatchatain"
1. Construction du tableau :Il faut compter tout d’abord tous les caractères du fichier a coder et affecter a chacun
d’entre eux son ≪ poids ≫ d’apparition. On obtient alors un tableau ou chaque case correspond a un caractère
et son poids, tout étant range dans l'ordre du codage ASCII (ordre alphabétique)
caractère a c e h i n r t
poids 3 4 3 4 1 1 2 2
2. Construction de l'arbre: Chacune des cellules du tableau sera une feuille de cet arbre. Pour compléter cet
arbre, il faut associer les feuilles (caractères ensemble). Dans chaque étape on va associer les caractères ayant
le plus petit poids pour former un nouveau nœud.(chercher la plus petite somme de deux poids possible)
• Ainsi, on commence par choisir les deux caractères ayant les ≪ poids ≫ les plus faibles. En cas d'égalité
entre différents ≪ poids ≫, on choisit en priorité le premier caractère dans l'ordre correspondant au codage
ASCII.
• Apres cela, on ajoute un nœud à l'arbre avec la somme des deux poids des (feuilles) caractères (ou
nœud)choisis précédemment.
• On réitère le processus en considérant l'arbre obtenu (ôte des deux caractères précédemment sélectionnes
mais avec le nœud supplémentaire). En cas d'égalité entre différents ≪ poids ≫, on choisit en priorité une
somme de deux feuilles que une somme de feuille-nœud selon l'ordre correspondant au codage ASCII.
• Ensuite, on refait ainsi pour tous les caractères suivants jusqu'au dernier.
3. Association bits/lettres : Une fois l'arbre termine on va associer un bit aux branches de l’arbre, c'est-a-dire que
l’on va choisir, par convention, que les branches de gauche correspondent a 0 et que les branches de droite 44
•
Méthode de codage de Hoffman
exemple : "recherchechatchatain" 2 Construction de l'arbre (suit exemple):
2/3
1) poids 1+1>=1 deux nœuds successives de 1 2) poids 2+2 >=2 deux nœuds successives de 2
3) poids 2+3 >=3, on ajout le 1er nœud dans 4) poids 4+3>=5 , le plus proche dans l’ordre ASCI
l'ordre ASCI nœud (a) au racine 2 sont (c) et (e)
cacher
cacher
cacher
cacher
45
Méthode de codage de Hoffman 3/3
• exemple : "recherchechatchatain" 3 Association bits/lettres(suit exemple):
caractère code
a3 101
c4 111
e3 110
h4 00
i1 1000
n1 1001
r2 010
t2 011
Nombres fractionnaires
(virgule fixe, virgule
données
flottante(mantisse, base,
exposant))
51
Opérations logiques - Algèbre de Boole
(Représentation graphique : logigramme )
Représenter une fonction logique sous la forme d'un logigramme revient à réaliser son schéma de câblage à
l'aide des portes logiques.
• Exemple 1:
• Représenter le logigramme de la fonction Exemple1: f1=ab+cd
52
Opérations logiques - Algèbre de Boole (résumé des propriétés )
• Associativité • Redondance
Comme avec les opérations habituelles:
• Complémentarité
• Éléments neutres
53
Opérations logiques - Algèbre de Boole (Simplification
de l'écriture des fonctions logiques )
• Méthodes des minterms et des maxterms
• A l'aide des théorèmes précédents, il est possible d'exprimer toute fonction logique a l'aide des
operateurs NON, ET, OU.
• L'expression algébrique obtenu est dite forme normale (ou canonique).
• Terme somme : fonction composée uniquement de sommes (A + B + C)
• Terme produit : fonction composée uniquement de produits (A . B . C)
• Maxterm : dans un terme somme où chaque variable est présente une fois exactement.
• Minterm : dans un terme produit où chaque variable est présente une fois exactement.
• Le minterm comporte exactement le nombre d'entrées du circuit. Le nombre de minterms pour
un terme produit est 2 élevé à la puissance du nombre d'entrées du circuit.
54
Opérations logiques - Algèbre de Boole (Simplification de
l'écriture des fonctions logiques )
• Exemple Méthodes des minterms et des maxterms
55
Opérations logiques - Algèbre de Boole (Simplification
de l'écriture des fonctions logiques )
• Simplification algébrique
56
Opérations logiques - Algèbre de Boole (Simplification
de l'écriture des fonctions logiques )
• Simplification par la méthode de Karnaugh
• Basée sur l'inspection visuelle de tables judicieusement construites (table de vérité a 2 dimensions).
• On attribue la valeur 1 aux cases correspondantes aux états d‘entrée ou la fonction est vraie, 0 si faux ou on laisse
vide si c’est un cas indéterminé x (on considère que la valeur soit 1 ou 0 selon le besoin pour avoir le plus
intéressant regroupement).
• Regroupement par blocs rectangulaires de 2, 4 ou 8 variables, des cases a 1 adjacentes.
• Attention la table se referme sur elle-même.
• Une case à 1 peut appartenir à plusieurs blocs.
• Blocs les plus gros possibles (on utilise un bloc une seule fois).
• Pour chaque bloc :
• Si une variable prend comme valeur 0 et 1, on ne la prend pas en compte.
• On garde les variables dont la valeur ne varie pas.
• Operateur = ET(*).
• OU (+)de tous les termes de tous les blocs.
57
Opérations logiques - Algèbre de Boole (Simplification de
l'écriture des fonctions logiques ) 1/4
• Exemple un circuit qui calcule d’addition
On a f(a,b)= a𝑏 + 𝑎𝑏 + 𝑎𝑏
avec simplification algébrique f(a,b)=a𝑏 + 𝑎𝑏 + 𝑎𝑏 + 𝑎𝑏 = 𝑎(b+𝑏) + 𝑏(𝑎 + 𝑎)=a+b
Avec table de Karnaugh
f(a,b)=a+b
58
Opérations logiques - Algèbre de Boole (Simplification de
l'écriture des fonctions logiques ) 2/4
• Exemple un circuit qui a f(a,b,c)=𝑎𝑏𝑐 + 𝑎𝑏𝑐 + abc +𝑎𝑏𝑐 + a𝑏𝑐
Simplification avec table de Karnaugh
f(a,b,c)=a+𝑏𝑐
59
Opérations logiques - Algèbre de Boole (Simplification de
l'écriture des fonctions logiques ) 3/4
Simplification table de vérité avec table de Karnaugh
f(a,b,c)=ab+𝑐
60
Opérations logiques - Algèbre de Boole (Simplification de
l'écriture des fonctions logiques ) 4/4
Simplification avec table de Karnaugh
f(a,b,c)=𝑏𝑑+cd+a𝑏
61
Opérations logiques - Algèbre de Boole
(deuxième méthode regroupement des 0)
• Regroupement par blocs rectangulaires de 2, 4 ou 8 variables, des cases a 0 adjacentes.
• Attention la table se referme sur elle-même.
• Une case à 0 peut appartenir à plusieurs blocs.
• Blocs les plus gros possibles (on utilise un bloc une seule fois).
• Pour chaque bloc :
• Si une variable prend comme valeur 0 et 1, on ne la prend pas en compte.
• On garde les variables dont la valeur ne varie pas.
• Operateur = OU(+).
• ET(*) de tous les termes de tous les blocs.
62
Opérations logiques - Algèbre de Boole (deuxième
méthode regroupement des 0) exemple
f(a,b,c)=a
64
Circuit logique
• Représentation d'un circuit électronique. Exécute des opérations sur des variables logiques, transporte et traite des
signaux logiques.
• Les circuits des machines électroniques modernes ont 2 états d‘équilibre 0 et 1 (i.e., 2 niveaux de tension) ) signal
logique
• Une ligne permet de transporter un signal logique
• L’échelle d’intégration actuel d’un transistor est 65 nanomètres, mais il y’a une technologie très prometteuse pour
l’avenir le nanotransistors (nanotubes de carbone) dont la taille n’est que de quelques dizaines d’atomes – 500 fois plus
petits que les transistors actuels !
65
Circuit logique
• On distingue 2 catégorie de circuit logique:
• Un circuit combinatoire :état de ses sorties ne dépend que l’état des
entrées table de vérité ou un tableau de Karnaugh,
• Un circuit séquentiel, il dépend non seulement des entrées, mais aussi de
l’état précédant du sorties. Il est donc impossible de représenter avec un
tableau de Karnaugh.
66
Circuit logique
• Il existe deux grandes familles de la logique :
• la logique TTL et sa série 74XX. baser sur les transistor bipolaire
67
Fonctionnement: exemple inverseur
• décharge et charge de la capacité de sortie d’un inverseur
• Si E=0 S=5V après le temps de charge
• Si E=5V S=0V après le temps de décharge
68
Structure interne de différentes portes de base
• Pour des raisons électrique et de fabrications on utilise souvent les ports suivants:
• Remarque : Pour réaliser une porte OR ou AND, on utilisera une porte NOR ou NAND suivie d’un inverseur.
69
les principales sociétés réalisant design et
fabrication de composants microélectronique
70
Point mémoire élémentaire:circuit logique (séquentiels )
Les circuits séquentiels possèdent des rétroactions : les signaux de sortie ne dépendent pas uniquement
des entrées mais aussi de leur séquence. Le circuit se rappelle des entrées et des états précédents : il a une
mémoire du passe
Les bascules sont les circuits séquentiels élémentaires permettant de mémoriser une information binaire
(bit) sur leur sortie. Elles constituent le point mémoire élémentaire. Elles peuvent être synchrones (si Ajout
de la notion de temps (horloge))ou asynchrones mais toutes ont au minimum trois modes de
fonctionnement (lecture, mémoriser 0, mémoriser 1)
Les éléments de base sont les bascules et une association de bascules nous permettront de construire des
registres, des compteurs, de décompteurs et des diviseurs.
Plusieurs type de bascule flip-flop, RS, RSh, D, JK
71
La mémoire :circuit logique (séquentiels )
Un automate fini est une machine abstraite qui est un outil fondamental en mathématiques discrètes et
en informatique. On les retrouve dans la modélisation de processus, le contrôle, les protocoles de
communication, la vérification de programmes, la théorie de la calculabilité, dans l'étude des langages
formels et en compilation.
Un automate fini est caractérisé, entre un temps t et t + 1 par :
Un automate fini ou automate fini non déterministe (AFN) A sur un alphabet A est un quadruplet
Ou
Q est un ensemble fini d'états
est l'ensemble des transitions,
est l'ensemble des état initiaux,
est un ensemble d'états finals ou terminaux.
Diagrammes d‘états (représentation graphique : état=rond, transition=flèche )
72
,
73
La mémoire :circuit logique (séquentiels )
Automate ayant 2 états stables.
Circuit permettant de mémoriser 1 bit.
Possède une variable codée sur 1 bit.
Valeur conservée et modifiable dans le temps.
Plusieurs types de bistables :
Asynchrone (bascule RS) : Les sorties sont recalculées a chaque changement des valeurs en
entrées.
Synchrone (bascule RSh, D, flip-flop) : Les sorties sont recalculées en fonction d'un signal
d'horloge en entrée (notée C ou ck pour clock).
74
La mémoire :circuit logique (séquentiels S R Qn /Qn
0 0 Qn-1 /Qn-1
):Bascule RS 1/4 0 1 0 1
1 0 1 0
1 1 1 1
Table de vérité
Qn-1 à Qn S R
0à0 0 X
0à1 1 0
1à0 0 1
1à1 X 0
Table de transition de Qn-1 à Qn
/Qn-1 à /Qn S R
0à0 X 0
0à1 0 1
1à0 1 0
1à1 0 X
Table de transition /Qn-1 à /Qn 75
La mémoire :circuit logique (séquentiels )
Bascule RSh 2/4
• Dans une bascule R-S asynchrone, les ordres
appliqués aux entrées R et S provoquent,
immédiatement, le changement d’état
correspondant. Par contre, dans une bascule R-
S synchrone, l’exécution de l’ordre n’intervient
qu'avec l’impulsion d’horloge.
Qn-1 à Qn S R H
0à0 0 X X
0à1 1 0 1
1à0 0 1 1
1à1 1 X X
Table de transition de Qn-1 à Qn
76
La mémoire :circuit logique (séquentiels ) Bascule D 3/4
• La bascule D est dérivée de la bascule
R.S.H. Elle possède, quant à elle, une
seule entrée «D» pour positionner les
sorties. Pour cela on place un inverseur
entre l'entrée S et l'entrée R de la
bascule R.S.H. L'entrée S devient l'entrée
D de la bascule
• Selon la forme de H on distingue 2 type:
-verrou D (DLATCH) -Flip Flop
77
La mémoire :circuit logique (séquentiels ) Bascule JK 4/4
• Les bascules JK sont des bascules
RSH pour lesquelles la
combinaison %SR=%11 n’est pas
interdite
78
La mémoire :circuit logique(exemple memoire registre)
• Plusieurs bistable en parallèle permettent de mémoriser plusieurs bits
d'information. Ce sont des registres. Ils sont utilises dans un processeur
pour stocker des valeurs lors de l‘exécution d'un programme.
79
Exemple des circuits :Multiplexeur
• Multiplexeur
• X entrées, 1 sortie
• Selon une adresse s (n bits),
• la sortie f prend la valeur de l’une des entrées
80
Exemple des circuits :Demultiplexeur
• Démultiplexeur
• 1entrée, X sorties
• Selon une adresse s (n bits), une seul des X sorties prend la valeur de l’entrée
82
Exemple des circuits :encodeur
• Encodeur
• Active un code selon l’une des X entrées actives
• 2n entrées, 1 entrée active (valeur 1), les autres sont toutes désactivées (valeur 0)
• Sortie : sur n bits
83
Autres circuits :Circuit de décalage - comparateur
• Compteur binaires
• Circuit de décalage
• Décalage de position d’un bit (à droite ou à gauche) sur les n bits
• Circuit de rotation
• Rotation de position d’un bit (à droite ou à gauche) sur les n bits
• Comparateur
• Compare deux nombres de n bits, nommer généralement A et B
• 3 sorties
• Une seul sortie est mis à 1 E (si égale), G(si grand); P (si petit)
84
Modèle de von Neumann: Turing machine – 1936
85
Le modèle de Von Neumann
• Von Neumann
CPU
MÉMOIRE
Unité central ES ES ES
• Harvard
BUS INSTRUCTIONS
•••••
MÉMOIRE MÉMOIRE
CPU ES ES ES •••••
DONNÉES INSTRUCTION
BUS DONNÉES 86
L’unité centrale :CPU(Le processeur)
Architecture de processeur:
• CISC (Complex Instruction Set Computer) : choix d'instructions aussi proches que possible d'un langage de
haut niveau ;
• RISC (Reduced Instruction Set Computer : choix d'instructions plus simples et d'une structure permettant une
exécution très rapide) ;
• VLIW (Very Long Instruction Word) ;
• DSP (Digital Signal Processor).
Generalement le processeur est construit autour de deux éléments principaux :
• Unité de Commande
• Unité de Traitement
87
L’unité centrale :Schéma général du fonctionnement
du CPU
88
L’unité centrale :CPU(Unité de commande)
• Unité de Traitement
Unité Arithmétique et Logique (UAL) Réalise effectivement les opérations arithmétiques (+,-,*,/) et
logiques (NOT, AND, OR, XOR).
• Vue comme une fonction à 3 paramètres
• 1 opération,
• 2 arguments.
• Elle renvoie un résultat.
89
Réalisation :additionneur 1bit
• Un additionneur 1 bit à la table de vérité:
• S :la valeur de somme
• R :la valeur de retenu
• Som=𝐴𝐵 + 𝐴𝐵=A xor B
• R= AB
90
Exemple :demi Additionneur
Un additionneur de 4 bit par exemple est un bloc de 4 additionneur de 1 bit dit demi additionneur qui
possède 3 entrées Ai,Bi,Ri-1 et 2 sortie Si et Ri (avec i varie de 1 à 4)
Avec Si=Ai xor Bi xor Ri-1 et Ri= Ai.Bi + Ri-1(Ai xor Bi)
Exemple Simple UAL de 1bit
• Simple UAL de 1bit qui fait les opérations logiques(ET,OU,NON) et une seul opération
arithmétique addition F0 F1 Sortie
• table des fonctions 0 0 A.B (logique)
0 1 A ou B (logique)
1 0 𝐵 (logique)
1 1 A+B (arithmétique)
92
Exemple réel: UAL 4 bits 74181 (TTL)1/2
93
Exemple UAL 4 bits 74181 2/2
• table des fonctions
94
L’unité centrale :CPU(Unité de commande)
• Unité de commande
Ensemble des dispositifs coordonnant le fonctionnement de l'ordinateur afin de lui faire exécuter la
suite d'Operations spéciales dans les instructions du programme unité de commande
• Compteur ordinal (CO) : registre contenant l'adresse en mémoire ou est stocker l'instruction a
chercher ;
• Registre d'instruction (RI) : reçoit l'instruction (opération + opérande) qui doit être exécutée ;
• Décodeur : détermine qu'elle opération doit être exécutée, parmi toutes les opérations possibles ;
• Séquenceur : génère les signaux de commande
• Horloge : émet des impulsions électroniques régulières, synchronisant ainsi toutes les actions du
CPU.
95
Décodeur et Décodage d’adresses
• La multiplication des périphériques autour du microprocesseur oblige la présence d’un décodeur d’adresse chargé
d’aiguiller les données présentes sur le bus de données.
• En effet, le microprocesseur peut communiquer avec les différentes mémoires et les différents boîtier d’interface.
Ceux-ci sont tous reliés sur le même bus de données et afin d’éviter des conflits, un seul composant doit être
sélectionné à la fois.
• Lorsqu’on réalise un système microprogrammé, on attribue donc à chaque périphérique une zone d’adresse et une
fonction « décodage d’adresse » est donc nécessaire afin de fournir les signaux de sélection de chacun des
composants.
• Remarque : lorsqu’un composant n’est pas sélectionné, ses sorties sont mises à l’état « haute impédance » afin de ne
pas perturber les données circulant sur le bus. ( elle présente une impédance de sortie très élevée = circuit ouvert96).
La mémoire :definitions et presentations
Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de conserver et de restituer des informations
(instructions et variables).
Une mémoire peut être représentée comme une armoire de rangement constituée de différents tiroirs. Chaque tiroir
représente alors une case mémoire qui peut contenir un seul élément : des données. Le nombre de cases mémoires pouvant
être très élevé, il est alors nécessaire de pouvoir les identifier par un numéro. Ce numéro est appelé adresse. Chaque
donnée devient alors accessible grâce à son adresse
type d’accès au donnée une case mémoire:
accès directe par adresse: on accède directement à n'importe quelle information dont on connaît l'adresse et que le
temps mis pour obtenir cette information ne dépend pas de l'adresse.
accès séquentiel :pour accéder à une information sur bande magnétique, il faut dérouler la bande en repérant tous les
enregistrements jusqu'à ce que l'on trouve celui que l'on désire. On dit alors que l'accès à l'information est séquentiel.
Le temps d'accès est variable selon la position de l'information recherchée.
accès semi-séquentiel :combinaison des accès direct et séquentiel. Pour un disque magnétique par exemple l'accès à la
piste est direct, puis l'accès au secteur est séquentiel. adresse Case mémoire
0=000
1=001
2=010
3=011
4=100
5=101
6=110
97
7=111 0001 1010
Mémoire: type d’accès au données(accès direct)
• accès direct : les informations ont une adresse propre unique. adresse Case mémoire
0=000
1=001
2=010
3=011
4=100
• Exemple : Chronogramme d’un cycle de lecture 5=101
6=110
7=111 0001 1010
98
Mémoire: type d’accès au données(accès
séquentiel )
• accès séquentiel : Le plus lent. Pour accéder à une information particulière, on est obligé de parcourir toutes
celles qui la précèdent.
• Cas particulier de fonctionnement de pile:
Pour enlever une assiette il faut enlever tous les assiette au dessus.
99
La mémoire :Caractéristiques
Adresse : valeur numérique désignant un élément physique de mémoire (exemple adresse d'un mot).
Capacité : (taille) nombre d'information que la mémoire peut contenir.
Vitesse :
Temps d'accès : temps de l’exécution d'une opération de lecture ou d’écriture:
– accès séquentiel : Le plus lent. Pour accéder à une information
particulière, on est obligé de parcourir toutes celles qui la précèdent.
– accès direct : les informations ont une adresse propre.
– accès semi-séquentiel : combinaison des accès direct et séquentiel
Cycle mémoire : temps minimal entre 2 accès (plus long que le temps d’accès).
Débit : nombre d'informations lues ou écrites par secondes.
Volatilité : caractérise la permanence des informations dans une mémoire (i.e., ce qui ce passe si on coupe le
courant !)
Type d’opération :
Mémoire vive : lecture / écriture
Mémoire morte : lecture seulement
100
La mémoire :Différents types de mémoire
Une mémoire vive (RAM de l'anglais Random Access Memory) désigne une mémoire où chaque
information stockée peut en tout temps être consultée, ou modifiée.
Une mémoire morte (ROM, de l'anglais Read Only Memory) est une mémoire où les informations
ne peuvent pas être modifiées(exp BIOS).
Une mémoire volatile est une mémoire où les informations sont perdues lors de la mise hors
tension de l'appareil.
une mémoire rémanente ou non volatile est une mémoire où les informations sont conservées
même après la mise hors tension de l'appareil.
Une mémoire flash est une mémoire rémanente dont le contenu peut être intégralement effacé en
une seule opération. Les premières mémoires de ce type pouvaient être effacées par une
exposition à l'ultraviolet.
101
La mémoire :Utilisation
Pour des raisons économiques, les mémoires sont en général divisées en plusieurs familles traitées, la
plupart du temps, différemment par le système d'exploitation. Par ordre de coût croissant, on peut
distinguer :
Une mémoire de masse ou mémoire de stockage sert à stocker à long terme des grandes quantités
d'informations. Les technologies les plus courantes des mémoires de masse sont électromécaniques,
elles visent à obtenir une capacité de stockage élevée à faible coût et ont généralement une vitesse
inférieure aux autres mémoires ;
La mémoire vive est l'espace principal de stockage, dont le contenu disparaît des la mise hors tension de
l'ordinateur ;
Une mémoire cache sert à conserver un court instant des informations fréquemment consultées. Les
technologies des mémoires caches visent à accélérer la vitesse des opérations de consultation. Elles ont
une très grande vitesse, et un coût élevé pour une faible capacité de stockage ;
La registre de processeur est intégrée au processeur. Ce type de mémoire est très rapide mais aussi très
cher et est donc réservé à une très faible quantité de données.
102
Principe :Hiérarchie des mémoires
• Depuis le début des années 80, une des solutions utilisées pour masquer cette latence est de disposer une mémoire
très rapide entre le microprocesseur et la mémoire. Elle est appelée cache mémoire. On compense ainsi la faible vitesse
relative de la mémoire en permettant au microprocesseur d’acquérir les données à sa vitesse propre.
• Soit la donnée ou l’instruction requise est présente dans le cache et elle est alors envoyée directement au
microprocesseur.
• soit la donnée ou l’instruction n’est pas dans le cache, et le contrôleur de cache envoie alors une requête à la mémoire
principale. Une fois l’information récupérée, il la renvoie au microprocesseur tout en la stockant dans le cache.
103
La mémoire :Hiérarchie des mémoires
Architecture Von Neumann
Mémoire Mémoire Mémoire Mémoire Registres
non-volatile volatile cache cache CPU
(disque dur) (RAM) (niveau 2) (niveau 1) (niveau 0)
Architecture Harvard
Mémoire Cache Cache
volatile instructions instructions
Mémoire instructions (niveau 2) (niveau 1)
non-volatile
(disque dur) Mémoire Cache Cache Registres
volatile données données CPU
données (niveau 2) (niveau 1) (niveau 0)
105
La mémoire :Types de mémoires (mémoire cache 2/4)
la mémoire cache (ou antémémoire) utilisée comme mémoire tampon(buffer) entre le CPU et la
mémoire centrale :
Grande vitesse
Faible capacité
Volatile
Intégrée dans le processeur et cadencée a la même fréquence
Accès par le contenu en utilisant l'adresse en mémoire centrale comme clé.
Divers niveaux de mémoire cache: Mémoire cache des microprocesseurs L1, L2 et L3
Généralement de type SRAM, Le bit mémoire d'une RAM statique (SRAM) est composé d'une
bascule. Chaque bascule contient entre 4 et 6 transistors.
107
La mémoire :Types de mémoires mémoire de stockage 4/4)
Ce sont des mémoires utilisées pour le stockage permanent de l'information, constituées de périphériques
divers (disque dur, supports optiques ou magnétiques, etc.)
Vitesse lente
Grande et très grande capacité
Non volatile
Mémoires a accès séquentiel et semi-séquentiel
Les mémoires de masse sont utilisées pour la sauvegarde et l'archivage de l'information
Mémoire flash est une mémoire de masse à semi-conducteurs réinscriptible de type EEPROM (mémoire
morte effaçable électriquement et programmable)
108
La mémoire :Notion de hiérarchie mémoire
109
La mémoire :Gestion de mémoire 1/4
• La Gestion de l’espace de la mémoire centrale (RAM)ou de stockage (disque dur)ce base sur trois principe:
• Le partitionnement
• La pagination
• La segmentation
• La protection
• Le partitionnement
Le partitionnement de la mémoire, consiste à découper, de façon arbitraire
et « définitive », l’espace mémoire centrale en plusieurs partitions
(ne pas confondre avec la partition du disque dur).
110
La mémoire :Gestion de mémoire 2/4
• La pagination:
• La technique de la pagination, qui rappelle celle du partitionnement statique, utilise un découpage de la mémoire en
segments de même taille, eux-mêmes décomposés en petits blocs d’espace mémoire (128, 256 octets…) appelés pages.
Pas confondre avec la pagination de disque dur dont la taille de page diffère selon le type de disque et type de partition
(FAT32, NTFS,etc.)
• Translation adresses linéaires (dans la table des page)
en adresses physiques( réel )
111
La mémoire :Gestion de mémoire 3/4
• La segmentation
La segmentation est une technique qui consiste à diviser l’espace mémoire en N segments de longueur variable, un
numéro étant attribué à chacun des segments de l’espace adressable.
112
Mappage adresse virtuel / réel 3/4
La mémoire utilise les deux technique la
segmentation et la pagination, l’adresse
virtuel est alors traduite en une adresse
physique en effectuant le calcul
Adresse virtuelle:
numéro page+ déplacement
Adresse physique:
numéro frame+ déplacement
• Dans le processeur L’unité de gestion
mémoire (MMU ou Memory
Managment Unit) permet de
complètement séparer les adressages
physique et logique
• mappage mémoire est la correspondance
entre l’adresse virtuel et physique :
113
La mémoire :Gestion de mémoire 4/4
• La protection consiste à introduire la notion de privilège, généralement numérotés de 0 à 3. Le niveau 0 est le niveau de
privilège le plus élevé et le niveau 3 le plus faible. La protection mémoire repose sur les segments (pas confondre avec
protection partitions exemple C: en windows 7) : le matériel n’autorise pas à un programme qui s’exécute dans un segment,
d’accéder aux segments de privilège supérieur.
• Un anneau de protection (ou ring) est l'un des niveaux de privilèges imposés par l'architecture d'un processeur (ou system
exploitation).
• Le terme « anneau de protection » vient du fait que l'on peut voir les différents modes de privilège comme des cercles
concentriques ou le mode le plus privilégié est à l'intérieur et les modes moins privilégiés vont vers l'extérieur.
• Exemple :Le Pentium , qui est dérivé du 80486, est un microprocesseur CISC capable d'exécuter un programme dans
différents modes de fonctionnement :
• le mode protégé multitâche permet d'utiliser toute la puissance du processeur. Les registres sont des registres 32 bits.
• le mode virtuel permet à des applications 8086 (environnement DOS) de s'exécuter dans le mode protégé,
• le mode réel correspond au fonctionnement d'un 8086. Les registres 32 bits (EAX, ...) ne sont pas disponibles, on utilise
des registres de 16 bits (AX, ...) et on ne peut accéder qu'à 1 Mo de mémoire
114
Les entrées/sorties dans l'architecture de Von Neumann
Unités d‘entrées-sorties
Transfèrent les informations entre l‘unité centrale et les unités périphériques.
Bus
Ensemble des lignes de liaison qui assurent les communications entre
les différents composants de l'ordinateur. (intérieur du processeur, carte mère, etc)
Unités périphériques
Unités d‘ échange de données avec le monde extérieur (écran, clavier, souris, imprimante, modem) et mémoires auxiliaires
(disques) qui permettent de stocker de façon permanente. Chaque périphérique est associe a un contrôleur.
115
Bus: les differents bus existant 1/2
le SMBUS, utilisé pour communiquer avec les ventilateurs, les sondes de températures et les sondes de tension
présentes un peu partout dans notre ordinateur : la vitesse des ventilateurs ne se règle pas toute seule comme
par magie ;
les bus USB, le FireWire (1394) ;
le bus PCI, utilisé pour le cartes sons et qui servait autrefois à communiquer avec les cartes graphiques ;
le bus AGP, autrefois utilisé pour les cartes graphiques ;
le bus PCI-Express, utilisé pour communiquer avec des cartes graphiques ou des cartes sons ;
le bus P-ATA, S-ATA et ses variantes : eSATA, eSATAp, ATAoE , utilisé pour communiquer avec le disque dur ;
le bus Low Pin Count, qui permet d'accéder au clavier, aux souris, au lecteur de disquette, et aux ports parallèles
et séries ;
l'Intel QuickPath Interconnect et l'HyperTransport, qui relient les processeurs récents au reste de l'ordinateur ;
le bus SCSI et ses variantes (SCSI Parallel, Serial Attached SCSI, iSCSI) qui permettent de communiquer avec
des disque durs ;
le bus MIDI, une véritable antiquité oubliée de tous qui servaient pour les cartes sons ;
notre fameux RS-232 utilisé dans nos ports série ;
et enfin le bus IEEE-1284 utilisé pour le port parallèle
116
Bus: organisation des bus 2/2
On considère qu'il existe deux générations de bus bien distinctes :
une première génération avec un bus unique, la plus ancienne ;
117
Les entrées/sorties: Types de liaisons
Parallèle
Série
en mode synchrone, l’émetteur et le récepteur possède une horloge synchronisée qui cadence la
transmission. Le flot de données peut être ininterrompu.
En mode asynchrone, la transmission s’effectue au rythme de la présence des données. Les caractères
envoyés sont encadrés par un signal Start et un signal stop
118
Les entrées/sorties:Techniques d’échange de données
Il existe 2 modes d’échange d’information :
Le mode programmé par scrutation ou interruption où le microprocesseur sert d’intermédiaire
entre la mémoire et le périphérique
Le mode en accès direct à la mémoire (DMA) où le microprocesseur ne se charge pas de l’échange
de données.
119
Les entrées/sorties:Techniques d’échange de données
(mode interruption)
Lorsque le périphérique est prêt a effectuer un échange élémentaire, il envoi un signal au CPU pour "interrompre"
l‘exécution en cours. Le contrôle du CPU est renvoyé a un programme de traitement de l‘évènement stocke en mémoire a
partir d'une adresse liée a l'interruption.
Le CPU n'attends pas ;
Temps perdu a échanger les programmes et leur contexte.
Un dispositif, incorpore au niveau du séquenceur, qui enregistre et traite les signaux d'interruption envoyés au CPU
Cycle d’interruption
1. Arrêter le programme en cours ;
2. Sauvegarder l‘état de la machine ;
3. Exécuter le programme de service de l'interruption ;
4. Rétablir l‘état de la machine ;
5. Reprendre l‘exécution du programme interrompu.
120
Les entrées/sorties:Techniques d’échange de données
(mode Accès direct a la mémoire (DMA))
Le DMA est connecte entre un contrôleur de périphérique et le bus système, permettant ainsi au
périphérique d‘accéder a la mémoire sans passer par le CPU.
• Transfère des blocs de données ;
• Prioritaire sur le CPU;
• Intégrité des données non vérifiée ;
• Possède son propre RA et RM ainsi qu'un compteur
(pour savoir quand signaler au CPU que les données
sont prêtes).
121
Récapitulatif composant ordinateur
122
Architecture logicielle du processeur
Objectifs du chapitre
1 Manipuler le langage de programmation le plus bas niveau qu'offre la machine.
2 Utiliser des jeux d'instructions pour écrire des mini-programmes.
3 Comprendre le mécanismes d'appel de procédure (sous-programme) et le
fonctionnement de la pile et du tas.
4 Percevoir les principes de programmation universel (qq soit le langage).
5 Illustrer la programmation assembleur avec un vrai langage.
123
Pourquoi ? [Strandth & Durand, 2005]
Le rôle d'un informaticien n'est pas de concevoir des architectures, en revanche il a besoin d'un
modèle de fonctionnement de l'ordinateur qui lui donne une bonne idée de la performance de son
programme et de l'impact que chaque modification du programme aura sur sa performance.
Assimiler un tel modèle suppose un certain nombre de connaissances sur le fonctionnement d'un
ordinateur, notamment le mécanisme d'appel de fonction, la transmission des paramètres d'une
fonction a l'autre, l'allocation ou la libération d'espace mémoire, etc.)
Apprendre l'architecture des ordinateurs et un langage machine qui permet cela.
124
Niveaux de programmation
Langage machine
L'assembleur (i.e., langage d'assemblage) est le premier langage non binaire accessible au
programmeur ;
Code mnémoniques et symboles ;
L'assembleur (i.e., programme traducteur) converti le langage d'assemblage en langage machine ;
Permet d'exploiter au maximum les ressources de la machine ;
Dépend de la machine.
125
Structure des instructions niveau machine
Les ordinateurs sont capables de faire un certain nombre d‘opérations simples. Par exemples :
additionner 2 nombres ;
tester le signe d'une valeur numérique ;
copier le contenu d'un registre a un autre ;
stocker en mémoire un résultat.
Ces opérations de bases font l'objet d'instructions spécifiques, chaque famille de processeurs utilise un jeu
d'instructions différent
Instruction
Une instruction doit fournir au CPU toutes les informations pour déclencher une opération :
Sous forme de codeOperation operand1 operand2 exemple pour faire A+B l’opération est ADD A,B
Code opération :
Opérande(s) : adresses + résultat + instruction suivante.
Exemple un processeur de la famille x86 reconnaît une instruction du type:
Langage Machine (binaire): 10110000 01100001
Langage Machine ( hexadécimal ): B0 61
En langage assembleur: mov AL,0x61
126
Jeu instruction: opérations fondamentales
déplacement dans la mémoire :
chargement d'une valeur dans un registre ;
déplacement d'une valeur depuis un emplacement mémoire dans un registre, et inversement ;
calcul :
addition, ou soustraction des valeurs de deux registres et chargement du résultat dans un registre ;
combinaison de valeurs de deux registres suivant une opération booléenne (ou opération bit à bit) ;
modification du déroulement du programme :
saut à un autre emplacement dans le programme (normalement, les instructions sont exécutées
séquentiellement, les unes après les autres)
saut à un autre emplacement, mais après avoir sauvegardé l'instruction suivante afin de pouvoir y revenir
(point de retour) ;
retour au dernier point de retour ;
comparaison :
comparer les valeurs de deux registres.
127
Jeu instruction: familles et opérations
0 adresse à un seul registre registre - mémoire registre - registre mémoire - mémoire
Pile(stack) (accumulateur)
PUSH B ; Empile B LOAD B ; copie le LOAD R0, B ; copie le LOAD R0, B ; charge B ADD A, B, C ; Stocke a
PUSH C ; Empile C contenu de l'adresse B contenu de l'adresse B dans le registre R0 l'adresse A la somme B
ADD ; Additionne B dans accumulateur dans le registre R0 LOAD R1, C ; charge C + C
et C ADD C ; ajoute le ADD R1, R0, C ; R1 dans le registre R1
POP A ; Stocke le contenu de l'adresse C R0 + C ADD R2, R0, R1 ; R2
haut de la pile à à celui de STORE R1, A ; stocke ← R0 + R1
l'adresse A et dépile accumulateur, et la valeur de R1 à STORE R2, A ; stocke
stocke le résultat dans l'adresse A R2 à l'adresse A
l'accumulateur
STORE A ; stocke la
valeur de accumulateur 128
à l'adresse A
Nombre et type d‘opérandes
Nombre Nombre max Type architecture Exemple
adresse d’
mémoire opérandes
0 3 Registre-registre Alpha, ARM, MIPS, PowerPC, SPARC, SuperH,TM32
129
Endianness
• En informatique, certaines données telles que les nombres entiers peuvent être représentées sur plusieurs octets.
L'ordre dans lequel ces octets sont organisés en mémoire est appelé Endianness mémoire
…
• Gros boutiens (Big endian): octet de poids fort en premier
exemple 0xA0B70708 en notation hexadécimales A A0
A+1 B7
A+2 07
A+3 08
A0B7O708
…
Exemple famille : Motorola 68K, PowerPC, MIPS,…
registre
Big-endian
• Petits boutiens (Little endian):octet de poids faible en premier registre mémoire
• exemple 0xA0B70708 en notation hexadécimales A0B7O708
…
A 08
A+1 07
A+2 B7
Exemple famille : intel, ARM, Alpha…
A+3 A0
130
Little endian
…
Jeu instruction: Types d'architecture
Actuellement l’architecture des microprocesseurs se composent de deux grandes familles :
architecture CISC (Complex Instruction Set Computer)
architecture RISC (Reduced Instruction Set Computer)
131
Jeu instruction: exemple types d'architecture
132
Architecture
Intel x86
On peut distinguer :
- Les registres généraux, Ils
servent principalement aux
calculs :EAX, EBX, ECX, EDX
- Les registres d'adressage,
Ils servent aux adressages
d'opérandes :ESI, EDI, EBP
- Les registres de commande
ESP, FLAGS, EIP (Pointeur
d’instruction ), IR
(Instruction registre)
- trois bus différents :
• Bus d’adresses, MAR
• Bus de données MDR
• Bus de contrôle
133
PIPELINE (chaîne de traitement)
• PIPELINE =plusieurs Cycle d’exécution des instructions parallèle
• Notation générale des phases de PIPLINE:
1. IF (Instruction Fetch) charge l'instruction à exécuter dans le pipeline.
2. ID (Instruction Decode) décode l'instruction et adresse les registres.
3. EX (Execute) exécute l'instruction (par la ou les unités arithmétiques et logiques).
4. MEM (Memory), dénote un transfert depuis un registre vers la mémoire dans le cas d'une instruction du type
STORE (accès en écriture) et de la mémoire vers un registre dans le cas d'un LOAD (accès en lecture).
5. WB (Write Back) stocke le résultat dans un registre. La source peut être la mémoire ou bien un registre.
• Plusieurs types de pipline selon le processeur entre autre:
• micro-contrôleurs Atmel AVR et PIC
2 étapes: Fetch+ Exec (avec les accès à la mémoire et/ou aux registres)
• IBM Stretch
3 étapes :Fetch+ Decode+ Exec (avec les accès à la mémoire et/ou aux registres)
134
PIPELINE :Microprogramme pour addition
Programme En mémoire À l'intérieur du CPU
X=X+Y Mettre Y dans l’accumulateur EAX: MAREIP (partie destination EAX)
MOV EAX,X MARIR [adresse de X] EIP (partie source)
MDRvaleur de MAR
EAXMDR
EIPEIP + 1 (adresse instruction suivant)
Mettre dans l’accumulateur EAX: MAREIP (partie destination EBX)
MOV EBX,Y MARIR [adresse de Y] EIP (partie source)
MDRvaleur de MAR
EBXMDR
EIPEIP + 1 (adresse instruction suivant)
Ajouter Z:ADD EAX,EBX MAREIP (partie destination EAX)
MAREIP (partie source EBX)
TEMPEAX+EBX (dans UAL)
EAXTEMP
EIPEIP + 1 (adresse instruction suivant) 135
Cycle d’exécution d’une instruction 1/3
136
Cycle d’exécution d’une instruction 2/3
137
Cycle d’exécution d’une instruction 3/3
138
PIPELINE et cycle d'horloge
• Classic RISC pipeline
• Par exemple si on veut exécuter 3 instructions dans un cycle de 5 phases
1. Séquençage des instructions dans un processeur sans pipeline en supposant que chaque étape met 1 cycle
d'horloge pour s'exécuter, il faut normalement 5 cycles pour exécuter une instruction, 15 pour 3 instructions :
1. Séquençage des instructions dans un processeur doté d'un pipeline à 5 étages. Il faut 9 cycles pour exécuter 5
instructions. À t = 5, tous les étages du pipeline sont sollicités, et les 5 opérations ont lieu en même temps.
139
la programmation assembleur avec un vrai
langage: intel x86
Exemples Afficher Bonjour
en syntaxe Intel x86, écrit pour l'assembleur NASM ,utilisant le jeu d'instructions i386 :
section .data ; Variables initialisées
Buffer: db 'Bonjour', 10 ; En ascii, 10 = '\n'. La virgule sert à concaténer les chaines
BufferSize: equ $-Buffer ; Taille de la chaine
section .text ; Le code source est écrit dans cette section
global _start ; Définition de l'entrée du programme
_start: ; Entrée du programme
mov eax, 4 ; Appel de sys_write
mov ebx, 1 ; Sortie standard STDOUT
mov ecx, Buffer ; Chaine à afficher
mov edx, BufferSize ; Taille de la chaine
int 0x80 ; Interruption du kernel
Syntaxe AT&T :
• Opérandes sources à gauche et destination à droite
• Constantes préfixées par $ (adressage immédiat)
• Constantes écrites avec syntaxe langage C (0x + valeur = hexadécimal)
• Registres préfixés par %
• Segmentation : [ds:20] devient %ds:20, [ss:bp] devient %ss:%bp …
• Adressage indirect [ebx] devient (%ebx), [ebx + 20h] devient 0x20(%ebx),
[ebx+ecx*2h-1Fh] devient -0x1F(%ebx,%ecx, 0x2) …
• Suffixes, b=byte=1o, w=word=2o, s=short=4o, l=long=4o, q=quad=8o, t=ten=10o, o=octo=16o=128bits (x64)
• ……
141
la programmation assembleur avec syntaxe Intel x86
• Les registres généraux, Ils servent principalement aux calculs :
• EAX, correspond à l'accumulateur
• EBX, au registre de base
• ECX, au compteur
• EDX, à l'extension de l'accumulateur
• Les registres d'adressage, Ils servent
aux adressages d'opérandes :
• ESI, index de source
• EDI, index de destination
• EBP, pointeur de base
• Les registres de commande
• ESP, pointeur de la pile
• EIP, pointeur d'instruction
• FLAGS, registre d'état
142
la programmation assembleur avec syntaxe Intel x86 flag
• Les fonctions des drapeaux de flag sont résumées dans le tableau ci-dessus :
De 21
…. ………………. ……………………………………………………………….
à13
Mis à 1 lorsque la tâche courante est associée à la tâche
14 NT Nested Task
précédente, 0 sinon.
12 & Contient un nombre qui indique le niveau de privilège du
IOPL I/O Privilege Level
13 programme en cours d’exécution
11 OF Overflow Flag Mis à 1 si une opération provoque un dépassement de capacité
Fixe le sens dans lequel seront effectuées les opérations de
10 DF Direction Flag
traitement de chaînes de caractères. STD le met à 1, CLD à 0.
9 IF Interrupt Enable Flag Mis à 1, il autorise les interruptions. S’il vaut 0, il les empêche.
8 TF Trap Flag Mis à 1, il force le processeur à fonctionner pas à pas.
Prend la valeur du bit de poids fort de l’accumulateur après un
7 SF Sign Flag
calcul.
Mis à 1 si le résultat d’un calcul (i.e. le contenu de l’accumulateur)
6 ZF Zero Flag
vaut 0.
4 AF Auxiliary Carry Flag Mis à 1 si un calcul en BCD non compacté produit une retenue.
Mis à 1 si les 4 bits de poids faible du résultat contiennent un
2 PF Parity Flag
nombre pair de 1. 143
0 CF Carry Flag Mis à 1 si un calcul produit une retenue.
la programmation assembleur avec un vrai langage: intel x86
Présentation en mémoire et registre
4 accumulateurs :
16 bits : AX, BX, CX ,DX, par exemple AX=AH(8bits)+AL(8bits)
32 bits : EAX, EBX, ECX ,EDX
64 bits : RAX, RBX, RCX, RDX
Registres d’index :
Pointeur d’instruction (EIP)
Index source ou destination(ESI, EDI)
Pointeur de Pile ou de base (ESP, EBP)
3+1 registres segment :
000000
Segment de code (CS) : contient le program en cours d’exécution Données DS
(variables)
Segment data (DS) : contient les données du programme DS:EDI
Segment stack (SS) : Le registre SS pointe sur la pile : la pile est une zone
DS:ESI
mémoire ou on peut sauvegarder les registres ou les adresses ou les
Code CS
données pour les récupérer après l'exécution d'un sous programme
(programme)
ou l'exécution d'un programme d'interruption, en général il est CS:EIP
conseillée de ne pas changer le contenu de ce registre car on risque
de perdre des informations très importantes (exemple les passages
Pile non SS
d'arguments entre le programme principal et le sous programme)
utiliser
Extra Segment (ES): utiliser lorsque l'accès aux autres registres est SS:ESP
devenu difficile ou impossible pour modifier des données, de même Pile SS:EBP
ce segment est utilisé pour le stockage des chaînes de caractères utiliser
2 20 Origine ESP 144
Adresse physique (Segmentation de la mémoire)
• Un segment mémoire est un espace d'adressage indépendant défini par deux valeurs :
• L'adresse où il commence (aussi appelée base, ou adresse de base)
• Sa taille ou son décalage (aussi appelée limite ou offset)
• Les adresses sont données sous la forme Segment : Offset
• Cette adresse de 20 bits est formée par la juxtaposition d'un registre segment (16 bits de poids fort) et d'un déplacement (offset, 16
bits de poids faible).
• Adresse physique = SEGMENT* 16+ OFFSET
• A partir de segments distincts on peut accéder à une même adresse mémoire en effet ces adresses sont identiques :
000000
Données DS
• segment : offset (variables)
DS:EDI
0005h : 0001h ==> 5h* 16+ 1h = 80 + 1 = 81
DS:ESI
0004h : 0011h ==> 4h* 16+ 11h = 64 + 17 = 81
Code CS
0003h: 0021h ==> 3h* 16+ 21h = 48 + 33 = 81 (programme)
CS:EIP
0002h : 0031h ==> 2h* 16+ 31h = 32 + 49 = 81
0001h: 0041h ==> 1h* 16+ 41h = 16 + 65 = 81
Pile non SS
0000h : 0051h ==> 0h* 16+ 51h = 0 + 81 = 81 utiliser
SS:ESP
SS:BP et SS:SP pour adresse de pile utiliser et non utiliser
Pile SS:EBP
utiliser
2 20 Origine ESP 145
la programmation assembleur intel x86: structure de programme 1/4
programme en assembleur = fichier texte (extension .asm)
organise en plusieurs SECTIONS (= segments)
sections différentes pour les données et le code
directives pour NASM≠FASM des instructions pour le processeur 000000
Données DS
(variables) CS
NASM a deux sections des données : initialises ou non initialisées
DS:EDI
une seule instruction par ligne
DS:ESI
1 ligne de code = 4 champs (certains optionnels) :
Code
étiquette: instruction opérandes ; commentaire (programme)
CS:EIP
%include "io.inc"
Section .data
; les données initialisés ici! Pile non SS
utiliser
Section .bss SS:ESP
; les données non initialisés ici! Pile SS:EBP
section .text utiliser
2 20
global CMAIN Origine ESP
CMAIN:
; le code de programme ici
xor eax, eax
ret 146
la programmation assembleur intel x86: structure de
programme 2/4 Adresse
Data
(8-bits)
Interprétation
Données initialisées : SECTION .data 0x00000
...
Utiliser une étiquette comme identificateur de donné
0x402000 0x55 Byte I1 octet 0x55
déclarer des données initialisées avec la directive : dX ...
X = b (1 octet), w (2 octets) ou d (4 octets = 1 mot). 0x402001 ‘a' msg[1] 0x61
0x402002 ‘b' msg[3] 0x62
Exemples : String
0x402003 ‘c’ msg[2] 0x63
l1 db 0x55 ; l'octet 0x55
0x402004 ‘$’ 0x24
msg db ‘abc’, ’$’ ;caractère ’$’ fin de chaine
...
tab1 dw 0x1234,0x5678 ; tableau de 2 entier chaque sur 2 octet
0x402005 0x34 2x1
F dd 0x12345678 ;réel sur 4 octet 0x123456 word
0x402006 0x12 tableau
L2 db 'ab' ; 0x61 0x62 (caracteres) entier
0x402007 0x78
A dd 1.2 ;virgule flottant word of 16-bit
B dd 1.e+10 ;virgule flottant 0x402008 0x56 words
L3 dw 'abc' ; 0x61 0x62 0x63 0x00 (chaine) ...
Remarque : Etiquette = l’identificateur de la donnée (nom de variable). 0x402009 0x78
0x402010 0x56
on peut définir des constantes non modifiables avec la directive : equ dword
0x402011 0x34
exemple : nblettres equ 26 0x402012 0x12
Illustration :exemple avec gdb SASM (commande x/26xb &l1) ...
0x505503 0xFE
JE -2 Program
0x505003 opcode
... 147
0xFFFFF
la programmation assembleur intel x86: structure de
programme 3/4
Données non initialisées : SECTION .bss
déclarer des données non initialisées avec la directive : resX
X = b (1 octet), w (2 octets) ou d (4 octets = 1 mot).
exemples (étiquettes obligatoires) :
input1: resb 100 ; reserve 100 octets
input2: resw 1 ; reserve 2 octets
input3: resd 1 ; reserve 1 mot (4 octets)
Remarque : Etiquette = identificateur de la donnée.
148
la programmation assembleur intel x86: structure de
programme 4/4
Corps du programme : SECTION .text
commencer par déclarer global l‘étiquette de début de programme (CMAIN) pour qu'elle soit visible :
SECTION .text
exemple :
global CMAIN
%include "io.inc"
CMAIN:
segment .data
; le code de programme ici
L1 dd 0x12 ; mot initialise a la valeur hexa 12
xor eax, eax
section .text
Ret
global CMAIN
CMAIN:
mov al, [L1] ; Copie l'octet situe en L1 dans AL
mov eax, L1 ; EAX = adresse de l'octet en L1
mov [L1], ah ; copie AH dans l'octet en L1
xor eax, eax
ret
150
la programmation assembleur Intel x86 mode adressage 1/4
• adressage par registre :
Utilisation des noms des registres (ax, bx, cx, ...) CPU mémoire
eflag D8
flag
• adressage immédiat : CPU mémoire
Utilisation d'une valeur donnée, d'une constante eax=0x0050000 cs adr data
Exemples : MOV eax,0x050000 ebx ds
MOV al,-32 ; Cà2 1110 0000 E0 ecx es CS:EIP B8
0x401390
Illustration :avec gdb SASM edx ss 00
eip fs 05
gs 00
eflag 00
151
flag
la programmation Intel x86 mode adressage 2/4
• adressage mémoire direct :
Utilisation de l'adresse mémoire où aller chercher la CPU
mémoire
donnée eax=0x0000 5566 cs
adr data
Exemple : ebx ds
55
2
ecx es
MOV ax,[val] ds:val 66
edx ss 0x402000
le contenu de l’adresse 0x402000+0x402001 eip fs CS:EIP 66
vers ax= 0x5566 ip gs 0x401390 1
A1
Illustration :avec gdb SASM eflag
flag 00
40
20
00
MOV al,[val]
le contenu de l’adresse 0x402000 vers ax
152
la programmation Intel x86 mode adressage 3/4
• adressage mémoire indirect par registre : mémoire
adr data
Utilisation de l'adresse mémoire contenue
55
dans un registre (BX, BP, SI, DI) CPU ds:val
3
66
• Exemple : MOV ebx, val eax=0x0000 5566 cs
0x402000
2
CS:EIP BB
MOV ax,[ebx] ebx=0x402000 ds
0x401390
ebx=0x402000 ecx es
00 MOV ebx,val
edx ss
ax=0x5566 1
20
eip fs
40
ip gs
00
eflag
66
flag MOV ax,[ebx]
8B
153
Illustration :avec gdb SASM 03
la programmation assembleur Intel x86 mode adressage 4/4
• adressage relatif à une base( généralement utiliser pour les tableaux) :
Utilisation de l'adresse mémoire obtenue par la somme d'un registre de base (BX ou BP) et un déplacement (dep)
MOV ax, [ebx + dep] mémoire
adr data
Exemple :La sélection de TAB[2] le 2ième élément d’un tableau identifier par TAB déclarer comme suit:
ds:TAB 66
TAB dw 0x5566,0x1133 3
0x402001
ds:TAB+1 55
avec MOV ebx, TAB
ds:TAB+2 33
MOV ax,[ebx+2] CPU 4
11
2
Attention taille de chaque élément si byte dep=+1, si word dep=+2,…. eax=0x00001133 cs
154
la programmation assembleur Intel x86 mode adressage 3/3
• adressage direct indexé :
Utilisation de l'adresse mémoire obtenue par la somme d'un déplacement (déplacement) et un registre d'index (SI ou DI)
Exemple : MOV edi,10H
MOV ax,[2F0H+edi]
• adressage indexé par rapport à une base :
Utilisation de l'adresse mémoire obtenue par la somme d'un registre de base (BX ou BP), d'un registre d'index (SI ou DI) et
d'un déplacement (déplacement).
taille mots Déclaration Déclaration
Exemple : MOV edi,15H Données initialisées Données non
MOV ebx,0BH initialisées
MOV ax,[ebx+edi+1E0H] 1 byte (8 bit) byte DB RESB
2 bytes (16 bit) word DW RESW
4 bytes (32 bit) dword DD RESD
8 bytes (64 bit) qword DQ RESQ
Remarque et résumer : on peut préciser la taille de chaque élément de tableau avec le mots suivants:
MOV ax, word [ebx+edi+1E0H] ;pour élément de 2 octets
155
la programmation assembleur Intel x86 :Les instructions de Transfert de
données 1/2
MOV dest, src Délassement dest src
Exemple: MOV taille dest, src Valeur de taille
MOV eax,10 ; eax10 byte 1 octet
MOV ebx,ecx ; ebxecx
word 2 octets ou
MOV edx,0A1h ; edx A1 en héxadécimal
1 mot
;(soit 161 en décimal)
MOV eax,[data1] ; copie de la valeur 32 bits dword 2 mots
qword 4 mots
; stockée à l'adresse data1.
MOV bl,[data2] ; copie de la valeur 8 bits XCHG dest,src Echanger dest src
;stockée à l'adresse data2 LEA dest ,[op] destadresse de op
(load efective address)
MOV eax, data1; copie de la valeur 32 bits
PUSH op décrémente esp et empile
; de l'adresse data1. op
XCHG eax,ebx ; échange les contenus de eax et de ebx POP op dépile dans op
et incrémente esp
• Remarque: On utilise la taille (byte,word,..)pour lever
PUSHA Emplie tous les registres
l‘ambiguïté dans les instructions quand c'est nécessaire.
elle n'est pas réservé à l'instruction mov POPA Dépile tous les registres
156
la programmation assembleur Intel x86 :Les instructions
de Transfert de données(principe de la pile) 2/2
• PUSH source Etat initial PUSH ax Etat initial pop ax
Empiler un mot sur la pile ax 5566 ax 5566 ax 0123 ax 5566
• MOV eax, 10111111b ;ax= 10111111b RCL dest, src effectue une rotation vers la gauche de dest de src
bit incluant le CF
ROL eax, 2 ;ax= 11111110b
RCR dest, src effectue une rotation vers la droit de dest de src bit
ROR eax, 1 ;ax= 01111111b incluant le CF
• MOV eax, 11111111b ;ax= 11111111b NEG dest Complément à 2
CMP dest, src positionnement des indicateurs (flag ), sans
CLC ; CF=0 modification de destination
RCL eax, 2 ;ax= 11111101b et CF=1 CLC Met la retenue à CF(flag)0.
RCR eax, 1 ;ax= 11111110b et CF=1 STC Met la retenue à CF(flag)1.
CMC Met le complément de la retenu CFNOT CF(flag)
159
la programmation assembleur Intel x86 : CALL dest Appel de procédure dest (jusqu’à RET)
RET Retour d’une procédure
Les Instructions branchements 1/5
• JMP destination LEAVE Fixe le pointeur de pile du registre ESP à la valeur du
registre EBP et «POP EBP»
Modification de EIP (Saut Intra-segment) pas besoin de RET
JMP dest Saut inconditionnel à instruction dest
• Calcule la somme des valeurs d’un tableau LOOP dest Bouclage Saut à instruction dest
section .data mémoire tant que ECX<>0 et ECXECX-1
adr data Saut conditionnel utiliser généralement après un CMP destination,
tab dw 2, 4, 6, 3
ds:TAB 02 source
section .text 0x402000 JE dest Saut conditionnel à instruction dest
global CMAIN ds:TAB+1 00 Si destination=source
ds:TAB+2 04 JNE dest Saut conditionnel à instruction dest
CMAIN:
Si destination<>source
MOV ebp, esp ; for correct debugging 00
JG dest Saut conditionnel à instruction dest
MOV eax, 0 ;eax=0 Si destination >source (entier signé)
06
MOV edx, tab ;edx adresse de tab JA dest Idem que JG mais pour entier non signé
MOV ebx,0 ; ebx indice i 00
03 JGE dest Saut conditionnel à instruction dest
MOV ecx, 4 ; ecx la taille de tableau
Si destination >=source (entier signé)
00
pour: JAE dest Idem que JGE mais pour entier non signé
ADD ax,[edx+ebx] ;tab[i] JL dest Saut conditionnel à instruction dest
ADD ebx,2 ;chaque élément est sur 2 octet Si destination < source (entier signé)
LOOP pour JB dest Idem que JL mais pour entier non signé
;ici eax= 15 JLE dest Saut conditionnel à instruction dest
XOR eax, eax Si destination <=source (entier signé)
160
RET JBE dest Idem que JL mais pour entier non signé
la programmation assembleur Intel x86 : Instruction
branchement inconditionnel (notion de procédure)2/5
• Une procédure est un sous-programme appeler par CALL et retourner par RET
• Appelle de procédure: CALL destination
Sauvegarde de EIP dans la pile
EIP= nouvelle valeur
• Retour de procédure :RET
Restauration à partir de la pile des
anciennes valeurs de EIP
• L'exécution d'une procédure est déclenchée
par un programme appelant. Une procédure
peut elle-même appeler une autre procédure, et ainsi de suite.
Exemple :
Après l'instruction B, le processeur passe à
l'instruction C de la procédure, puis continue
jusqu'à rencontrer RET et revient à
161
l'instruction D.
la programmation assembleur Intel x86 :notion de
procédure(passage
Les paramètres peuvent être:
de paramètres)3/5
• Si les paramètres sont des valeurs passage des paramètres par valeur
MOV ax, [Data] ; adressage mémoire direct normal d'un mot
• Si les paramètres sont des adresses passage par adresse (aussi appelé par référence)
MOV ebx, Data ; ebx = & Data (adresse de Data) dit pointeur
MOV ax, [ebx] ; ax = *ebx
Pour un passage par valeur par exemple, on distingue soit:
1. Passage par registre : les valeurs des paramètres sont contenues dans des registres du processeur.
C'est une méthode simple, mais qui ne convient que si le nombre de paramètres est petit (il y a peu de
registres).
2. Passage par la pile : les valeurs paramètres sont empilés.
puis la procédure lit la pile.
Remarque:
Les pointeurs sont, entre autres, utilisés par les langages suivants (liste non exhaustive) : C, C++, Pascal,
Ada, FreeBASIC, Fortran, C#, D, Modula-2, Oberon ..;
Dans la plupart des langages de programmation sans pointeurs, par exemple Python, Java ou
Javascript/Actionscript, les variables sont toujours passés par valeur, mais l'accès aux champs de ces
162
variables se fait par référence ou par adresse.(cas de chaine de caractères et tableau)
la programmation assembleur Intel x86 :notion de procédure(Passage
par registre) 4/5 %include "io.inc"
Exemple : -On va écrire une procédure (SOMME) qui calcule la
somme de 2 nombres naturels de 16 bits. SECTION .bss
num1 resw 1
-Convenons que les entiers sont passés par les registres AX et BX, et num2 resw 1
que le résultat sera placé dans le registre AX.
sol resw 1
• La procédure s'écrit alors très simplement section .text
SOMME : global CMAIN
ADD ax, bx ; EAX <-EAX + EBX CMAIN:
RET MOV ebp, esp;
;write your code here
et son appel, par exemple pour ajouter 6 à 2:
MOV word [num1], 6
MOV ax, 6 MOV word [num2], 2
MOV bx, 2 MOV ax, [num1]
MOV bx, [num2]
CALL SOMME
CALL SOMME
MOV sol, ax MOV [sol],ax
• Rappel: Word pour indiquer à l'assembleur de stocker 2 dans le XOR ax, ax
double mot qui commence ret
SOMME :
ADD ax, bx ; AX <- AX + BX 163
RET
la programmation assembleur x86 :notion de %include "io.inc"
SECTION .bss
procédure (Passage par pile) 5/5 num1 resw 1
Exemple le standard du langage C num2 resw 1
sol resw 1
Cette technique met en œuvre un nouveau registre, EBP (Base Pointer), qui permet
de lire des valeurs sur la pile sans les dépiler ni modifier ESP. Le registre EBP permet section .text
un mode d'adressage indirect spécial, Ainsi, on lira le sommet de la pile avec: global CMAIN
166
la programmation assembleur Intel x86 :Entrées/sorties
(gestion interruption) 2/4
• Afficher un caractère à l’écran
MOV dl, ’a’
MOV ah, 2
INT 21h
IRET
• Afficher un message à l’écran
SECTION .data
msg db "Salut", 13, 10, '$'
SECTION .text
MOV ah, 9
MOV dx, msg
INT 21h
IRET
• Saisir une frappe au clavier
MOV ah, 1
INT 21h
IRET
167
renvoie dans le registre al le code du caractère en ASCII lu au clavier.
la programmation assembleur Intel x86 :Entrées/sorties
(Gestion " haut-niveau")
• Ecrire au début de fichier %include "io.inc"
3/4
• Pour chaque fonction d'affichage, il faut utiliser une des macro importer du langage C suivant :
Macro name Description
PRINT_UDEC size, data imprimer en représentation décimale
PRINT_DEC size, data data -nombre à imprimer. doivent être chiffre ou un symbole constant , le nom de la variable ,
size- nombre, donnant la taille des données en octets - 1 , 2 , 4 ou 8 (x64 ) .
PRINT_UDEC pour numéro non signé, PRINT_DEC pour numéro signé .
PRINT_HEX size, data De même précédente , mais les données sont imprimées en représentation hexadécimale .
PRINT_CHAR ch Imprimer caractère ch .
ch - chiffre ou un symbole constant , le nom de la variable
PRINT_STRING data Imprimer chaine jusqu’à NULL .
data- chaîne constante , nom de variable
NEWLINE Imprimer saut de ligne ( '\ n' ) .
GET_UDEC size, data Lire le données numériques d'entrée en représentation décimale à partir de stdin .
GET_DEC size, data size- nombre, donnant la taille des données en octets - 1 , 2 , 4 ou 8 (x64 ) .
data- les données doivent être nom de variable
GET_UDEC pour numéro non signé, GET_DEC - pour numéro signé .remarque Il utilise le registre esp alors interdit d'utiliser ce
registre esp.
GET_HEX size, data De même précédente , mais les données sont lu en représentation hexadécimale .
GET_CHAR data De même précédente , mais la donnée lu est un seul caractère seulement.
GET_STRING data, maxsz Lire une chaîne d'entrée avec une longueur inférieure à maxsz . Lecture arrêt sur EOF ou saut de ligne et "\ n ", écrit dans un
tampon . Dans la fin de la chaîne 0 caractère est ajouté à la fin data - nom de variable
maxsz – nombre ou nombre constant .
168
la programmation assembleur Intel x86 :Entrées /sorties (Gestion " haut-niveau")
4/4
• Saisir et Afficher une chaine à l’écran • Saisir et Afficher un nombre à l’écran
%include "io.inc" %include "io.inc"
section .data section .data
msg1 db 'entrer votre nom', 0 msg1 db 'entrer un nombre', 0
msg2 db 'bonjour ', 0 msg2 db 'votre nombre est ', 0
section .bss section .bss
input1 resw 1 input1 resb 1
section .text section .text
global CMAIN global CMAIN
CMAIN: CMAIN:
MOV ebp, esp MOV ebp, esp
PRINT_STRING msg1 PRINT_STRING msg1
NEWLINE GET_DEC 2, input1
GET_STRING input1, 20 NEWLINE
PRINT_STRING msg2 PRINT_STRING msg2
PRINT_STRING input1 PRINT_DEC 2, input1
XOR eax, eax XOR eax, eax
RET RET 169
Jeux instructions complet x86
CPU Nom Instructions
Architecture extension
8086 AAA, AAD, AAM, AAS, ADC, ADD, AND, CALL, CBW, CLC, CLD, CLI, CMC, CMP, CMPSzz, CWD, DAA, DAS, DEC, DIV, ESC, HLT, IDIV,
Original x86 IMUL, IN, INC, INT, INTO, IRET, Jcc, LAHF, LDS, LEA, LES, LOCK, LODSzz, LODSW, LOOPcc, MOV, MOVSzz, MUL, NEG, NOP, NOT,
OR, OUT, POP, POPF, PUSH, PUSHF, RCL, RCR, REPcc, RET, RETF, ROL, ROR, SAHF, SAL, SALC, SAR, SBB, SCASzz, SHL, SAL,
SHR, STC, STD, STI, STOSzz, SUB, TEST, WAIT, XCHG,XLAT, XOR
80186/80188 BOUND, ENTER, INSB, INSW, LEAVE, OUTSB, OUTSW, POPA, PUSHA, PUSHW
80286 ARPL, CLTS, LAR, LGDT, LIDT, LLDT, LMSW, LOADALL, LSL, LTR, SGDT, SIDT, SLDT, SMSW, STR, VERR, VERW
80386 BSF, BSR, BT, BTC, BTR, BTS, CDQ, CMPSD, CWDE, INSD, IRETD, IRETDF, IRETF, JECXZ, LFS, LGS, LSS, LODSD, LOOPD, LOOPED,
LOOPNED, LOOPNZD, LOOPZD, MOVSD, MOVSX, MOVZX, OUTSD, POPAD, POPFD, PUSHAD, PUSHD, PUSHFD, SCASD, SETA,
SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC, SETNE, SETNG,
SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ, SHLD, SHRD, STOSD
80486 BSWAP, CMPXCHG, INVD, INVLPG, WBINVD, XADD
Pentium CPUID, CMPXCHG8B, RDMSR, RDPMC,WRMSR, RSM
Pentium pro CMOVA, CMOVAE, CMOVB, CMOVB, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB, CMOVNBE,
CMOVNC, CMOVNE, CMOVNG, CMOVNGE, CMOVNL, CMOVNLE, CMOVNO, CMOVNP, CMOVNS, CMOVNZ, CMOVO, CMOVP,
CMOVPE, CMOVPO, CMOVS, CMOVZ, RDPMC, SYSENTER, SYSEXIT,UD2
PentiumIII SSE MASKMOVQ, MOVNTPS, MOVNTQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
Pentium4 SSE2 CLFLUSH, LFENCE, MASKMOVDQU, MFENCE, MOVNTDQ, MOVNTI, MOVNTPD, PAUSE
Pentium4 SSE3 Hyper LDDQU, MONITOR, MWAIT
Threading
Pentium4 VMX VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON
6x2
X86-64 CDQE, CQO, CMPSQ, CMPXCHG16B, IRETQ, JRCXZ, LODSQ, MOVSXD, POPFQ, PUSHFQ, RDTSC, SCASQ, STOSQ, SWAPGS
Pentium4 VT-x VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON
170
Différences des directives FASM et NASM
FASM NASM
%include "io.inc"
Jeux instruction x86 section.data
ADD, SUB, CMP, AND, TEST, OR, XOR, section.bss
MUL, IMUL, DIV, IDIV section.text
RCL, RCR, SAL, SAR, ROL, ROR global cmain
Assume INC, DEC, NOT, NEG cmain:
Data SEGMENT JE, JNE,JA,JG,JAE,JGE,JB,JL, JBE,JLE PRINT_UDEC size, data
Data ENDS ……. PRINT_DEC size, data
Code SEGMENT PRINT_HEX size, data
Code ENDS PRINT_CHAR ch
Offset Les directives communs PRINT_STRING data
Word PTR, Byte PTR dd,dw,db NEWLINE
equ …….
171
Équivalents des structures algorithmiques
avancées (les tests avec si)1/4
• En algorithme
si( a = b) alors
<instructions-alors>
sinon Boolean
oui non
<instructions-sinon>
finsi Instruction alors
Instruction sinon
• En ASM
MOV eax,[a]
Instruction suivant
MOV ebx,[b]
Si: CMP eax, ebx
JNE Sinon
;a<>b --> saut vers sinon
Alors: <instructions-alors>
JMP Finsi
Sinon: <instructions-sinon>
Finsi:
172
• En algorithme
selon v Équivalents des structures algorithmiques
cas 1:
<instruction 1>
avancées (les tests avec si)2/4
cas 2:
<instruction 2>
Autres :
<instruction 3> v=1 non
finselon oui
• En ASM Instruction 1 V=2 non
<instruction 2>
JMP finselon
autres: <instruction 3>
finselon:
173
• En algorithme Équivalents des structures algorithmiques
tantque( a = b) avancées (boucle tantque)3/4
<instructions>
fintantque
non
• En ASM Booléen(vraie)
TantQue: oui
CMP eax, ebx ; eax=[a] et ebx=[b] Instruction 1
JNE FinTantQue;b<>a ---> saut vers FinTantQue relance
<instructions>
JMP TantQue
FinTantQue:
Instruction suivant
• En algorithme
répéter
<instructions>
Instruction 1
Jusqu’à ( a=b )
• En ASM
relance
repeter:
<instructions>
Booléen(vraie)
non oui
cmp eax, ebx ; eax=[a] et ebx=[b]
jne repeter ; b<>a --> boucle
Instruction suivant 174
jusqua:
Équivalents des structures algorithmiques
avancées (boucle pour)4/4
• En algorithme
Compteur0
Pour i0 a 10
<instructions> non
compteur<=N
finpour oui
• En ASM Instruction 1
mov ecx, 0 Compteur Compteur+1
pour:
cmp ecx, 10 ;comparaison ecx, et 10
Instruction suivant
jae finpour ;si ecx>= 10 saute a finpour
<instructions>
inc ecx
jmp pour ;on boucle (saut inconditionnel)
finpour: 175
Structures Algorithmiques sous programme (Passage valeur par pile )
Procédure sousProgramme1( réel var3)
❶Pile ligne 2. ❷Pile ligne 2.1 ❸Pile ligne 2.1.1
Variable
ESP EBP var4 ESP EBP var6 ESP Var6=2
Var4:entier
EBP+2 @old ebp EBP+2 @old ebp @old ebp
début
@inst 2. @inst 2.1 @inst 2.1
2.1 var4 sousProgramme2( 1 )
EBP+ Var3=var2= EBP+ Var5=1 Var5=1
finprocédure 10 2.0 10 var4
Fonction sousProgramme2( caractère var5) :entier var4 @old ebp
Variable @old ebp @inst 2.
• Var2
Var6:Entier @inst 2. Var3=var2
• SousProgramme1(var2)
début Var3=var2 =2.0
=2.0
2.1.1 Var62
❶ ❺ ❺Pile ligne 2.
2.1.2 Valeur_retour var6
Finfonction ❹Pile ligne 2.1 EBP=
ESP
Variable • Var4SousProgramme2(1) ESP EBP Var4=2
var1: caractère EBP+2 @old ebp
DEBUT
❷ ❹ EBP+ Var3=var2
10 =2.0
1. var22.0;
• Var62
2. sousProgramme1(var2 ) • Valeur_retour par registre
176
FIN
Structures algorithmiques autre représentation
(automate finie)
• Machine de Moore avec actions et organigramme.
(a) : un état de machine de Moore avec actions (C est une condition booléenne et A une action) ;
(b) :une portion d’organigramme qui représente le même traitement.
177
Structures algorithmiques autre représentation
(automate finie)
• Traduction des structures de contrôle
en machines séquentielles avec actions.
178
bibliographies
• Architecture des ordinateurs Note de cours (T.Dumartin)
• Architecture d’ordinateur (Jian-Yun Nie)
• Architecture des ordinateurs (Clement Jonquet)
• Architecture et technologie des ordinateurs, Paolo
Zanella, Yves Ligier & Emmanuel Lazard, Dunod, 5eme
edition, 2013.
• Architecture de l'ordinateur, Andrew Tanenbaum,
Pearson, 5eme edition, 2009.
• fr.wikipedia.org
• fr.wikiversity.org
179