Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Cours II - Aoutoul

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 90

5(63216$%/(/3(,,0$-,'02+$0('

Introduction à l’Assembleur

Par Mohssin Aoutoul


Mohssin.aoutoul@gmail.com
Introduction
Tous les langages de programmation dits « évolués »
(«structurés», «orientés objet», etc.), qu'ils soient compilés ou
interprétés doivent d'une manière ou d'une autre être «traduits»
en langage machine avant de pouvoir être exécutés par un
ordinateur
• Avantage des langage évolués:
Développements des logiciels complexes
Conception, lisibilité, maintenance, portabilité…
• Le côté déplaisant
Ils cachent les limitations de la machine:
1. sous-exploitation des capacités du processeur (processeur
64 bits: nouveaux jeux d’instruction, e.g SIMD (16 opération
arithmétique à la fois) mais rares les compilateurs exploitant
ces instructions et les langages qui en tirent profit
Introduction Cont.

Les processeurs 64 bits vendus avec des OS 32 bits!


2. surestimation des capacités

S’il est impossible d’écrire des programmes en langage machine,


il est possible de les écrire en langage assembleur (version
légèrement « humanisée »)
Connaitre les rudiments de la programmation en
assembleur peut donc donner des atouts considérables pour la
compréhension et la maitrise de tous les autres langages de
programmation.
Rappels sur la structure des ordinateurs

• Les cases mémoires


La mémoire est découpée en particules élémentaires: bits
prenant deux valeurs possibles (binaire) (différentes
interprétations…)
Pour augmenter la capacité de représentations des bits, la
mémoire d’un ordinateur est structurée comme suit: une suite
de cases mémoires qui sont à leurs tours des suites de bits

1 bit Case
mémoire
Rappels sur la structure des ordinateurs, Cont.
• Nombre de bit et capacité de représentation
– En décimal, une particule = 10 valeurs (0-9)
– n particules = 10n valeurs possibles
– En représentation binaire, une particule= deux
valeurs possibles (0-1)
– n particules (bits) = 2n valeurs possibles (0 – 2n-1)
– Pour représenter un objet prenant X valeurs il faut
Y bits tq: X ≤ 2Y
– Z objets avec X valeurs: Y bits tq X ≤ 2Y Z
NB: impossible de représenter complètement l'espace des nombres entiers,
rationnels, réels, complexes, etc.
Rappels sur la structure des ordinateurs, Cont.

• La base hexadécimale
La base hexadécimale est utilisée pour représenter des données
pour :
des raisons de lisibilité
Faciliter la représentation des données: un nombre binaire de 4
bits peut étre représenté par un chiffre hexadécimal (0, 1, 2, 3, 4,
5, 6, 7, 8, 9, A, B, C, D, E, F) (e.g (1111)B = (F)X = (15)D)
• Sous-parties du contenu d’une case mémoire
Partie haute de 16 bits
Partie basse de 12 bits

F9E8D7C6
Partie haute de 8 bits
Rappels: organisation de la mémoire

• Tailles des cases mémoires les plus utilisées


1. Octet (byte): case mémoire de 8 bits
2. Le mot de 16 bits: suite de deux Octets
3. Le mot de 24 bits: suite de 3 octets
4. Le mot de 32 bits: suite de 4 octets
5. Le mot de 64 bits: suite de 8 octets
Rappels: adresses des cases moires
• Chaque particule en mémoire doit avoir son adresse unique,
Exemple: X adresses à X bits demande un espace mémoire de Y
bit tq: X ≤ 2Y (e.g 4 adresses à 4 bits: nécessite 2 bits)
• L’espace mémoire nécessaire est inversement proportionnel à la
taille minimale des case mémoires adressable
• Cette taille minimale est, dans la plupart des architecture, est de
8 bit (octet)
• Chaque octet dans la mémoire possède une adresse physique
unique
• 1octet peux générer 256 (28) adresses différentes d’octets
• 4 octets (32 bits): on peut accéder à 4 Go (1Ko=210 octet…)
• Les processeur peuvent manipuler des adresses sur 64 bits et
donc peuvent gérer un espace adressable de 264 Octet (environ
17x109 Go)
Programme en langage machine

• Suite d’instructions-machine,
petit programme en langage machine
chaque instruction-machine est totalement, écrit en binaire avec une
une suite de bits contenant les mémoire découpée en octets

informations nécessaire pour


l’exécution de l’instruction
• Les instruction stockées dans la
mémoire sont accessibles par
blocks: 1 octet (8 bits), 16 bits
(un mot), 32 bits( mot long ) et
64 bits et rarement 24 bits,
Compilation d’un programme source
Compilation d’un programme en C: exemple
Difficile de
connaitre quel
code pour quelle
Le même programme compilé
Petit programme écrit en en instructions codés en IA-32
instruction
langage C (fichier source) (fichier objet) (IA: Intel Archit.)

Même programme mais écrit


en langage assembleur
Mais c’est quoi
push, mov, sub,
call, %esp..etc. ?
Programme en langage assembleur

L’assembleur permet de rendre le programme en langage machine plus


visible:
• Chaque ligne d'assembleur contient une seule instruction, l'adresse
d'une instruction est essentiellement constituée par son numéro de
ligne.
• Le programmeur peut donner des noms aux adresses importantes
pour lui.
• Les instructions s‘écrivent sous la forme « mnémonique
suite_d'opérandes »
• la mnémonique est un mot qui rappelle le role de l’instruction
Exemple: MOV Source, Destination # va copier la donnée qui se trouve à
l’adresse Source dans l’adresse Destination
La lettre # pour indiquer que cet un commentaire dans certain types de
langages assembleurs
Les codes assembleurs

• Différents langages assembleurs utilisent différents


mnémoniques pour représenter des codes d'instruction. Alors
que les tendances ont émergé pour normaliser les
mnémoniques assembleur, il y a encore une grande variété de
codes mnémoniques, non seulement entre les familles de
processeurs, mais même entre les assembleurs utilisés pour
les processeur des mêmes groupes de jeux d’instructions.
Programme en langage assembleur: exemple

al (AL): registre de
travail en architecture
x86, la lettre ‘L’ veut
dire du poids faible
(Low)
Les Sections en langage assembleur
Trois sections:
.data
.bss
.text
Sections des données: .data
• La section de données (.data) du programme est l'endroit le plus
commun pour définir les éléments de données. La section de
données définit emplacements spécifiques en mémoire où les
objets sont stockés,
• La section de données est déclarée en utilisant la directive .data.
Tous les éléments de données déclarés dans cette section sont
réservées dans la mémoire et peuvent être lues ou écrites par des
instructions dans le programme en langage assembleur.
Section de donnée (.data) Cont.
• Deux objets sont nécessaires pour définir un élément de données dans la
section de données (.data): une étiquette (tag) et une directive (e.g
.byte):
.data
Exemple:
msg: .ascii “Bonjour tout le monde\n”

.ascii Texte, chaine de caractères


.asciz Texte/chaine de caractères terminée par NUL
.byte Une valeur en un octet
.double Réel à double précision
.float / .single Réel simple
.int Entier codé en 4 octets (32 bits)
.long Entier codé en 4 octets (32 bits)
.octa / .short Entier en deux octets (16 bits)
.quad Entier codé en 8 octet s
.single
Instruction en assembleur

Tag (Label): Mnémonique Operande(s) #Comment.

Op1: source, op2: destination

exemple
mov $10, %al #déplacer la valeur 10 au registre AL

Langage assembleur:
mov A, % eax #déplacer la valeur de A au registre eax
En langage haut niveau:
mul B #multiplie B par la valeur stokée en eax
D = A * B + 10
add $10, %eax #ajouter la valeur 10 à eax
mov %eax, D #déplacer la valeur stockée dans EAX vers D
Types d’opérandes en assembleur

• Des tags (ou bien des étiquettes) comme res et nb1


• constante entière comme $5 en base décimale ($0b010101
pour exprimer la valeur d'une constante en base binaire et
$0x9ABC01 pour la base hexadecimale)
• Un registre comme al ou eax, il le précéder par % pour le
distinguer d’une étiquette

Remarque:
Comme les opérations arithmétiques ne peuvent être réalisées
directement sur des emplacements en mémoire externe, les registres,
qui sont des emplacements de mémoire internes au processeur, sont
utilisés pour ces opérations.
Taille d’un opérande ou d’opération

• ‘b’ qui termine les mnémoniques mov et add indique la taille


en bits de l'opération a réaliser
• b: indique une opération sur 8 bits
• w: une opération sur 16 bits. Les emplacements contiennent
donc des mots (word).
• l: une opération sur des cases mémoires de 32 bits, des mots
longs (long words).
• d: même chose (double-word)
• q: indique une opération sur des cases mémoires de 64 bits,
(quad-word).
Registre de travail (accumulateur)
AL: la partie basse (accumulator low) de 8 bits d'un registre de 16 bits nomme
AX (accumulator extended 0-15 bits).
AH: La partie haute de 8 bits de ce registre (accumulator high)
EAX: La version 32 bits de ce registre (extended accumulateur extended, bits
numerotes de 0 a 31)
RAX: La version 64 bits du même registre se nomme (0-63 bits)

NB: Les processeurs recents de la famille 80x86 possèdent 3 autres registres de


64 bits similaires a rax : rbx, rcx et rdx
Les registre de travail (famille x86)

Les quatre registres de travail sont principalement


utilisés pour stocker des résultats :
• EAX : registre accumulateur (accumulator register).
Utilisé pour les opérations arithmétiques et le
stockage de la valeur de retour des appels systèmes.
• EDX : registre de données (data register). Utilisé
pour les opérations arithmétiques et les opérations
d'entrée/sortie.
• ECX : registre compteur (counter register)
• EBX : registre de base (base register). Utilisé comme
pointeur de donnée (située dans DS en mode
segmenté).
Les registre de travail (architecture x86), Cont.

Ces 4 registres 16 bits sont également décomposés en 8


registres de 8 bits :

• AL : octet de poids faible de AX


• AH : octet de poids fort de AX Les registres du
microprocesseur Intel 8086
• BL : octet de poids faible de BX
• BH : octet de poids fort de BX
• CL : octet de poids faible de CX
• CH : octet de poids fort de CX
• DL : octet de poids faible de DX
• DH : octet de poids fort de DX
Sens d’opérations: premier exemple

Ce code en assembleur est peut être la compilation du programme au-dessous écrit


en C/C++
short int nb1 = 1, res = 0;
res = nb1 + 5;
Débordements
• Comment peut-on savoir si le calcul a donne un résultat valide
?
• Exemple 1: 1 + 255 sur un octet pour le CPU est invalide
(résultat = (00000000)b = (0)d)
• Exemple2: -128 - 1 sur un octet donne 127 (invalide)
-128 = (10000000)b et -1 = (11111111)b
• le microprocesseur possede un registre special de 64 bits: le
registre d'etat RFLAGS (FLAG c.à.d. Drapeau en anglais). Une
partie de ces birts concerne les opérations arithmétiques
après une exécution.
Bits d’états pour les opérations arithmétiques

RFLAG état Signification


ZF (Zero Flag) indique si le résultat est nul (ZF=1) ou non nul (ZF=0)
SF (Sign Flag) indique si le résultat est positif (SF=0) ou négatif (SF=1)

PF (Parity Flag) indique que le résultat est pair (PF=1) ou impair (PF=0)

CF (Carry Flag) indique une retenue (CF=1) sur les entiers non signés
OF (Overflow indique un débordement (OF=1) sur les entiers signés
Flag)

CF: Ce drapeau prend la valeur 1 si une opération arithmétique génère une retenue
sur le bit le plus significatif (bit de poids fort). Le drapeau est désarmé dans les
autres cas. Ce drapeau indique ainsi une condition de débordement en arithmétique
entière non signée. Il est aussi utilisé pour l'arithmétique en précision multiple.
Flag de retenue CF

Exemples:
• 0b11111111 + 0b1 = 0b00000000, CF = 1
• 0b11111110 + 0b1 = 0b11111111, CF = 0
Remarque: si les opérandes sont des entiers non signes, le résultat
est valide si et seulement si CF =0 et il est invalide si et seulement
si CF = 1
Flag de débordement OF

• Si les opérandes sont des entiers signés, c'est le Flag OF qui


indiquera la validité du résultat:

Exemples:
0b11111111 + 0b1 = 0b00000000, CF=1 et OF=0
Si (0b11111111) est entier non signé donc (255 + 1) est invalide
dans N8 (la valeurs maximale est 28 – 1 = 255 gérée par le
microprocesseur)
Si (0b11111111) est un entier signé donc (-1 + 1) est valide dans
Z8 (la valeurs gérées sont de -128 à 127)
Flag CF et OF, Exemples Cont.

• Exemple 2:
0b00000000 – 0b1 = 0b11111111 avec CF=1, mais OF=0

(0b00000000) est un entier signé donc (0 - 1) est invalide dans N8


(0b00000000) est un entier signé mais (0 - 1) est valide dans Z8

Exemple 3:
0b10000000 + 0b1 = 0b10000001 avec CF=0 et OF=0
Si (0b10000000) est entier non signé donc (128+ 1) est valide dans
N8 (0 – 255 valeurs)
Si (0b10000000) est un entier signé donc (-128 + 1) est valide dans
Z8 (-128 à 127)
Flag CF et OF, Exemples Cont.

• Exemple 4:
0b10000000 – 0b1 = 0b01111111, CF=0, mais OF =1

Si (0b10000000) = 128 (non signé) donc 128 - 1 est valide en N8


Si (0b10000000) = -128 (signé) donc -128 - 1 est invalide en Z8

Exemple 5:
0b01111111 + 0b1 = 0b10000000, CF=0, mais OF =1
(0b01111111)= 127d donc 127 + 1 est valide en N8 mais invalide
en Z8 (-128 à 127)
Autres opérations arithmétiques
• Soustraction:
Syntaxe: sub source, destination
Où la source est soustraite de la destination avec le résultat
stocké dans la destination
Cette instruction provoque un
double calcul : le processeur fait
simultanément la soustraction une
fois en supposant les données
signées et une fois en les
supposant non signées.
Ainsi, le drapeau OF est levé si un
débordement survient lors de la
soustraction signée et le
drapeau CF est levé si une retenue
survient lors de la soustraction non
signée (résultat négatif)
Autres opérations arithmétiques
• Multiplication:
Syntaxe: mul source
Cette instruction multiplie le contenu de l'accumulateur
EAX (AX, AL suivant la taille de source) avec source. Le
résultat est placé dans l'accumulateur.
• si source est codée sur 1 octet, la multiplication est faite avec AL
et le résultat est codé sur 2 octets dans AX ;

• si source est codée sur 2 octets, la multiplication est faite avec


AX et le résultat est codé sur 4 octets dans la paire de registre
DX:AX ;

• si source est codée sur 4 octets, la multiplication est faite avec


EAX et le résultat est codé sur 8 octets dans la paire de registre
EDX:EAX.
Multiplication des entiers non signés, Cont.

Taille de l’opérande source Destination de l’opérande Destination


8 bits AL AX
16 bits AX DX: AX
32 bits EAX EDX:EAX

Exemple de multiplication
Multiplication des entiers signés
• Multiplication signée:
Syntaxe: imul source OU imul source, destination

L'opérande source peut être un registre de 8, 16, ou 32 bits ou une


valeur en mémoire, et il est multiplié par l’opérande implicite situé
dans les registres AL, AX ou EAX (en fonction de la taille de
l'opérande de source). Le résultat est ensuite placé dans le registre
AX, la paire des registres DX: AX, ou dans la paire des registresE
DX: EAX
Le 2ème format vous permet de spécifier où le résultat de la
multiplication ira (au lieu d'être obligé d'utiliser l'AX et registres
DX).
Multiplication des entiers signés, exemple
Division des entiers signés
• Division non signée:
Syntaxe: div opérande
le contenu qui peut être un registre de 8, 16, ou 32 bits ou une
valeur en mémoire est divisé par l’opérande
Si l'opérande de cette instruction est codée sur 8 bits, le contenu du registre AX
est divisé par l'opérande, le quotient est stocké dans AL et le reste dans AH.

Si l'opérande de cette instruction est codée sur 16 bits, l'entier défini par la paire
de registre DX:AX est divisé par l'opérande, le quotient est stocké dans AX et le
reste dans DX. Dans la pair de registre DX:AX, le poids faible est AX.

Si l'opérande de cette instruction est codée sur 32 bits, l'entier défini par la pair de
registre EDX:EAX est divisé par l'opérande, le quotient est stocké dans EAX et le
reste dans EDX.
Division des entiers non signés, exemple
Incrémentation et décrémentation
• Incrémentation:
Syntaxe: inc opérande
• Décrémentation:
Syntaxe: dec opérande

inc additionne 1 à l’opérande

Dec prend 1 à l’opérande


les instructions de
branchement
Registre RIP (Instruction Pointer)

le processeur exécute les instructions de tailles


différentes les unes après les autres. Pour cela, le
processeur dispose d'un registre spécial, nommé RIP
(64 bits) (EIP: 32 bits et IP: 16 bits) qui contient
l'adresse de l'instruction courante a exécuter. La valeur
contenue dans ce registre est automatiquement
augmentée lors de l'exécution d'une instruction afin
que le registre pointe sur l'instruction suivante
Instructions agissant sur RIP

• branchement inconditionnel
Instruction jmp (sauter)
Elle permet de remplacer le contenu de RIP par une adresse
symbolique (Tag)
Syntaxe: jmp tag
Exemple:
debut: movl $2, %eax # 2 -> eax
jmp suite # on saute l’ instruction suivante
addl $2, %eax # cette instruction
# n'est pas exécutée
suite: movl %eax, %ebx # eax -> %ebx

Attention boucle infinie !


debut: jmp debut # mets l'adresse debut dans le registre RIP
Instructions agissant sur RIP, Cont.

• Branchements conditionnels
elles testent un ou plusieurs Flags du registre d‘état et en
fonction de leurs valeurs, effectuent le branchement ou
passent a l'instruction suivante, Le branchement est
effectué si la condition est remplie et qui est en fonction
des états des Flags ZF, CF et OF
Syntaxe: jz Tag (si résultat est nul ZF=1)
jnz Tag (si résultat est non nul ZF=0)
jc Tag (saut si retenue CF=1)
jnc Tag (saut si pas de retenue CF=0)
jo Tag (saut si débordement OF=1)
jno Tag (saut si pas de débordement OF=0)
Instructions agissant sur RIP, exemples

Exemple 1
Init: movw $0, %cx # 0 -> cx
Boucle: addw $1, %cx # cx+1 -> cx
jnc Boucle # boucle tant que cx+1
# est valide (de 1 à 65535)
Exemple 2 (peut on remplacer: if else, while do, switch case, for?)
maximum: movq var_a, %rax # a -> rax (q: 64 bits)
movq var_b, %rbx # b -> rbx
subq %rax, %rbx # rbx-rax -> rbx
jc amax # CF=1 => b-a<0 => a>b
bmax: movq var_b, %rax # CF=0 => b-a>=0 =>
# a <= b, on copie
# b dans rax
amax: movq %rax, var_c # max(a,b) -> c
Structures de données
Registres Pointeurs
• Un pointeur est une case mémoire qui contient l'adresse
d'une autre case mémoire.
• La modification du contenu d’une case mémoire peut se fait à
partir du pointeur qui a son adresse (il pointe sur elle)
Exemples de pointeurs:
• RIP est un exemple de registre pointeur qui point sur
l’instruction courante
• RSI (Re-extended source index) et RDI (Re-extended destination index)
sont deux pointeur indiquant la source et la destination (copie
de zone de mémoire)
• RSP (Re_extended Pointer) et RBP (re_extended base pointer) deux
pointeurs pour la gestion de la pile
Registres Pointeurs, Exemples

Exemple: mode d’adressage


movq $Tableau, %rsi # fait pointer %rsi sur
# le 1er élément du Tableau (adrs)
movw (%rsi), %ax # Copie l'élément
# courant du tableau dans ax
addw $1, %ax # Ajoute 1 à ax
movw %ax, (%rsi) # Remplace l'élément
# courant du tableau par ax
addl $2, %rsi # Ajoute 2 à rsi
#(pour passer à l'élément suivant)

Remarque: Un tableau en assembleur:


Tabb: .byte 6*7, 4, 8, -1 # sur un octet {42, 4, 8, -1}
pointeur et adressage indirect

Exemple: mode d’adressage indirect


movq $Tableau, %rsi # fait pointer %rsi sur
# le 1er élément du Tableau (adrs)
movw (%rsi), %ax # Copie l'élément
# courant du tableau dans ax
addw $1, %ax # Ajoute 1 à ax
movw %ax, (%rsi) # Remplace l'élément
# courant du tableau (1er) par ax
movw 2(%rsi), %bx #copie directement le 2ème élément
#du tableau dans le registre bx
Remarque:
Le contenu du registre (rsi) reste inchangé (la même adresse)
Le déplacement le long de registre peut être + et -: -2(%rsi), 4(%rsi)
mode d’adressage indirect, Exemples
Exemple 2
rsi fiche fiche+1 fiche+2 fiche+3 fiche+4 fiche+5 fiche+6 fiche+7

$fiche Adresse du 1er élément de fihe : 0d490843500


(%rsi) 1(%rsi) 2(%rsi) 3(%rsi) 4(%rsi) 5(%rsi) 6(%rsi) 7(%rsi)
tel tel tel tel âge Année Année
naiss. naiss.

movq $fiche, %rsi # rsi pointe sur une fiche


movl (%rsi), %eax # copie le numéro de
# téléphone (4 octets) dans eax
movb 4(%rsi), %bl # copie l'âge de la personne
#(1 octet) dans bl
movw 5(%rsi), %cx # copie l'année de naissance dans cx
Utilisation de la pile

L'utilisation de la est très utile, par exemple pour


simuler l'utilisation de « variables locales » ou
de paramètres de procédures
Architecture générale
des ordinateurs
Par Mohssin Aoutoul
Mohssin.aoutoul@gmail.com
Objectifs du cours

• Identifier les composants de l'unité centrale de traitement et


comment ils fonctionnent ensemble et interagissent avec mémoire
• Décrivez comment les instructions de programme sont exécutées par
l'ordinateur
• Expliquer comment les données sont représentées dans l'ordinateur
• Décrivez comment l'ordinateur trouve des instructions et des
données
• Décrire les composants de la carte mère d’un système à
microprocesseur
• Énumérer les mesures de la vitesse de traitement de l'ordinateur et
d'expliquer les approches qui augmentent la vitesse
Organisation générale des ordinateurs

Introduction
La majorités des ordinateurs peuvent etre
décrits par le schéma suivant bien que la
réalisation peut varier considérablement d’un
modèle à un autre
Organisation générale des ordinateurs
Unité centrale de traitement (CPU)

• Ensemble complexe de circuits électroniques


• Centre de contrôle
• Ensemble de circuits électroniques qui
exécute les instructions de programme
mémorisées
• Deux parties
– Unité de contrôle (UC ou CU)
– Unité arithmétique et logique (UAL ou ALU)
Unité de contrôle - CU

Une partie du matériel qui est en charge de:


• Diriger le système ordinateur pour exécuter
des instructions de programme mémorisées
• Doit communiquer avec la mémoire et UAL
• Envoie des données et des instructions de la
mémoire secondaire (e.g disque dûr) à la
mémoire quand il le faut
Unité arithmétique et logique (UAL)

• Exécute toutes les opérations arithmétiques et


logiques
• Les opérations arithmétiques
– Addition, soustraction, multiplication, division
• opérations Logiques
– Comparer les chiffres, les lettres ou les caractères
spéciaux
– Faire le teste pour une des trois conditions
• Condition d’Egalité
• Condition pour inférieur à
• Condition pour supérieur à
Stockage des données et CPU

Deux types de stockage de données:


• Stockage primaire (mémoire)
– Données stockées temporairement
– CPU se réfère (s’adresse) à elles pour extraire des
instructions de programme et des données
• stockage secondaire
– Stockage à long terme
– Stocké sur support externe, tel qu'un disque
La CPU et la mémoire
• La CPU ne peut pas traiter les données à partir du
disque ou du dispositif d'entrée (e.g clavier)
– Il doit d'abord résider dans la mémoire
– Unité de commande (contrôle) extrait des données du
disque e les déplace dans la mémoire
• Les données sont envoyés à l'UAL pour le traitement
– L'unité de commande envoie les éléments à l'UAL, puis les
renvoie à la mémoire après le traitement
• Les données et les instructions restent dans la
mémoire pour les envoyer à une sortie standard ou à
une unité de stockage le stockage (ou le programme
est arrêté)
Les registres

• à définis spéciaux
• Haute vitesse
• Stockage temporaire
• Situé à l'intérieur de la CPU

Registre d'instructions Registre de données


• Détient instruction en cours • Contient des données en
d'exécution attente de traitement
• Contient les résultats de la
transformation
Registre de statuts
• Détient le statut des opérations
ALU
Mémoire

• Aussi connu comme mémoire de stockage


primaire et mémoire principale
– Souvent exprimé en mémoire vive (RAM)
– Ne fait pas partie de la CPU
• Contient les données et les instructions pour
le traitement
• Stocke des informations tant que le
programme est en cours d’éxecution
Les adresses mémoires
• Chaque emplacement de mémoire
a une adresse
– Un numéro unique, un peu comme
une boîte aux lettres
• Peut contenir une seule instruction
ou une pièce de données
– Lorsque les données sont écrites à la
mémoire, le contenu précédent de
cette adresse est détruit
• On s'y adresse par des numéros
– Les langages de programmation
utilisent un adresse symbolique
(identifiant), telles que "heure" ou
"Salaire"
Représentation des données

• Les Ordinateurs comprennent deux états: oui et


non (vrai ou fau)
• Les Données représentées sous forme binaire
– Système binaire (base 2)
– Ne contient que deux chiffres, 0 et 1
• Correspond à deux Etats, ON et OFF

• Bit
• Byte
• Word (mot)
Exécution du programme

• Fetch (chercher)
– CU reçoit une instruction
• Décoder
– CU décode l'instruction
• Exécuter
– CU informe la partie appropriée du hardware à réagir
– Le contrôle est transféré à la partie appropriée du
Hardware
– Tâche est effectuée
• Stockage
• Le contrôle est renvoyée à la CU
Comment le CPU exécute les instructions

• Quatre étapes effectuées pour chaque instruction


– Cycle de la machine: la durée nécessaire pour exécuter
une instruction
– Les ordinateurs personnels l’exécutent en moins d'un
millionième de seconde
– Les superordinateurs l’exécutent en moins d'un millième
de milliardième de seconde
• Chaque CPU dispose de son propre jeu d'instructions
– ces instructions que le CPU peut reconnaître et exécuter
Remarque: un cycle machine est l'exécution d'une instruction élémentaire. Selon le
microcontrôleur, un cycle machine prend plus ou moins de cycles d'horloges.
un AVR a besoin d'un cycle d'horloge pour exécuter une instruction, un PIC (jusqu'aux
PIC18) en a besoin de 4, certains 8051 en ont besoin de plus de 10.
Cycle de la machine

• Définition: Le temps
nécessaire pour
récupérer, exécuter et
stocker une opération
• Il est composé du:
– temps d'instruction
– temps d'exécution
• L’horloge système a pour Exemple du cycle de machine
rôle la synchronisation
des opérations
Temps d’instruction

• Le temps pendant lequel une instruction est


extraite de la mémoire et stockée dans le
registre d'instruction. Il est la première moitié
du cycle d’une instruction.
• Pendant cette durée:
– L'unité de contrôle reçoit l'instruction de la
mémoire et le met dans un registre
– L'unité de contrôle décode l’instruction et
détermine l'emplacement dans la mémoire de la
donnée nécessaire
Une instruction dicte à l'ordinateur l'action nécessaire qu'il doit effectuer avant de
passer à l'instruction suivante
Temps d’exécution (Execution Time)

Pendant ce temps:
• L'unité de commande (contrôle) déplace les données
de la mémoire aux registres dans l'UAL
– L'UAL exécute des instructions sur ces données
• L'unité de contrôle stocke les résultats des
opérations dans la mémoire ou dans un registre
Horloge du système

• L’horloge du système produit des impulsions à taux fixe


• Chaque cycle de la machine est un ou plusieurs
impulsions d'horloge
• Une instruction de programme peut effectivement être
plusieurs instructions à la CPU
• Chaque instruction de CPU aura un cycle de machine
• CPU a un jeu d'instructions (Instructions qu'il peut
comprendre et procéder)
– On trouve différents processeurs mais ils ont des jeux
d'instructions uniques
• Différents types non compatibles (i.e., Apple vs Intel)
Exemple

• Obtenir l'instruction de l'emplacement d'adresse 2110


• Décoder l'instruction: Z = X + Y
• MovX: déplacer X dans le registre A (l'accumulateur)
• MovY: Déplacer Y dans le registre B
• Add: ajouter le contenu du registre B à celui du registre A
– Le résultat reste dans l'accumulateur
• Stocker le résultat dans un endroit de mémoire adressée
symboliquement par Z
Schéma de représentation des données

• Fournit un moyen commun de représenter un


caractère de données
– Nécessaires afin que les ordinateurs peuvent échanger
des données
• Schémas communs
– ASCII
– EBCDIC
– Unicode
ASCII

• Abréviation pour: « American Standard Code


for Information Interchange »
• La norme la plus utilisée
• Utilisé pratiquement sur tous les ordinateurs
personnels
EBCDIC

• Abbreviation pour: “Extended Binary Coded


Decimal Interchange Code”
• Utilisé principalement sur des mainframes
IBM et compatibles IBM
Unicode

• Conçu pour accueillir des alphabets de plus de


256 caractères
• Utilise 16 bits pour représenter un caractère
• 65.536 valeurs possibles
• Nécessite deux fois plus d'espace pour stocker
des données
La performance d’un système

• Temps mis par le système pour exécuter un programme


• Les paramètres qui influent sur le rendement sont
– Vitesse d'horloge
– Type et nombre d'instructions disponibles
– Temps moyen nécessaire pour exécuter une instruction
– Le temps d'accès à la mémoire
– La dissipation de puissance dans le système
– Nombre de dispositifs E/S et types de périphériques E/S
connectées
– La capacité de transfert de données par des bus
La performance d’un système, CPI
Composants de la mémoire

• Mémoire à Semi-conducteurs
• RAM et ROM
• Mémoire Flash
Mémoire à Semi-conducteur

• Utilisé par la plupart des ordinateurs modernes


– Fiable, peu coûteux et compact
– Volatile: nécessite un courant électrique continu
• Si le courant est interrompu, les données sont perdues
– Complementary Metal Oxide Semiconductor (CMOS)
• Conserve les informations lorsque l'alimentation est arrêtée
(petite mémoire et une horloge maintenues en
fonctionnement permanent grâce à une pile)
• Utilisé pour stocker les informations nécessaires au
démarrage de l'ordinateur (la configuration de l'ordinateur,
données du BIOS)
• consommation extrêmement réduite (de l'ordre de 10 µA)
RAM: Random Access Memory
• En français: mémoire à accès
direct
• Mémoire où sont placées les
données lors de leur traitement.
• Rapidité d'accès, essentielle pour
fournir rapidement les données
au processeur (104 à 105 fois plus
qu’un disque dur)
• Le contenu doit être réactualisé
périodiquement pour éviter la
perte d'information
À partir de 1970
Types de RAM
• Static RAM (SRAM)
– Principe de bascule électronique, très rapide, volumineuse et chère,
consomme moins d’énergie que DRAM, utilisée pour mémoire cache
L1, L2 du microprocesseur.
• Dual Ported RAM (DPRAM)
– SRAM avec double port pour entrée et sortie
• Magnetic RAM (MRAM)
– Elle possède un débit de l'ordre du gigabit par seconde, non-volatile
(commercialisée à partir de 2006)
• Phase-Change RAM (PRAM)
– utilise le changement de phase du verre pour enregistrer
l'information, non-volatile ( commercialisée à partir de 2012)
• Dynamique RAM
– a besoin de rafraîchissement par le microprocesseur, simple structure:
condensateur (1pF) et Transistor pour stocker 1 bit, mémoire dense,
l’information se perd sauf rafraichissement de la charge des cond,
chaque qlq ms (à cause des courants de fuites des condensateurs)
Read-Only Memory (ROM): Mémoire morte

• Contient des programmes et des données


enregistrées dans la mémoire permanente par le
fabricant
– Non modifiable par l'utilisateur
– Non-volatile: le contenu ne disparaissent pas lorsque la
puissance est perdue.
• Les puces ROM programmables (PROM)
– Certaines instructions sur la puce peuvent être modifiés
Mémoire Flash

• RAM non-volatile
– Utilisé dans les téléphones cellulaires, appareils
photo numériques, et certains ordinateurs de
poche, assistants personnels (PDA)
– vitesse élevée, durée de vie (nombre de fois
d’écriture) et moins de puissance
Mémoire Cache
• C'est Une zone de stockage temporaire
– Accélère le transfert de données dans le système
• Un petit bloc de mémoire à haute vitesse
– Stocke les données et les instructions utilisées plus
fréquemment et plus récemment
• Le microprocesseur cherche ce qu'il faut dans le
cache d'abord
– Le transfert des données de la mémoire cache est
beaucoup plus rapide que de la mémoire ordinaire
– Si ces données ne sont pas dans le Cache, l’unité de
commande les récupère de la mémoire ordinaire
• La performance du système en terme de rapidité dépend
aussi du Cache
Le système des bus

• Passages électriques
parallèles pour transport de
données entre le processeur
et la mémoire
• Largeur de bus
– Le nombre de chemins
électriques pour transporter
des données
– Mesurée en bits
• Vitesse du bus
– Mesurée en mégahertz (MHz)
Le système des bus – Cont.
Largeur de bus

• Typiquement: est de même taille d'un mot pour


le CPU
• Avec une taille de bus plus grande, le CPU peut:
– Transférer plus de données à la fois
• Rendre l'ordinateur plus rapide
– S'adresser aux mémoires à plus grand nombre
d'adresses
• Permet d'implanter plus de mémoires (car ça dépend de la
taille des bus)
– Perfectionner un plus grand nombre et une variété
des instructions.
Vitesse des bus

• Un bus ayant une vitesse plus grande permet


un transfert très rapide des données à travers
le système
• Les ordinateurs personnels ont des vitesses de
bus de 400 MHz ou 533 (voir plus
actuellement)
Les bus d’extension

• Pour connecter d’autres


périphériques au système:
– Les cartes d’extension
(Ethernet, graphique..)
– Les ports
– Les bus d’extension communs
Les ports

• Connecteurs externes pour brancher des


périphériques comme les imprimantes
• Deux types de ports
– Série: transmet des données bit par bit
• Utilisé pour les périphériques à bas débit (lentes) tels
que la souris et le clavier
– Parallèle: transmet des groupes de bits ensemble
• Utilisé pour les appareils plus rapides tels que les
imprimantes et scanners...etc.
Bus et Ports usuels

• Industry Standard Architecture (ISA) bus


– Utilisé pour les périphériques lentes comme la souris et le modem
• Bus PSI (Peripheral Component Interconnect)
– Utilisé pour les appareils plus rapides comme les disques durs
• Accelerated Graphics Port (AGP)
– Fournit des performances vidéo plus rapides
• Universal Serial Bus (USB)
– permet de convertir de nombreux dispositifs en série dans le port USB
• Norme IEEE 1394
– Un bus à haute vitesse normalement utilisé pour connecter un
équipement vidéo
• Bus pour lecteur de cartes (PC Card)
– Permet aux ordinateurs portables de brancher un appareil de taille de
carte de crédit
IEEE 1394 PC Card bus

AGP

PSI

ISA USB

Vous aimerez peut-être aussi