Transcript Detail MicroP
Slide 1
Architectures des ordinateurs
Processeur
Philippe Bancquart
Slide 2
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 3
UAL : Rappel
Unité chargée
Des opérations arithmétiques :
ADD (+), SUB (-), MUL (*), DIV (:), INC (+ 1), DEC (- 1)
Des opérations logiques :
AND, OR, XOR, NOT, CMP
LSL, LSR, ASR (décalages)
Slide 4
Architecture de Von Neuman
Slide 5
Chemin des données
Slide 6
Code opération : assembleur
Programme en langage machine 80486 implanté à l’adresse mémoire
0100H
A1 01 10 03 06 01 12 A3 01 14
Ce programme additionne le contenu de deux cases mémoire et range le
résultat dans une troisième
Voici une transcription langage symbolique du programme complet.
L'adresse de début de chaque instruction est indiquée à gauche (en
hexadécimal).
Adresse Contenu MP Langage Symbolique Explication en francais
0100
A1 01 10
0103
03 06 01 12
0107
A3 01 14
MOV AX, [0110] Charger AX avec le contenu
de 0110.
ADD AX, [0112] Ajouter le contenu de 0112
a AX (resultat dans AX).
MOV [0114],AX Ranger AX en 0114.
Slide 7
Code opération : assembleur
Symbole
Code Op.
Octets
MOV AX, valeur
B8
3
AX valeur
MOV AX, [ adr ]
A1
3
AX contenu de l'adresse adr.
MOV [ adr ], AX
A3
3
range AX à l'adresse adr.
ADD AX, valeur
05
3
AX AX + valeur
ADD AX, [ adr ]
03 06
4
AX AX + contenu de adr.
SUB AX, valeur
2D
3
AX AX - valeur
SUB AX, [ adr ]
2B 06
4
AX AX - contenu de adr.
SHR AX, 1
D1 E8
2
décale AX à droite.
On utilise des programmes spéciaux, appelés assembleurs,
pour traduire automatiquement le langage symbolique en code
machine.
Slide 8
Fonctionnement de l’UC
L ’UC possède un registre spécial pour stocker la -instruction
en cours
Slide 9
Schéma de l’unité de commande
Slide 10
Schéma
Slide 11
MMI, RMI et MCO
MMI ou mémoire de micro-instructions = élément central de la
logique de contrôle
RMI (son registre associé) contient une micro instruction (tps t)
La MMI, généralement une mémoire morte, contient toutes les
micro-instructions qui sont nécessaires au processeur pour
exécuter les instructions du langage machine.
MCO, ou compteur ordinal du microprogramme : Il s'agit d'un
registre qui contient l'adresse de la prochaine micro instruction
à exécuter c'est-à-dire celle qui doit être placée dans le RMI,
seul lieu où une micro instruction peut agir sur le circuit de
données.
Slide 12
Niveaux de programmation
Slide 13
CICS intel 8086, pentium, Motorola
Complex Instruction Set Computer : calculateur à
jeu d'instructions complexe. Caractérise les
microprocesseurs qui disposent d'un jeu étendu
d'instructions avec de nombreux modes
d'adressage.
La plupart ne sert que dans des cas relativement
rares.
Environ plus de 500 instructions, celles qui sont
peu utilisées encombrent le HardWare du
processeur
Une instruction peut être sur plusieurs mots et de
longeur variable.
Slide 14
RISC IBM/Motorola (PowerPC),SUN (Supersparc), DIGITAL (Alpha)
Reduced Instruction Set Computer : calculateur à jeu
d'instructions réduit. En utilisateur un jeu d'instructions
plus réduit que la technologie CISC, les processeurs
RISC peuvent disposer d'un jeu d'instructions entièrement
cablé (donc sans microcode) ce qui permet une exécution
des instructions en un cycle.
Le nombre approximatif d’instruction environ 200.
Les RISC, sont plus rapide, il intégre au matériel les
instructions les plus utilisées
La longueur des instructions est constantes.
Mais il faut plus de cycle d’horloge pour faire l’équivalent
d’une instruction CISC
Slide 15
CICS / RISC
Actuellement, les processeurs de type RISC sont plus
performants que les CISC bien que ces derniers ne soient
plus des CISC “purs”. On trouve plus souvent des
hybrides incorporant différentes technologies: le pipeline
(voir plus loin), le mariage du CISC et RISC comme dans
le pentium pro (c'est un processeur RISC qui “traduit” les
instructions CISC).
On parle enfin d'architecture superscalaire (voir plus loin)
quand un processeur RISC est capable d'exécuter
plusieurs instructions simultanément en un seul cycle
d'horloge.
Slide 16
La mémoire cache
Depuis pas mal d'années, les circuits de mémoire ne sont plus
assez rapides pour suivre la cadence des microprocesseurs
on intercale entre le microprocesseur et la mémoire RAM, une autre
mémoire allant à la même vitesse que le microprocesseur
celle-ci est de taille assez réduite car elle coûte bien plus cher que la
mémoire RAM standard
souvent, il y a deux caches, un pour le programme et un pour les
données
Augmentation de la taille des bus d’adresses et de données
Le micro-processeur est alimenté plus vite
Bus d’adresse à 32 ou 64 bits = architecture à 32 ou 64 bits
Slide 17
Le cache
processeur
cache
80386
0
80486
1 cache interne 8Ko
pentium
1 cache interne donnée 8 Ko et 1 cache interne instructions 8 Ko
pentium 2
1 cache interne donnée 16 Ko et 1 cache interne instructions 16 Ko
1 cache externe 256 Ko commun au 2 caches internes
pentium 3
1 cache interne donnée 16 Ko et 1 cache interne instructions 16 Ko
1 cache externe 256 Ko commun au 2 caches internes
Slide 18
Le Pipeline
Un pipeline est composé de plusieurs étages
chacun de ces étages est dédié à un traitement particulier
Dans un processeur sans pipeline, les instructions sont
exécutées les unes après les autres
il ne rentrera une nouvelle instruction dans le pipeline que lorsque
l'instruction précédente est passée par tous les étages et est terminée
le processeur n'utilise qu'un seul étage à la fois, donc les autres
étages sont inactifs.
Avec un processeur à 5 étages sans pipeline
Slide 19
Le Pilpeline
But : utiliser tous les étages en même temps
lorsqu'une instruction est dans un étage, 4 autres instructions sont
en cours de traitement.
grâce au débit de la mémoire cache de niveau 1 les instructions
peuvent s'enchaîner suffisamment vite pour que le pipeline soit
constamment alimenté.
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28
Slide 29
Slide 30
Slide 31
Slide 32
Processeurs superscalaires
Un microprocesseur est de type superscalaire quand il intègre
plus d'une unité entière (ALU) en con cœur.
les deux unités sont indépendantes et fonctionnent en parallèle,
chacune se charge d'exécuter une instruction sur deux.
Il est ainsi possible d'exécuter deux instructions par cycle d'horloge.
Slide 33
Coprocesseurs mathématiques
Jusqu'au 386, celui-ci était parfois assisté par un coprocesseur
mathématique optionnel permettant d'accroître les capacités de
calcul en virgule flottante (très
utilisé par les tableurs et les logiciels de traitement graphique).
Aujourd’hui, ce coprocesseur fait partie intégrante du CPU.
Slide 34
Efficacité architecturale
Croissance du nombre d’instructions exécutées par cycle
d’horloge
Nb d'instructions
Processeur
par cycle d'horloge
i386
1/8
i486
1/2
Pentium
1
Pentium Pro
1,5
P4
2,5
Slide 35
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 36
Processeurs 80x86
Micro-processeurs 80x86 équipent les PC et compatibles
Premiers PC (début 80) = 8086, micro-processeur 16 bits
Puis 80286, 80386, 80486, Pentium…
Augmentation de la fréquence d’horloge, de la largeur des bus
d’adresses et de données
Ajout de nouvelles instructions et de registres
Compatibilité ascendante
Un programme écrit dans le langage machine du 286 peut
s’exécuter sur un 386 (l’inverse est faux)
En TP on utilisera un assembleur 8086 et on exécutera le
programme sur les Pentium de l’IUT
Slide 37
Caractéristiques du 8086
Bus de données : 16 bits
Bus d’adresse : 20 bits
Registres : 16 bits
4 accumulateurs 16 bits
Accumulateur (AX)
Base (BX)
Counter (CX)
Accumulateur auxiliaire (DX)
Registres accessibles sous forme de 2 info 8 bits
AX se décompose en AH (poids fort) et AL (poids faible de
AX)…
Slide 38
Caractéristiques du 8086
4 accumulateurs 16 bits
AX, BX, CX ,DX
Registres d’index :
Pointeur d’instruction (IP)
Index source ou destination(SI, DI)
Pointeur de Pile ou de base (SP, BP)
3+1 registres segment :
Segment de code (CS) : contient le prog en cours d’exécution
Segment data (DS) : contient les données du programme
Segment stack (SS) : contient des données particulières
Extra Segment (ES)
Slide 39
Segmentation de la mémoire
Largeur du bus d’adresse = 20 bits
Possibilité d’adressage mémoire = 220 = 1 Mo
Le pointeur d’instruction fait 16 bits
Possibilité d’adresser 216 = 64 Ko (ce qui ne couvre pas la mémoire)
On utilise deux registres pour indiquer une adresse au processeur
Chaque segment débute à l'endroit spécifié par un registre spécial
nommé registre segment.
Le déplacement permet de trouver une information à l'intérieur du
segment.
CS:IP : lecture du code d’une instruction (CS registre segment et IP
déplacement)
DS : accès aux données (MOV AX,[1045] = lecture du mot mémoire
d’adresse DS:1045H)
Slide 40
Segmentation de la mémoire
Registres de déplacement = sélectionner une information dans un
segment.
Dans le segment de code CS : le compteur de programme IP joue
ce rôle. CS:IP permet d'accéder à une information dans le segment
de code.
Dans les segments de DS : les deux index SI ou DI jouent ce rôle.
Le déplacement peut être aussi une constante. DS:SI ou DS:DI
permettent d'accéder à une information dans le segment de
données.
Dans le segment de pile SS le registre SP (stack pointer) et BP
(base pointer) jouent ce rôle. SS:SP ou SS:BP permettent d'accéder
à une information dans le segment de pile.
Slide 41
Jeu d’instruction (1)
Instruction d’affectation
(Transfert CPU Mémoire)
: MOV
Instructions arithmétiques
(Opération Acc / Donnée)
: INC (incrémentation)
: DEC (décrementation)
: ADD (addition)
: SUB (soustraction)
: CMP (soustraction sans
sauvegarde)
: NEG
Instructions logiques
: NOT, OR, XOR
: AND, TEST (= AND sans
sauvegarde)
: SHL (SHR), SAL (SAR)
: ROL (ROR), RCL (RCR)
Slide 42
Jeu d’instruction (2)
Branchement
Branchements conditionnels
: JMP
: JE/ JZ (JNE/ JNZ) : Jump if
zero
: JO (JNO) : Jump if overflow
: JS (JNS) : Jump if sign
Comparaison de valeurs
CMP AX, BX suivi d ’un test :
AX > BX ?
AX < BX ?
(entiers naturels)
JA ( >= JAE)
JB (JBE)
(complément à 2)
JG (JGE)
JL (JLE)
Slide 43
Branchements
Le processeur exécute une instruction en mémoire puis passe à
celle qui suit en mémoire : séquentiel
Besoin de faire répéter au processeur une suite d’instructions
Besoin de déclencher une action qui dépend d’un test
Utilisation d’une instruction de branchement ou saut
On indique au processeur l’adresse de la prochaine instruction
On distingue deux catégories de branchements
le saut est toujours effectué (sauts inconditionnels)
il est effectué seulement si une condition est vérifiée (sauts
conditionnels).
Slide 44
Rappel sur le registre IP
Le registre IP du processeur conserve l'adresse de la prochaine
instruction à exécuter
Le processeur effectue les actions suivantes pour chaque
instruction :
1.
2.
3.
lire et décoder l'instruction à l'adresse IP;
IP IP + taille de l'instruction;
exécuter l'instruction.
Pour modifier le déroulement normal d'un programme
l'exécution de l'instruction doit modifier la valeur de IP
c'est ce que font les instructions de branchement.
Slide 45
Sauts inconditionnels
Principale instruction de saut inconditionnel = JMP
L'opérande de JMP est un déplacement, c'est à dire une valeur
qui va être ajoutée à IP. L'action effectuée par JMP est :
IP = IP + déplacement
Le déplacement est un entier relatif sur codée 8 bits. La valeur du
déplacement est :
déplacement = adr. instruction visée - adr. instruction suivante
Slide 46
Sauts inconditionnels : exemple
Exemple : le programme suivant écrit indéfiniment la valeur 0 à
l'adresse 0140H.
La première instruction est implantée à l'adresse 100H.
Adresse Contenu MP Langage Symbolique Explication en français
0100
0103
0106
0107
B8 00 00
A3 01 40
EB FC
MOV
MOV
JMP
xxx
AX, 0
met AX a zéro
[140], AX
écrit à l'adresse 140
0103
branche en 103
-> instruction jamais exécutée
Le déplacement est ici égal à FCH, c'est à dire -4 (=103H-107H).
Slide 47
Indicateurs
Les instructions de branchement conditionnels utilisent les
indicateurs,
bits spéciaux positionnés par l'UAL après certaines opérations.
nous étudierons ici les indicateurs nommés ZF, CF, SF et OF.
ZF : Zero Flag
Cet indicateur est mis à 1 lorsque le résultat de la dernière opération
est zéro. Sinon, ZF est positionné à 0.
CF : Carry Flag
C'est l'indicateur de report (retenue). Il est positionné par les
instructions ADD, SUB et CMP (entiers naturels).
CF = 1 s'il y a une retenue
Slide 48
Indicateurs (suite)
SF : Sign Flag
SF est positionné à 1 si le bit de poids fort du résultat d'une addition ou
soustraction est 1; sinon SF=0. SF est utile lorsque l'on manipule des
entiers relatifs, car le bit de poids fort donne alors le signe du résultat.
OF : Overflow Flag (Indicateur de débordement)
OF=1 si le résultat d'une addition ou soustraction donne un nombre qui
n'est pas codable en relatif dans l'accumulateur (par exemple si l'addition
de 2 nombres positifs donne un codage négatif).
CMP = SUB, mais ne stocke pas le résultat de la soustraction
(positionner les indicateurs)
CMP AX, 5 : ZF = 1 si AX contient 5, et ZF = 0 si AX 5.
Slide 49
Sauts conditionnels : exemples
JE Jump if Equal (ou JZ)
saut si ZF = 1;
JNE Jump if Not Equal (ou JNZ)
saut si ZF = 0;
JG Jump if Greater
saut si ZF = 0 et SF = OF;
JLE Jump if Lower or Equal
saut si ZF=1 ou SF = OF;
JS (JNS) Jump if Sign
saut si SF=1;
JA Jump if Above
saut si CF=0 et ZF=0;
JBE Jump if Below or Equal
saut si CF=1 ou ZF=1.
JB Jump if Below
saut si CF=1.
JO (JNO) Jump if Overflow
saut si OF=1…
Slide 50
Décalage et rotations
Décalage vers la gauche ou vers la droite les bits de
l'accumulateur.
opérations utilisées pour décoder bit à bit des données
ou pour diviser ou multiplier rapidement par une puissance de 2.
En effet : décaler AX de n bits vers la gauche revient à le multiplier
par 2n
De même, un décalage vers la droite revient à diviser par 2n.
Ces opérations peuvent opérer sur les registres AX ou BX (16
bits) ou sur les registres de 8 bits AH, AL, BH et BL.
SHL, SHR, ROL, ROR, RCL, RCR…
Slide 51
Décalage
SHL registre, 1 (Shift Left)
Décale les bits du registre d'une position vers la gauche. Le bit de
gauche est transféré dans l'indicateur CF. Les bits introduits à droite sont
à zéro.
SHR registre, 1 (Shift Right)
Comme SHL mais vers la droite. Le bit de droite est transféré dans CF.
SHL et SHR peuvent être utilisé pour multiplier/diviser des entiers
naturels (et non des relatifs car le bit de signe est perdu)
Slide 52
Rotations
ROL registre, 1 (Rotate Left)
Rotation vers la gauche : le bit de poids fort passe à droite, et est aussi
copié dans CF. Les autres bits sont décalés d'une position.
ROR registre, 1 (Rotate Right)
Comme ROL, mais à droite.
Slide 53
Décalage et rotations
RCL registre, 1 (Rotate Carry Left)
Rotation vers la gauche en passant par l'indicateur CF. CF prend la place
du bit de poids faible; le bit de poids fort part dans CF.
RCR registre, 1 (Rotate Carry Right)
Comme RCL, mais vers la droite.
RCL et RCR sont utiles pour lire bit à bit le contenu d'un registre7.
Slide 54
Opérations logiques
3 opérateurs logiques : ET, OU et OU exclusif.
jamais propagation de retenue lors de ces opérations (chaque bit du
résultat est calculé indépendamment des autres)
Opérations sont de la forme : OR destination, source
destination : registre ou emplacement mémoire (adresse) où doit
être placé le résultat.
source : constante (adressage immédiat), registre (adressage
implicite), ou adresse (adressage direct).
OR AX, FF00 ; AX <- AX ou FFOO
OR AX, BX ; AX <- AX ou BX
OR AX, [1492] ; AX <- AX ou [1492]
Slide 55
Opérations logiques
OR destination, source (OU : 1 ou 0 =1 ; 1 ou 1 = 1…)
OR est souvent utilisé pour forcer certains bits à 1. Par exemple
après OR AX, FF00, l'octet de poids fort de AX vaut FF, tandis que
l'octet de poids faible est inchangé.
AND destination, source (ET : 1 et 1 = 1 …)
AND est souvent utilisé pour forcer certains bits à 0. Après AND AX,
FF00, l'octet de poids faible de AX vaut 00, tandis que l'octet de
poids fort est inchangé.
XOR destination, source (OU EXCLUSIF : 1 xor 1 = 0…)
XOR est souvent utilisé pour inverser certains bits. Après XOR AX,
FFFF, tous les bits de AX sont inversés
Slide 56
Codage
Les instructions et leurs opérandes (paramètres) sont stockés en
mémoire principale
La taille totale d'une instruction (nombre de bits nécessaires pour la
représenter en mémoire) dépend du type d'instruction et aussi du
type d'opérande.
Chaque instruction est toujours codée sur un nombre entier
d'octets, afin de faciliter son décodage par le processeur. Une
instruction est composée de deux champs :
le code opération, qui indique au processeur quelle instruction
réaliser;
le champ opérande qui contient la donnée, ou la référence à une
donnée en mémoire (son adresse).
Slide 57
Codage
Selon la manière dont la donnée est spécifiée, c'est à dire selon
le mode d'adressage de la donnée, une instruction sera codée
par 1, 2, 3 ou 4 octets.
Nous distinguerons ici quatre modes d'adressage :
Implicite
immédiat
direct
relatif
Slide 58
Types d’adressage
Adressage implicite ou par registre
ADD AX, BX
INC AX
Pas d’accès mémoire pour les opérandes
L'instruction contient seulement le code opération, sur 1 ou 2 octets.
L'instruction porte sur des registres ou spécifie une opération sans
opérande
Slide 59
Types d’adressage
Adressage immédiat
ADD AX, valeur
1 accès mémoire pour lire la valeur
Le champ opérande contient la donnée (une valeur constante sur 1 ou 2
octets).
Exemple : ``Ajouter la valeur 5 à AX''. Ici l'opérande 5 est codée sur 2 octets
puisque l'opération porte sur un registre 16 bits (AX).
Slide 60
Types d’adressage
Adressage direct
ADD AX, [adresse]
2 accès mémoire : adresse puis valeur
Le champ opérande contient l'adresse de la donnée en mémoire
principale sur 2 octets.
Attention : dans le 80x86, les adresses sont toujours manipulées sur 16
bits, quelle que soit la taille réelle du bus.
Exemple : ``Placer dans AX la valeur contenue à l'adresse 130H''.
Slide 61
Types d’adressage
Adressage relatif ou indexé
ADD AX, [adresse+index]
MOV AX, [SI+1]
2 accès mémoire
Ce mode d'adressage est utilisé pour certaines instructions de
branchement.
Le champ opérande contient un entier relatif codé sur 1 octet, nommé
déplacement, qui sera ajouté à la valeur courante de IP.
Slide 62
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 63
Code opération : assembleur
Programme en langage machine 80486 implanté à l’adresse mémoire
0100H
A1 01 10 03 06 01 12 A3 01 14
Ce programme additionne le contenu de deux cases mémoire et range le
résultat dans une troisième
Voici une transcription langage symbolique du programme complet.
L'adresse de début de chaque instruction est indiquée à gauche (en
hexadécimal).
Adresse Contenu MP Langage Symbolique Explication en francais
0100
A1 01 10
0103
03 06 01 12
0107
A3 01 14
MOV AX, [0110] Charger AX avec le contenu
de 0110.
ADD AX, [0112] Ajouter le contenu de 0112
a AX (resultat dans AX).
MOV [0114],AX Ranger AX en 0114.
Slide 64
Code opération : assembleur
Symbole
Code Op.
Octets
MOV AX, valeur
B8
3
AX valeur
MOV AX, [ adr ]
A1
3
AX contenu de l'adresse adr.
MOV [ adr ], AX
A3
3
range AX à l'adresse adr.
ADD AX, valeur
05
3
AX AX + valeur
ADD AX, [ adr ]
03 06
4
AX AX + contenu de adr.
SUB AX, valeur
2D
3
AX AX - valeur
SUB AX, [ adr ]
2B 06
4
AX AX - contenu de adr.
SHR AX, 1
D1 E8
2
décale AX à droite.
On utilise des programmes spéciaux, appelés assembleurs,
pour traduire automatiquement le langage symbolique en code
machine.
Slide 65
Processus d’assemblage
3 phases :
1.
Saisie du code source avec un éditeur de texte
2.
Compilation du code source
3.
Édition des liens
permet de lier plusieurs codes objets en un seul
exécutable
permet d ’inclure des fonctions prédéfinies dans des
bibliothèques
Slide 66
Assembleur : NASM
[BITS 16]
[ORG 0x0100]
[SEGMENT .text]
BEGIN:
jmp
START
FIN:
mov ax, 0x4C00
int 0x21
START:
mov [Var1], 3
jmp FIN
Val equ 12
Var1 db 69
Var2 dw 0FFFFh
Tab resb 100
Slide 67
En-tête
[BITS16] : indique au compilateur qu’on travaille en
mode 16 bits (programme DOS)
[ORG 0x100] : le programme est chargé en mémoire à
partir de l’adresse 0x100h (programme .com)
[SEGMENT .text] : déclaration du segment dans lequel
on travaille, dans un programme .com : 1 seul segment
pour le code et les données
[int 0x20] : Interruption = appel système pour rendre la
main au dos
Slide 68
Variables
DB : Variable 8 bits
DW : Variable 16 bits
EQU : Constante
RESB : Variable 8 bits (tableau)
RESW : Variable 16 bits (tableau)
BYTE : Taille d'une variable mémoire 8 bits
WORD : Taille d'une variable mémoire 16 bits
Etiquette : adresse d’une méthode/ branchement
Slide 69
Représentation mémoire : .com
CS, DS, SS
Header DOS
100h
IP
Programme
64 Ko
Variables
SP
Slide 70
Fichier .com
Un seul segment de 64 Ko pour les données le
programme et la pile
.exe : on peut avoir un segment pour chaque
Au début du programme
IP pointe sur l’adresse 100h du segment (header DOS)
CS, DS, SS pointent au début
SP pointe à la fin (tête de pile) : attention que votre pile
n’écrase pas votre programme ou vos données
Slide 71
Exemple de programme NASM
[BITS 16]
[ORG 0x100]
[SEGMENT .text]
mov AX,0x13
int 0x10
mov AX,0xA000
mov ES,AX
mov DI,6720
boucle:
mov byte [ES:DI],5
add DI,321
cmp DI,12000
jb boucle
int 0x20
Slide 72
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 73
Pile
Structure de « rangement » de données
définie dans un segment de mémoire particulier (.exe) ou
dans le même que le code et les données (.com)
fonctionnement LIFO (Last In, First Out)
Comment y accéder :
adresse du dernier élément posé : SS:SP
empiler : PUSH Reg16 (registre 16 bits)
dépiler : POP Reg16 (registre 16 bits)
La pile augmente vers les adresses faibles
PUSH : SP SP- 2, POP : SP SP+ 2
Slide 74
Pile : exemple d’utilisation (1)
PUSH registre
empile le contenu du registre sur la pile.
POP registre
retire la valeur en haut de la pile et la place dans le registres
spécifié.
Exemple : transfert de AX vers BX en passant par la pile.
PUSH AX ; Pile <- AX
POP BX ; BX <- Pile
Note : cet exemple n'est pas très utile, il vaut mieux employer
MOV AX, BX.)
Slide 75
Pile : exemple d’utilisation (2)
La pile est souvent utilisée pour sauvegarder
temporairement le contenu des registres :
;AX et BX contiennent
PUSH AX
PUSH BX
MOV BX, truc ;
ADD AX, BX
;
POP BX
;
POP AX
;
des données a conserver
on utilise AX
et BX
récupère l'ancien BX
et l'ancien AX
On voit que la pile peut conserver plusieurs valeurs.
La valeur dépilée par POP est la dernière valeur empilée;
c'est pourquoi on parle ici de pile LIFO (Last In First Out,
Premier Entré Dernier Sorti).
Slide 76
Pile : registres SS et SP
16 bits
Le registre SS (Stack
Segment) = registre segment qui
contient l'adresse du segment de
pile courant (16 bits de poids fort
de l'adresse). Il est normalement
initialisé au début du programme
et reste fixé par la suite.
Le registre SP (Stack Pointer)
contient le déplacement du
sommet de la pile (16 bits de
poids faible de son adresse).
PUSH POP
SP
Slide 77
Pile : registres SP
L'instruction PUSH effectue les opérations suivantes :
SP SP - 2
[SP] valeur du registre 16 bits.
Notons qu'au début (pile vide), SP pointe ``sous'' la pile
L'instruction POP effectue le travail inverse :
registre destination [SP]
SP SP + 2
Si la pile est vide, POP va lire une valeur en dehors de
l'espace pile, donc imprévisible.
Slide 78
Pile : registres SP
16 bits
Emplacement
libre
Adresses
Croissantes
SP-2
SP
PUSH POP
Slide 79
Procédures (1)
Déclaration d’une procédure :
nous utiliserons une étiquette ou label pour définir le début et
le nom d’une procédure
Appel de la procédure dans le programme
CALL NEAR label
...
CALL NEAR affiche
affiche :
MOV AH,9
INT 0x21
RETN
Slide 80
Procédures (2)
Comment l’unité de traitement arrive-t-elle à retourner au
programme principal à la fin de la procédure ?
Au moment de l’appel de la fonction, l’adresse de
l’instruction suivante est sauvegardée dans la pile :
sauvegarde de IP
A la fin de la procédure, l ’Unité de Traitement récupère les
valeurs sauvegardées pour retourner au programme principal
RETN = dépilement de IP
Slide 81
Passage de paramètres
2 méthodes de passage de paramètres :
par registre
par la pile
Passage de paramètres par registre :
les paramètres d’entrée de la procédure sont mis dans des
registres avant l’appel de la procédure
les paramètres de sortie sont aussi rangés dans des
registres
avantage = rapidité
inconvénients = peu de registres
Slide 82
Passage par registre
;programme principal
...
Mov AX, N1
Mov BX, N2
Call Near Moyenne
;Procédure
Moyenne :
Add AX, BX
SHR AX, 1
RETN
Mov Res, AX
...
Retn = dépilement de IP
pour retourner au
programme principal
Slide 83
Passage par la pile (1)
Les paramètres d’entrée sont empilés avant l’appel de la
procédure
Les paramètres de sortie sont dépilés par le programme
principal
avantage = « portabilité »
inconvénients = récupération des
paramètres plus « lourde »
;Procédure
;programme
...
PUSH N1
PUSH N2
Call Near Moyenne
POP Res
...
Moyenne :
PUSH BP
Mov BP, SP
Mov AX, [BP+4]
Add AX, [BP+6]
SHR AX, 1
Mov [BP+ 6], AX
POP BP
Retn 2
Slide 84
Passage par la pile (2)
Évolution de la pile
A quoi sert BP ?
BP = référence de la pile au début de la procédure
permet d’avoir une référence fixe pour récupérer les
paramètres
ici : [BP+ 4] pour N2 et [BP+ 6] pour N1
Slide 85
Passage par la pile (3)
Sauvegarde du résultat et nettoyage de la pile
Slide 86
Rappels : Registres de segment
Nom
Taille
Fonction
Cs (Code Segment) 16 bits
Mémorise le segment où se trouve le code en
cours d'exécution (ne peut pas être modifié par
le programme)
Ds (Data Segment) 16 bits
Mémorise le segment où se trouve les
données du programme.
Ss (Stack Segment)16 bits
Mémorise le segment où se trouve la pile de
données du programme
Es (Extra Segment) 16 bits
Ce segment peut être utilisé pour faire ce que
l'on veut. Par exemple, il peut pointer sur la
mémoire écran.
Slide 87
Rappels : Registres de travail
Nom
Taille
Fonction
Ax (Accumulateur) 16 bits
On l'utilise généralement pour des opérations
arithmétiques, telles que MUL (multiplication)
ou DIV (division). Ax peut se diviser en deux
sous-registres de 8 bits. Ah représente les 8
premiers bits, et Al les 8 derniers.
Bx (Base)
Bx est utilisé lors de l'accès à une zone
mémoire sous forme de tableau, il représente
l'indice de ce tableau. Par exemple, on écrira
Mov Dx, Es:[Bx]. Bx peut se diviser en deux
sous-registres de 8 bits. Bh représente les 8
premiers bits, et Bl les 8 derniers.
16 bits
Slide 88
Rappels : Registres de travail
Nom
Taille
Fonction
Cx (Compteur)
16 bits
Lors de l'appel d'instructions comme REP
(répéter) ou LOOP (boucle), c'est le registre
Cx qui est lu Cx peut se diviser en deux sousregistres de 8 bits. Ch représente les premiers
bits, et Cl les 8 derniers.
Dx (Données)
16 bits
Ce registre est généralement utilisé pour
stocker des données provisoires. Dx peut se
diviser en deux sous-registres de 8 bits. Dh
représente les 8 premiers bits, et D les 8
derniers.
Slide 89
Rappels : Registres d'offset
(à combiner avec une adresse de segment)
Nom
Taille
Fonction
Si (Source Index)
16 bits
Lors d'opérations sur les chaînes de
caractères, comme MOVSB ou SCASB,
Ds:[Si] désigne la variable 'source'.
Di (Dest Index)
16 bits
Lors d'opérations sur les chaînes de
caractères, comme MOVSB ou SCASB,
Es:[Di] désigne la variable 'destination'.
Bp (Base Pointeur) 16 bits
Bp a un rôle proche de celui de Bx, mais il est
généralement utilisé avec le segment de pile
(Ss:[Bp]).
Slide 90
Rappels : Registres d'offset
(à combiner avec une adresse de segment)
Nom
Taille
Fonction
Ip (Instruction Point)16 bits
Cs:[Ip] indique la prochaine instruction à
exécuter. Tout comme Cs, Ip ne peut être
manipulé par le programme exécuté.
Sp (Stack Pointeur) 16 bits
Ss:[Sp] indique le dernier élément de la pile.
Chaque opération PUSH (empiler) ou POP
(dépiler) modifie le registre Sp.
Slide 91
Exemple de programme NASM
[BITS 16]
[ORG 0x100]
[SEGMENT .text]
PILE PROC
Slide 92
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 93
Interpréteur et compilateur (1)
On distingue grossièrement deux familles de langages
informatique
les langages interprétés
les langages compilés
Un programme en langage interprété va être traduit au fur et
à mesure de son exécution par un interpréteur
interpréteur : programme chargé de décoder chaque
instruction du langage et d'exécuter les actions correspondantes
Programmes compilés : traduction en langage machine a
lieu une fois pour toute.
Le compilateur (traducteur) traduit chaque instruction du
langage en une suite d'instructions en langage machine
Slide 94
Interpréteur et compilateur (2)
Les programmes compilés s'exécutent ainsi plus rapidement
que les programmes interprétés
La traduction est déjà faite
Mais on perd en souplesse de programmation, car les types de
données doivent être connus au moment de la compilation
Compilateur = traduit un programme source écrit dans un
langage de haut niveau (C) en un autre programme dans un
langage de bas niveau (par exemple l'assembleur)
Opération de traduction complexe
Compilateurs = programmes sophistiqués
Slide 95
Principaux langages
Les principaux langages compilés sont :
C/C++
ADA
Cobol
Fortran
Pascal
: programmation système et scientifique
: logiciels embarqués
: gestion
: calcul scientifique
: enseignement
Quelques langages interprétés :
BASIC
LISP, Prolog
Python
Java
MATLAB
: bricolage
: Intelligence Artificielle
: programmation système, Internet
: applets internet
: calcul scientifique
LISP, Java ou Python : une première phase de compilation vers un
langage intermédiaire (bytecode), qui sera lui même interprété.
Slide 96
Compilation du C
Traduction en assembleur des programmes en langage C
Le détail de cette traduction (ou compilation) dépend
Compilateur utilisé
Système d'exploitation (DOS, Windows, UNIX,...).
Taille des types : exemple int (16 ou 32 bits)
Modèle de mémoire utilisé (pointeurs sur 16 ou 32 bits,
données et code dans des segments différents ou non, etc.)
Exemple : compilateur Turbo C++ version 3 sous DOS
(entiers de 16 bits et le modèle de mémoire « small »)
Génère directement du code objet (fichier .OBJ) à partir
d'un fichier source en langage C
Il est cependant possible de demander l'arrêt de la
compilation pour obtenir du langage assembleur (fichier .ASM)
Slide 97
C et assembleur
Introduction d’instructions assembleur dans des
programmes en langage C (ou C++).
Programme non portable, car le langage assembleur
diffère d'un type d'ordinateur à l'autre
Pour un programme utilisant les ressources matérielles
d'une machine : plus confortable d'écrire un programme C
contenant quelques lignes d'assembleur que de tout
écrire en assembleur.
void main(void) {
Exemple avec
Turbo C++/TASM
int A = 20;
asm{
MOV AX, A
SHL AX, 1
}
printf(’’AX =%d\n’’,_AX);
}
Ce programme affiche 40.
Slide 98
Système d’exploitation
OS : Operating System : le programme permettant
d'utiliser les circuits qui ont été câblés.
Soit entièrement en ROM
Soit un code de boot en ROM se chargeant de placer en
RAM le reste de l'OS à partir de la disquette ou du DD
Souvent, une ROM de boot contient néanmoins la partie
de l'OS la plus primitive: le BIOS.
But de l'OS = décharger le programme des tâches
répétitives et de bas niveau.
Gain de temps lors du développement programmes
Pas à se soucier du fonctionnement de la circuiterie
électronique
Slide 99
Système d’exploitation
Le système d’exploitation doit s’occuper de :
l ’exécution des commandes d’entrée/ sortie
la gestion de la mémoire
la gestion des fichiers
la multi- programmation (« multi- tâche »)
Comment exécuter plusieurs programmes à la fois ?
Et si ces programmes veulent tous accéder à l ’imprimante
en même temps ?
Et s’ils doivent échanger des informations ?…
Comment exécuter un seul programme avec plusieurs
processeurs ?
la sécurité (gestion des accès,…)
Le SE doit aussi fournir :
un langage de commande
divers utilitaires (compilateurs, éditeurs, outils, …)
une interface graphique pour l’utilisateur
Slide 100
Système d’exploitation
Windows 95/ 98, Windows NT (Microsoft) :
processeurs 80x86
OS/ 2 (IBM)
MacOS (Apple) :
processeurs 68000 puis PowerPC
UNIX = famille de SE :
Versions payantes généralement spécialisées à un type
de machine :
SunOS/ Solaris (Sun)
AIX (IBM)
HP/ UX (HP)
Versions libres :
LINUX : 80x86, 68000, PowerPC, Sparc …
Slide 101
Présentation du BIOS
BIOS (Basic Input Output System) : partie de l'OS du plus
bas niveau
opérations très primitives: lecture du clavier, affichage écran en
mode texte, accès simplifié au lecteur de disquette et au disque
dur, accès au ports série et parallèle.
Le programme du BIOS se trouve en mémoire morte (ROM)
une mémoire gardant son contenu lorsque l'on interrompt son
alimentation électrique
Chaque modèle de PC est vendu avec une version du BIOS
adapté à sa configuration matérielle.
Slide 102
Fonctions du BIOS
BIOS librairie de fonctions
Chaque fonction effectue une tâche bien précise (par exemple
afficher un caractère donné sur l'écran)
L'appel de l'une de ces fonctions = appel système
Fonctions du BIOS procédures appelées avec l'instruction
CALL
il a été prévu de pouvoir modifier le comportement du BIOS en
cours d'utilisation (par exemple pour gérer un nouveau
périphérique)
Code du BIOS en ROM = non modifiable
Le BIOS étant différent d'un ordinateur à l'autre, les adresses
des fonctions changent...
Slide 103
Vecteurs d’interruption (1)
Problème résolu par l'utilisation d'une table d'indirection = la
table des vecteurs d'interruptions
table est placée en RAM : contient les adresses (en ROM ou en
RAM) des fonctions du BIOS
implantée à partir de l'adresse 00000000H (première case
mémoire)
elle est initialisée par le BIOS lui même au moment du démarrage
du PC (boot).
Adresse
0000
0004
...
contenu
adresse de la première fonction du BIOS
adresse de la deuxième fonction du BIOS
Slide 104
Vecteurs d’interruption
Chaque élément de la table occupe 4 octets (adresse 32 bits).
table à 256 éléments (1Ko).
exemple : si l'on sait que la fonction du BIOS qui affiche un
caractère est la 33ième, on va l'appeler en lisant la 33ième ligne de
la table, puis en allant exécuter les instructions à l'adresse trouvée :
Adresse
...
0084H
...
contenu
F1234560H
(car 4x33 = 84H).
La table des vecteurs d'interruptions contient des valeurs
différentes pour chaque version de BIOS
peut être modifiée pour pointer sur du code en mémoire
principale, modifiant alors le BIOS existant.
Slide 105
Interruptions
Unité de Traitement exécute séquentiellement les
instructions ou effectue des sauts programmés (JMP,
CALL)
Il existe des situations où l ’U. T. est « déroutée » de sa
tâche :
Reset : signal envoyé au processeur pour un (re-)
démarrage
Exceptions (interruptions internes) : débordement de
pile, dépassement de capacité, div /0, …
Appels systèmes (int. logicielles) : appels du
programme lui- même « int 21h » …
Interruptions physiques (int. externes) : appels d’autres
périphériques
Slide 106
Interruptions logicielles : INT n
L'instruction INT n permet d'appeler la n-ième
fonction de la table des vecteurs d'interruptions.
n est un entier compris entre 0 et 255 (1 octet), car il y a
256 vecteurs d'interruptions dans la table (ex: Int 21h )
L'instruction INT n est semblable à l'instruction CALL
sauf que l'adresse de destination est donnée par la table
des vecteurs d'interruptions
que les indicateurs sont automatiquement sauvegardés
sur la pile.
l’adresse de retour complète (32 bits) doit être empilée
car le traitant d’interruption n’est pas nécessairement dans
le même segment de code que le programme
Slide 107
Interruptions : déroulement
Le déroulement de INT n se passe comme suit :
1. sauvegarde les indicateurs du registre d'état sur la pile
(les indicateurs sont regroupés dans un mot de 16 bits);
2. sauvegarde CS et IP sur la pile;
3. CS et IP sont chargés avec la valeur lue à l'adresse 4 n,
n étant le paramètre de INT. L'exécution continue donc au
début du traitant d'interruption.
Slide 108
Interruptions : fonctionnement
Lorsque l’interruption est déclenchée, l ’U. T. doit
exécuter un bout de programme précis : le traitant de
l’interruption.
l ’U. T. doit savoir où se trouve l ’adresse (CS: IP) du traitant numéro n
Cette information est stockée en mémoire (0000: 0000 à 0000: 03FFh)
Slide 109
Appels système
Le système DOS (Disk Operating System) repose sur le
BIOS,
il appelle les fonctions du BIOS pour interagir avec le matériel
Les fonctions du DOS s'utilisent comme celles du BIOS, via
des vecteurs d'interruptions
fonctionnalités de plus haut niveau que le BIOS (entrées/sorties,
ouverture de fichiers sur disque, etc.)
Les fonctions du DOS s'appellent à l'aide du vecteur 21H
La valeur du registre AH permet d'indiquer quelle est la fonction
que l'on appelle : MOV AH, numero_fonction INT 21H
fonction 4CH du DOS = terminer un programme et de revenir à
l'interpréteur de commandes DOS : MOV AH, 4CH INT 21H
Slide 110
Fonctions du BIOS
INT
Fonction
0
Division par 0
5
Copie d'écran
10H
Écran
12H
Taille mémoire
13H
Gestion disque dur
14H
Interface série
16H
Clavier
appelé automatiquement lors de
div. par 0
gestion des modes vidéo
(initialiser, lire/écrire secteurs)
(lire caractère, état du clavier)
Slide 111
Fonctions du DOS
Numéro Fonction
01H
02H
09H
Lecture caractère
Affiche caractère
Affiche chaîne de car
0BH
Lit état clavier
met le code ascii lu dans AL
code ascii dans registre DL
DX=adresse début chaîne,
terminée par '$'
met AL=1 si caractère, 0 sinon.
Ce programme lit un caractère au clavier et l'affiche en majuscule :
MOV
INT
AND
MOV
INT
AH, 01H
; code fonction DOS
21H
; attente et lecture d'un caractère
AL, 11011111b
; passe en majuscule
DL, AL ; MOV AH, 02H ; code fonction affichage
21H
; affiche le caractère
Slide 112
Exemple
Affichage d'un octet en binaire : afficher la valeur contenue dans un
registre 8 bits (BL).
L'idée est d'utiliser un masque BL AND 10000000 pour tester le bit de
gauche, et de décaler BL à gauche pour parcourir ainsi tous les bits.
mov BL, 10
; on teste le prog avec BL=10
mov CX,8
; compteur de boucle
masque:
Test BL, 10000000b
JNZ bit1
bit0:
Mov DL,"0"
jmp affiche
bit1:
Mov DL,"1"
affiche: mov AH,2
; affichage
int 21h
SHL BL,1
Loop masque
fin:
mov ah,4Ch
int 21h
Architectures des ordinateurs
Processeur
Philippe Bancquart
Slide 2
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 3
UAL : Rappel
Unité chargée
Des opérations arithmétiques :
ADD (+), SUB (-), MUL (*), DIV (:), INC (+ 1), DEC (- 1)
Des opérations logiques :
AND, OR, XOR, NOT, CMP
LSL, LSR, ASR (décalages)
Slide 4
Architecture de Von Neuman
Slide 5
Chemin des données
Slide 6
Code opération : assembleur
Programme en langage machine 80486 implanté à l’adresse mémoire
0100H
A1 01 10 03 06 01 12 A3 01 14
Ce programme additionne le contenu de deux cases mémoire et range le
résultat dans une troisième
Voici une transcription langage symbolique du programme complet.
L'adresse de début de chaque instruction est indiquée à gauche (en
hexadécimal).
Adresse Contenu MP Langage Symbolique Explication en francais
0100
A1 01 10
0103
03 06 01 12
0107
A3 01 14
MOV AX, [0110] Charger AX avec le contenu
de 0110.
ADD AX, [0112] Ajouter le contenu de 0112
a AX (resultat dans AX).
MOV [0114],AX Ranger AX en 0114.
Slide 7
Code opération : assembleur
Symbole
Code Op.
Octets
MOV AX, valeur
B8
3
AX valeur
MOV AX, [ adr ]
A1
3
AX contenu de l'adresse adr.
MOV [ adr ], AX
A3
3
range AX à l'adresse adr.
ADD AX, valeur
05
3
AX AX + valeur
ADD AX, [ adr ]
03 06
4
AX AX + contenu de adr.
SUB AX, valeur
2D
3
AX AX - valeur
SUB AX, [ adr ]
2B 06
4
AX AX - contenu de adr.
SHR AX, 1
D1 E8
2
décale AX à droite.
On utilise des programmes spéciaux, appelés assembleurs,
pour traduire automatiquement le langage symbolique en code
machine.
Slide 8
Fonctionnement de l’UC
L ’UC possède un registre spécial pour stocker la -instruction
en cours
Slide 9
Schéma de l’unité de commande
Slide 10
Schéma
Slide 11
MMI, RMI et MCO
MMI ou mémoire de micro-instructions = élément central de la
logique de contrôle
RMI (son registre associé) contient une micro instruction (tps t)
La MMI, généralement une mémoire morte, contient toutes les
micro-instructions qui sont nécessaires au processeur pour
exécuter les instructions du langage machine.
MCO, ou compteur ordinal du microprogramme : Il s'agit d'un
registre qui contient l'adresse de la prochaine micro instruction
à exécuter c'est-à-dire celle qui doit être placée dans le RMI,
seul lieu où une micro instruction peut agir sur le circuit de
données.
Slide 12
Niveaux de programmation
Slide 13
CICS intel 8086, pentium, Motorola
Complex Instruction Set Computer : calculateur à
jeu d'instructions complexe. Caractérise les
microprocesseurs qui disposent d'un jeu étendu
d'instructions avec de nombreux modes
d'adressage.
La plupart ne sert que dans des cas relativement
rares.
Environ plus de 500 instructions, celles qui sont
peu utilisées encombrent le HardWare du
processeur
Une instruction peut être sur plusieurs mots et de
longeur variable.
Slide 14
RISC IBM/Motorola (PowerPC),SUN (Supersparc), DIGITAL (Alpha)
Reduced Instruction Set Computer : calculateur à jeu
d'instructions réduit. En utilisateur un jeu d'instructions
plus réduit que la technologie CISC, les processeurs
RISC peuvent disposer d'un jeu d'instructions entièrement
cablé (donc sans microcode) ce qui permet une exécution
des instructions en un cycle.
Le nombre approximatif d’instruction environ 200.
Les RISC, sont plus rapide, il intégre au matériel les
instructions les plus utilisées
La longueur des instructions est constantes.
Mais il faut plus de cycle d’horloge pour faire l’équivalent
d’une instruction CISC
Slide 15
CICS / RISC
Actuellement, les processeurs de type RISC sont plus
performants que les CISC bien que ces derniers ne soient
plus des CISC “purs”. On trouve plus souvent des
hybrides incorporant différentes technologies: le pipeline
(voir plus loin), le mariage du CISC et RISC comme dans
le pentium pro (c'est un processeur RISC qui “traduit” les
instructions CISC).
On parle enfin d'architecture superscalaire (voir plus loin)
quand un processeur RISC est capable d'exécuter
plusieurs instructions simultanément en un seul cycle
d'horloge.
Slide 16
La mémoire cache
Depuis pas mal d'années, les circuits de mémoire ne sont plus
assez rapides pour suivre la cadence des microprocesseurs
on intercale entre le microprocesseur et la mémoire RAM, une autre
mémoire allant à la même vitesse que le microprocesseur
celle-ci est de taille assez réduite car elle coûte bien plus cher que la
mémoire RAM standard
souvent, il y a deux caches, un pour le programme et un pour les
données
Augmentation de la taille des bus d’adresses et de données
Le micro-processeur est alimenté plus vite
Bus d’adresse à 32 ou 64 bits = architecture à 32 ou 64 bits
Slide 17
Le cache
processeur
cache
80386
0
80486
1 cache interne 8Ko
pentium
1 cache interne donnée 8 Ko et 1 cache interne instructions 8 Ko
pentium 2
1 cache interne donnée 16 Ko et 1 cache interne instructions 16 Ko
1 cache externe 256 Ko commun au 2 caches internes
pentium 3
1 cache interne donnée 16 Ko et 1 cache interne instructions 16 Ko
1 cache externe 256 Ko commun au 2 caches internes
Slide 18
Le Pipeline
Un pipeline est composé de plusieurs étages
chacun de ces étages est dédié à un traitement particulier
Dans un processeur sans pipeline, les instructions sont
exécutées les unes après les autres
il ne rentrera une nouvelle instruction dans le pipeline que lorsque
l'instruction précédente est passée par tous les étages et est terminée
le processeur n'utilise qu'un seul étage à la fois, donc les autres
étages sont inactifs.
Avec un processeur à 5 étages sans pipeline
Slide 19
Le Pilpeline
But : utiliser tous les étages en même temps
lorsqu'une instruction est dans un étage, 4 autres instructions sont
en cours de traitement.
grâce au débit de la mémoire cache de niveau 1 les instructions
peuvent s'enchaîner suffisamment vite pour que le pipeline soit
constamment alimenté.
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28
Slide 29
Slide 30
Slide 31
Slide 32
Processeurs superscalaires
Un microprocesseur est de type superscalaire quand il intègre
plus d'une unité entière (ALU) en con cœur.
les deux unités sont indépendantes et fonctionnent en parallèle,
chacune se charge d'exécuter une instruction sur deux.
Il est ainsi possible d'exécuter deux instructions par cycle d'horloge.
Slide 33
Coprocesseurs mathématiques
Jusqu'au 386, celui-ci était parfois assisté par un coprocesseur
mathématique optionnel permettant d'accroître les capacités de
calcul en virgule flottante (très
utilisé par les tableurs et les logiciels de traitement graphique).
Aujourd’hui, ce coprocesseur fait partie intégrante du CPU.
Slide 34
Efficacité architecturale
Croissance du nombre d’instructions exécutées par cycle
d’horloge
Nb d'instructions
Processeur
par cycle d'horloge
i386
1/8
i486
1/2
Pentium
1
Pentium Pro
1,5
P4
2,5
Slide 35
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 36
Processeurs 80x86
Micro-processeurs 80x86 équipent les PC et compatibles
Premiers PC (début 80) = 8086, micro-processeur 16 bits
Puis 80286, 80386, 80486, Pentium…
Augmentation de la fréquence d’horloge, de la largeur des bus
d’adresses et de données
Ajout de nouvelles instructions et de registres
Compatibilité ascendante
Un programme écrit dans le langage machine du 286 peut
s’exécuter sur un 386 (l’inverse est faux)
En TP on utilisera un assembleur 8086 et on exécutera le
programme sur les Pentium de l’IUT
Slide 37
Caractéristiques du 8086
Bus de données : 16 bits
Bus d’adresse : 20 bits
Registres : 16 bits
4 accumulateurs 16 bits
Accumulateur (AX)
Base (BX)
Counter (CX)
Accumulateur auxiliaire (DX)
Registres accessibles sous forme de 2 info 8 bits
AX se décompose en AH (poids fort) et AL (poids faible de
AX)…
Slide 38
Caractéristiques du 8086
4 accumulateurs 16 bits
AX, BX, CX ,DX
Registres d’index :
Pointeur d’instruction (IP)
Index source ou destination(SI, DI)
Pointeur de Pile ou de base (SP, BP)
3+1 registres segment :
Segment de code (CS) : contient le prog en cours d’exécution
Segment data (DS) : contient les données du programme
Segment stack (SS) : contient des données particulières
Extra Segment (ES)
Slide 39
Segmentation de la mémoire
Largeur du bus d’adresse = 20 bits
Possibilité d’adressage mémoire = 220 = 1 Mo
Le pointeur d’instruction fait 16 bits
Possibilité d’adresser 216 = 64 Ko (ce qui ne couvre pas la mémoire)
On utilise deux registres pour indiquer une adresse au processeur
Chaque segment débute à l'endroit spécifié par un registre spécial
nommé registre segment.
Le déplacement permet de trouver une information à l'intérieur du
segment.
CS:IP : lecture du code d’une instruction (CS registre segment et IP
déplacement)
DS : accès aux données (MOV AX,[1045] = lecture du mot mémoire
d’adresse DS:1045H)
Slide 40
Segmentation de la mémoire
Registres de déplacement = sélectionner une information dans un
segment.
Dans le segment de code CS : le compteur de programme IP joue
ce rôle. CS:IP permet d'accéder à une information dans le segment
de code.
Dans les segments de DS : les deux index SI ou DI jouent ce rôle.
Le déplacement peut être aussi une constante. DS:SI ou DS:DI
permettent d'accéder à une information dans le segment de
données.
Dans le segment de pile SS le registre SP (stack pointer) et BP
(base pointer) jouent ce rôle. SS:SP ou SS:BP permettent d'accéder
à une information dans le segment de pile.
Slide 41
Jeu d’instruction (1)
Instruction d’affectation
(Transfert CPU Mémoire)
: MOV
Instructions arithmétiques
(Opération Acc / Donnée)
: INC (incrémentation)
: DEC (décrementation)
: ADD (addition)
: SUB (soustraction)
: CMP (soustraction sans
sauvegarde)
: NEG
Instructions logiques
: NOT, OR, XOR
: AND, TEST (= AND sans
sauvegarde)
: SHL (SHR), SAL (SAR)
: ROL (ROR), RCL (RCR)
Slide 42
Jeu d’instruction (2)
Branchement
Branchements conditionnels
: JMP
: JE/ JZ (JNE/ JNZ) : Jump if
zero
: JO (JNO) : Jump if overflow
: JS (JNS) : Jump if sign
Comparaison de valeurs
CMP AX, BX suivi d ’un test :
AX > BX ?
AX < BX ?
(entiers naturels)
JA ( >= JAE)
JB (JBE)
(complément à 2)
JG (JGE)
JL (JLE)
Slide 43
Branchements
Le processeur exécute une instruction en mémoire puis passe à
celle qui suit en mémoire : séquentiel
Besoin de faire répéter au processeur une suite d’instructions
Besoin de déclencher une action qui dépend d’un test
Utilisation d’une instruction de branchement ou saut
On indique au processeur l’adresse de la prochaine instruction
On distingue deux catégories de branchements
le saut est toujours effectué (sauts inconditionnels)
il est effectué seulement si une condition est vérifiée (sauts
conditionnels).
Slide 44
Rappel sur le registre IP
Le registre IP du processeur conserve l'adresse de la prochaine
instruction à exécuter
Le processeur effectue les actions suivantes pour chaque
instruction :
1.
2.
3.
lire et décoder l'instruction à l'adresse IP;
IP IP + taille de l'instruction;
exécuter l'instruction.
Pour modifier le déroulement normal d'un programme
l'exécution de l'instruction doit modifier la valeur de IP
c'est ce que font les instructions de branchement.
Slide 45
Sauts inconditionnels
Principale instruction de saut inconditionnel = JMP
L'opérande de JMP est un déplacement, c'est à dire une valeur
qui va être ajoutée à IP. L'action effectuée par JMP est :
IP = IP + déplacement
Le déplacement est un entier relatif sur codée 8 bits. La valeur du
déplacement est :
déplacement = adr. instruction visée - adr. instruction suivante
Slide 46
Sauts inconditionnels : exemple
Exemple : le programme suivant écrit indéfiniment la valeur 0 à
l'adresse 0140H.
La première instruction est implantée à l'adresse 100H.
Adresse Contenu MP Langage Symbolique Explication en français
0100
0103
0106
0107
B8 00 00
A3 01 40
EB FC
MOV
MOV
JMP
xxx
AX, 0
met AX a zéro
[140], AX
écrit à l'adresse 140
0103
branche en 103
-> instruction jamais exécutée
Le déplacement est ici égal à FCH, c'est à dire -4 (=103H-107H).
Slide 47
Indicateurs
Les instructions de branchement conditionnels utilisent les
indicateurs,
bits spéciaux positionnés par l'UAL après certaines opérations.
nous étudierons ici les indicateurs nommés ZF, CF, SF et OF.
ZF : Zero Flag
Cet indicateur est mis à 1 lorsque le résultat de la dernière opération
est zéro. Sinon, ZF est positionné à 0.
CF : Carry Flag
C'est l'indicateur de report (retenue). Il est positionné par les
instructions ADD, SUB et CMP (entiers naturels).
CF = 1 s'il y a une retenue
Slide 48
Indicateurs (suite)
SF : Sign Flag
SF est positionné à 1 si le bit de poids fort du résultat d'une addition ou
soustraction est 1; sinon SF=0. SF est utile lorsque l'on manipule des
entiers relatifs, car le bit de poids fort donne alors le signe du résultat.
OF : Overflow Flag (Indicateur de débordement)
OF=1 si le résultat d'une addition ou soustraction donne un nombre qui
n'est pas codable en relatif dans l'accumulateur (par exemple si l'addition
de 2 nombres positifs donne un codage négatif).
CMP = SUB, mais ne stocke pas le résultat de la soustraction
(positionner les indicateurs)
CMP AX, 5 : ZF = 1 si AX contient 5, et ZF = 0 si AX 5.
Slide 49
Sauts conditionnels : exemples
JE Jump if Equal (ou JZ)
saut si ZF = 1;
JNE Jump if Not Equal (ou JNZ)
saut si ZF = 0;
JG Jump if Greater
saut si ZF = 0 et SF = OF;
JLE Jump if Lower or Equal
saut si ZF=1 ou SF = OF;
JS (JNS) Jump if Sign
saut si SF=1;
JA Jump if Above
saut si CF=0 et ZF=0;
JBE Jump if Below or Equal
saut si CF=1 ou ZF=1.
JB Jump if Below
saut si CF=1.
JO (JNO) Jump if Overflow
saut si OF=1…
Slide 50
Décalage et rotations
Décalage vers la gauche ou vers la droite les bits de
l'accumulateur.
opérations utilisées pour décoder bit à bit des données
ou pour diviser ou multiplier rapidement par une puissance de 2.
En effet : décaler AX de n bits vers la gauche revient à le multiplier
par 2n
De même, un décalage vers la droite revient à diviser par 2n.
Ces opérations peuvent opérer sur les registres AX ou BX (16
bits) ou sur les registres de 8 bits AH, AL, BH et BL.
SHL, SHR, ROL, ROR, RCL, RCR…
Slide 51
Décalage
SHL registre, 1 (Shift Left)
Décale les bits du registre d'une position vers la gauche. Le bit de
gauche est transféré dans l'indicateur CF. Les bits introduits à droite sont
à zéro.
SHR registre, 1 (Shift Right)
Comme SHL mais vers la droite. Le bit de droite est transféré dans CF.
SHL et SHR peuvent être utilisé pour multiplier/diviser des entiers
naturels (et non des relatifs car le bit de signe est perdu)
Slide 52
Rotations
ROL registre, 1 (Rotate Left)
Rotation vers la gauche : le bit de poids fort passe à droite, et est aussi
copié dans CF. Les autres bits sont décalés d'une position.
ROR registre, 1 (Rotate Right)
Comme ROL, mais à droite.
Slide 53
Décalage et rotations
RCL registre, 1 (Rotate Carry Left)
Rotation vers la gauche en passant par l'indicateur CF. CF prend la place
du bit de poids faible; le bit de poids fort part dans CF.
RCR registre, 1 (Rotate Carry Right)
Comme RCL, mais vers la droite.
RCL et RCR sont utiles pour lire bit à bit le contenu d'un registre7.
Slide 54
Opérations logiques
3 opérateurs logiques : ET, OU et OU exclusif.
jamais propagation de retenue lors de ces opérations (chaque bit du
résultat est calculé indépendamment des autres)
Opérations sont de la forme : OR destination, source
destination : registre ou emplacement mémoire (adresse) où doit
être placé le résultat.
source : constante (adressage immédiat), registre (adressage
implicite), ou adresse (adressage direct).
OR AX, FF00 ; AX <- AX ou FFOO
OR AX, BX ; AX <- AX ou BX
OR AX, [1492] ; AX <- AX ou [1492]
Slide 55
Opérations logiques
OR destination, source (OU : 1 ou 0 =1 ; 1 ou 1 = 1…)
OR est souvent utilisé pour forcer certains bits à 1. Par exemple
après OR AX, FF00, l'octet de poids fort de AX vaut FF, tandis que
l'octet de poids faible est inchangé.
AND destination, source (ET : 1 et 1 = 1 …)
AND est souvent utilisé pour forcer certains bits à 0. Après AND AX,
FF00, l'octet de poids faible de AX vaut 00, tandis que l'octet de
poids fort est inchangé.
XOR destination, source (OU EXCLUSIF : 1 xor 1 = 0…)
XOR est souvent utilisé pour inverser certains bits. Après XOR AX,
FFFF, tous les bits de AX sont inversés
Slide 56
Codage
Les instructions et leurs opérandes (paramètres) sont stockés en
mémoire principale
La taille totale d'une instruction (nombre de bits nécessaires pour la
représenter en mémoire) dépend du type d'instruction et aussi du
type d'opérande.
Chaque instruction est toujours codée sur un nombre entier
d'octets, afin de faciliter son décodage par le processeur. Une
instruction est composée de deux champs :
le code opération, qui indique au processeur quelle instruction
réaliser;
le champ opérande qui contient la donnée, ou la référence à une
donnée en mémoire (son adresse).
Slide 57
Codage
Selon la manière dont la donnée est spécifiée, c'est à dire selon
le mode d'adressage de la donnée, une instruction sera codée
par 1, 2, 3 ou 4 octets.
Nous distinguerons ici quatre modes d'adressage :
Implicite
immédiat
direct
relatif
Slide 58
Types d’adressage
Adressage implicite ou par registre
ADD AX, BX
INC AX
Pas d’accès mémoire pour les opérandes
L'instruction contient seulement le code opération, sur 1 ou 2 octets.
L'instruction porte sur des registres ou spécifie une opération sans
opérande
Slide 59
Types d’adressage
Adressage immédiat
ADD AX, valeur
1 accès mémoire pour lire la valeur
Le champ opérande contient la donnée (une valeur constante sur 1 ou 2
octets).
Exemple : ``Ajouter la valeur 5 à AX''. Ici l'opérande 5 est codée sur 2 octets
puisque l'opération porte sur un registre 16 bits (AX).
Slide 60
Types d’adressage
Adressage direct
ADD AX, [adresse]
2 accès mémoire : adresse puis valeur
Le champ opérande contient l'adresse de la donnée en mémoire
principale sur 2 octets.
Attention : dans le 80x86, les adresses sont toujours manipulées sur 16
bits, quelle que soit la taille réelle du bus.
Exemple : ``Placer dans AX la valeur contenue à l'adresse 130H''.
Slide 61
Types d’adressage
Adressage relatif ou indexé
ADD AX, [adresse+index]
MOV AX, [SI+1]
2 accès mémoire
Ce mode d'adressage est utilisé pour certaines instructions de
branchement.
Le champ opérande contient un entier relatif codé sur 1 octet, nommé
déplacement, qui sera ajouté à la valeur courante de IP.
Slide 62
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 63
Code opération : assembleur
Programme en langage machine 80486 implanté à l’adresse mémoire
0100H
A1 01 10 03 06 01 12 A3 01 14
Ce programme additionne le contenu de deux cases mémoire et range le
résultat dans une troisième
Voici une transcription langage symbolique du programme complet.
L'adresse de début de chaque instruction est indiquée à gauche (en
hexadécimal).
Adresse Contenu MP Langage Symbolique Explication en francais
0100
A1 01 10
0103
03 06 01 12
0107
A3 01 14
MOV AX, [0110] Charger AX avec le contenu
de 0110.
ADD AX, [0112] Ajouter le contenu de 0112
a AX (resultat dans AX).
MOV [0114],AX Ranger AX en 0114.
Slide 64
Code opération : assembleur
Symbole
Code Op.
Octets
MOV AX, valeur
B8
3
AX valeur
MOV AX, [ adr ]
A1
3
AX contenu de l'adresse adr.
MOV [ adr ], AX
A3
3
range AX à l'adresse adr.
ADD AX, valeur
05
3
AX AX + valeur
ADD AX, [ adr ]
03 06
4
AX AX + contenu de adr.
SUB AX, valeur
2D
3
AX AX - valeur
SUB AX, [ adr ]
2B 06
4
AX AX - contenu de adr.
SHR AX, 1
D1 E8
2
décale AX à droite.
On utilise des programmes spéciaux, appelés assembleurs,
pour traduire automatiquement le langage symbolique en code
machine.
Slide 65
Processus d’assemblage
3 phases :
1.
Saisie du code source avec un éditeur de texte
2.
Compilation du code source
3.
Édition des liens
permet de lier plusieurs codes objets en un seul
exécutable
permet d ’inclure des fonctions prédéfinies dans des
bibliothèques
Slide 66
Assembleur : NASM
[BITS 16]
[ORG 0x0100]
[SEGMENT .text]
BEGIN:
jmp
START
FIN:
mov ax, 0x4C00
int 0x21
START:
mov [Var1], 3
jmp FIN
Val equ 12
Var1 db 69
Var2 dw 0FFFFh
Tab resb 100
Slide 67
En-tête
[BITS16] : indique au compilateur qu’on travaille en
mode 16 bits (programme DOS)
[ORG 0x100] : le programme est chargé en mémoire à
partir de l’adresse 0x100h (programme .com)
[SEGMENT .text] : déclaration du segment dans lequel
on travaille, dans un programme .com : 1 seul segment
pour le code et les données
[int 0x20] : Interruption = appel système pour rendre la
main au dos
Slide 68
Variables
DB : Variable 8 bits
DW : Variable 16 bits
EQU : Constante
RESB : Variable 8 bits (tableau)
RESW : Variable 16 bits (tableau)
BYTE : Taille d'une variable mémoire 8 bits
WORD : Taille d'une variable mémoire 16 bits
Etiquette : adresse d’une méthode/ branchement
Slide 69
Représentation mémoire : .com
CS, DS, SS
Header DOS
100h
IP
Programme
64 Ko
Variables
SP
Slide 70
Fichier .com
Un seul segment de 64 Ko pour les données le
programme et la pile
.exe : on peut avoir un segment pour chaque
Au début du programme
IP pointe sur l’adresse 100h du segment (header DOS)
CS, DS, SS pointent au début
SP pointe à la fin (tête de pile) : attention que votre pile
n’écrase pas votre programme ou vos données
Slide 71
Exemple de programme NASM
[BITS 16]
[ORG 0x100]
[SEGMENT .text]
mov AX,0x13
int 0x10
mov AX,0xA000
mov ES,AX
mov DI,6720
boucle:
mov byte [ES:DI],5
add DI,321
cmp DI,12000
jb boucle
int 0x20
Slide 72
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 73
Pile
Structure de « rangement » de données
définie dans un segment de mémoire particulier (.exe) ou
dans le même que le code et les données (.com)
fonctionnement LIFO (Last In, First Out)
Comment y accéder :
adresse du dernier élément posé : SS:SP
empiler : PUSH Reg16 (registre 16 bits)
dépiler : POP Reg16 (registre 16 bits)
La pile augmente vers les adresses faibles
PUSH : SP SP- 2, POP : SP SP+ 2
Slide 74
Pile : exemple d’utilisation (1)
PUSH registre
empile le contenu du registre sur la pile.
POP registre
retire la valeur en haut de la pile et la place dans le registres
spécifié.
Exemple : transfert de AX vers BX en passant par la pile.
PUSH AX ; Pile <- AX
POP BX ; BX <- Pile
Note : cet exemple n'est pas très utile, il vaut mieux employer
MOV AX, BX.)
Slide 75
Pile : exemple d’utilisation (2)
La pile est souvent utilisée pour sauvegarder
temporairement le contenu des registres :
;AX et BX contiennent
PUSH AX
PUSH BX
MOV BX, truc ;
ADD AX, BX
;
POP BX
;
POP AX
;
des données a conserver
on utilise AX
et BX
récupère l'ancien BX
et l'ancien AX
On voit que la pile peut conserver plusieurs valeurs.
La valeur dépilée par POP est la dernière valeur empilée;
c'est pourquoi on parle ici de pile LIFO (Last In First Out,
Premier Entré Dernier Sorti).
Slide 76
Pile : registres SS et SP
16 bits
Le registre SS (Stack
Segment) = registre segment qui
contient l'adresse du segment de
pile courant (16 bits de poids fort
de l'adresse). Il est normalement
initialisé au début du programme
et reste fixé par la suite.
Le registre SP (Stack Pointer)
contient le déplacement du
sommet de la pile (16 bits de
poids faible de son adresse).
PUSH POP
SP
Slide 77
Pile : registres SP
L'instruction PUSH effectue les opérations suivantes :
SP SP - 2
[SP] valeur du registre 16 bits.
Notons qu'au début (pile vide), SP pointe ``sous'' la pile
L'instruction POP effectue le travail inverse :
registre destination [SP]
SP SP + 2
Si la pile est vide, POP va lire une valeur en dehors de
l'espace pile, donc imprévisible.
Slide 78
Pile : registres SP
16 bits
Emplacement
libre
Adresses
Croissantes
SP-2
SP
PUSH POP
Slide 79
Procédures (1)
Déclaration d’une procédure :
nous utiliserons une étiquette ou label pour définir le début et
le nom d’une procédure
Appel de la procédure dans le programme
CALL NEAR label
...
CALL NEAR affiche
affiche :
MOV AH,9
INT 0x21
RETN
Slide 80
Procédures (2)
Comment l’unité de traitement arrive-t-elle à retourner au
programme principal à la fin de la procédure ?
Au moment de l’appel de la fonction, l’adresse de
l’instruction suivante est sauvegardée dans la pile :
sauvegarde de IP
A la fin de la procédure, l ’Unité de Traitement récupère les
valeurs sauvegardées pour retourner au programme principal
RETN = dépilement de IP
Slide 81
Passage de paramètres
2 méthodes de passage de paramètres :
par registre
par la pile
Passage de paramètres par registre :
les paramètres d’entrée de la procédure sont mis dans des
registres avant l’appel de la procédure
les paramètres de sortie sont aussi rangés dans des
registres
avantage = rapidité
inconvénients = peu de registres
Slide 82
Passage par registre
;programme principal
...
Mov AX, N1
Mov BX, N2
Call Near Moyenne
;Procédure
Moyenne :
Add AX, BX
SHR AX, 1
RETN
Mov Res, AX
...
Retn = dépilement de IP
pour retourner au
programme principal
Slide 83
Passage par la pile (1)
Les paramètres d’entrée sont empilés avant l’appel de la
procédure
Les paramètres de sortie sont dépilés par le programme
principal
avantage = « portabilité »
inconvénients = récupération des
paramètres plus « lourde »
;Procédure
;programme
...
PUSH N1
PUSH N2
Call Near Moyenne
POP Res
...
Moyenne :
PUSH BP
Mov BP, SP
Mov AX, [BP+4]
Add AX, [BP+6]
SHR AX, 1
Mov [BP+ 6], AX
POP BP
Retn 2
Slide 84
Passage par la pile (2)
Évolution de la pile
A quoi sert BP ?
BP = référence de la pile au début de la procédure
permet d’avoir une référence fixe pour récupérer les
paramètres
ici : [BP+ 4] pour N2 et [BP+ 6] pour N1
Slide 85
Passage par la pile (3)
Sauvegarde du résultat et nettoyage de la pile
Slide 86
Rappels : Registres de segment
Nom
Taille
Fonction
Cs (Code Segment) 16 bits
Mémorise le segment où se trouve le code en
cours d'exécution (ne peut pas être modifié par
le programme)
Ds (Data Segment) 16 bits
Mémorise le segment où se trouve les
données du programme.
Ss (Stack Segment)16 bits
Mémorise le segment où se trouve la pile de
données du programme
Es (Extra Segment) 16 bits
Ce segment peut être utilisé pour faire ce que
l'on veut. Par exemple, il peut pointer sur la
mémoire écran.
Slide 87
Rappels : Registres de travail
Nom
Taille
Fonction
Ax (Accumulateur) 16 bits
On l'utilise généralement pour des opérations
arithmétiques, telles que MUL (multiplication)
ou DIV (division). Ax peut se diviser en deux
sous-registres de 8 bits. Ah représente les 8
premiers bits, et Al les 8 derniers.
Bx (Base)
Bx est utilisé lors de l'accès à une zone
mémoire sous forme de tableau, il représente
l'indice de ce tableau. Par exemple, on écrira
Mov Dx, Es:[Bx]. Bx peut se diviser en deux
sous-registres de 8 bits. Bh représente les 8
premiers bits, et Bl les 8 derniers.
16 bits
Slide 88
Rappels : Registres de travail
Nom
Taille
Fonction
Cx (Compteur)
16 bits
Lors de l'appel d'instructions comme REP
(répéter) ou LOOP (boucle), c'est le registre
Cx qui est lu Cx peut se diviser en deux sousregistres de 8 bits. Ch représente les premiers
bits, et Cl les 8 derniers.
Dx (Données)
16 bits
Ce registre est généralement utilisé pour
stocker des données provisoires. Dx peut se
diviser en deux sous-registres de 8 bits. Dh
représente les 8 premiers bits, et D les 8
derniers.
Slide 89
Rappels : Registres d'offset
(à combiner avec une adresse de segment)
Nom
Taille
Fonction
Si (Source Index)
16 bits
Lors d'opérations sur les chaînes de
caractères, comme MOVSB ou SCASB,
Ds:[Si] désigne la variable 'source'.
Di (Dest Index)
16 bits
Lors d'opérations sur les chaînes de
caractères, comme MOVSB ou SCASB,
Es:[Di] désigne la variable 'destination'.
Bp (Base Pointeur) 16 bits
Bp a un rôle proche de celui de Bx, mais il est
généralement utilisé avec le segment de pile
(Ss:[Bp]).
Slide 90
Rappels : Registres d'offset
(à combiner avec une adresse de segment)
Nom
Taille
Fonction
Ip (Instruction Point)16 bits
Cs:[Ip] indique la prochaine instruction à
exécuter. Tout comme Cs, Ip ne peut être
manipulé par le programme exécuté.
Sp (Stack Pointeur) 16 bits
Ss:[Sp] indique le dernier élément de la pile.
Chaque opération PUSH (empiler) ou POP
(dépiler) modifie le registre Sp.
Slide 91
Exemple de programme NASM
[BITS 16]
[ORG 0x100]
[SEGMENT .text]
PILE PROC
Slide 92
Plan
Architecture d’un processeur
Processeur 8086
Assembleur
Pile et Procédures
Systèmes d’exploitation et appels systèmes
Slide 93
Interpréteur et compilateur (1)
On distingue grossièrement deux familles de langages
informatique
les langages interprétés
les langages compilés
Un programme en langage interprété va être traduit au fur et
à mesure de son exécution par un interpréteur
interpréteur : programme chargé de décoder chaque
instruction du langage et d'exécuter les actions correspondantes
Programmes compilés : traduction en langage machine a
lieu une fois pour toute.
Le compilateur (traducteur) traduit chaque instruction du
langage en une suite d'instructions en langage machine
Slide 94
Interpréteur et compilateur (2)
Les programmes compilés s'exécutent ainsi plus rapidement
que les programmes interprétés
La traduction est déjà faite
Mais on perd en souplesse de programmation, car les types de
données doivent être connus au moment de la compilation
Compilateur = traduit un programme source écrit dans un
langage de haut niveau (C) en un autre programme dans un
langage de bas niveau (par exemple l'assembleur)
Opération de traduction complexe
Compilateurs = programmes sophistiqués
Slide 95
Principaux langages
Les principaux langages compilés sont :
C/C++
ADA
Cobol
Fortran
Pascal
: programmation système et scientifique
: logiciels embarqués
: gestion
: calcul scientifique
: enseignement
Quelques langages interprétés :
BASIC
LISP, Prolog
Python
Java
MATLAB
: bricolage
: Intelligence Artificielle
: programmation système, Internet
: applets internet
: calcul scientifique
LISP, Java ou Python : une première phase de compilation vers un
langage intermédiaire (bytecode), qui sera lui même interprété.
Slide 96
Compilation du C
Traduction en assembleur des programmes en langage C
Le détail de cette traduction (ou compilation) dépend
Compilateur utilisé
Système d'exploitation (DOS, Windows, UNIX,...).
Taille des types : exemple int (16 ou 32 bits)
Modèle de mémoire utilisé (pointeurs sur 16 ou 32 bits,
données et code dans des segments différents ou non, etc.)
Exemple : compilateur Turbo C++ version 3 sous DOS
(entiers de 16 bits et le modèle de mémoire « small »)
Génère directement du code objet (fichier .OBJ) à partir
d'un fichier source en langage C
Il est cependant possible de demander l'arrêt de la
compilation pour obtenir du langage assembleur (fichier .ASM)
Slide 97
C et assembleur
Introduction d’instructions assembleur dans des
programmes en langage C (ou C++).
Programme non portable, car le langage assembleur
diffère d'un type d'ordinateur à l'autre
Pour un programme utilisant les ressources matérielles
d'une machine : plus confortable d'écrire un programme C
contenant quelques lignes d'assembleur que de tout
écrire en assembleur.
void main(void) {
Exemple avec
Turbo C++/TASM
int A = 20;
asm{
MOV AX, A
SHL AX, 1
}
printf(’’AX =%d\n’’,_AX);
}
Ce programme affiche 40.
Slide 98
Système d’exploitation
OS : Operating System : le programme permettant
d'utiliser les circuits qui ont été câblés.
Soit entièrement en ROM
Soit un code de boot en ROM se chargeant de placer en
RAM le reste de l'OS à partir de la disquette ou du DD
Souvent, une ROM de boot contient néanmoins la partie
de l'OS la plus primitive: le BIOS.
But de l'OS = décharger le programme des tâches
répétitives et de bas niveau.
Gain de temps lors du développement programmes
Pas à se soucier du fonctionnement de la circuiterie
électronique
Slide 99
Système d’exploitation
Le système d’exploitation doit s’occuper de :
l ’exécution des commandes d’entrée/ sortie
la gestion de la mémoire
la gestion des fichiers
la multi- programmation (« multi- tâche »)
Comment exécuter plusieurs programmes à la fois ?
Et si ces programmes veulent tous accéder à l ’imprimante
en même temps ?
Et s’ils doivent échanger des informations ?…
Comment exécuter un seul programme avec plusieurs
processeurs ?
la sécurité (gestion des accès,…)
Le SE doit aussi fournir :
un langage de commande
divers utilitaires (compilateurs, éditeurs, outils, …)
une interface graphique pour l’utilisateur
Slide 100
Système d’exploitation
Windows 95/ 98, Windows NT (Microsoft) :
processeurs 80x86
OS/ 2 (IBM)
MacOS (Apple) :
processeurs 68000 puis PowerPC
UNIX = famille de SE :
Versions payantes généralement spécialisées à un type
de machine :
SunOS/ Solaris (Sun)
AIX (IBM)
HP/ UX (HP)
Versions libres :
LINUX : 80x86, 68000, PowerPC, Sparc …
Slide 101
Présentation du BIOS
BIOS (Basic Input Output System) : partie de l'OS du plus
bas niveau
opérations très primitives: lecture du clavier, affichage écran en
mode texte, accès simplifié au lecteur de disquette et au disque
dur, accès au ports série et parallèle.
Le programme du BIOS se trouve en mémoire morte (ROM)
une mémoire gardant son contenu lorsque l'on interrompt son
alimentation électrique
Chaque modèle de PC est vendu avec une version du BIOS
adapté à sa configuration matérielle.
Slide 102
Fonctions du BIOS
BIOS librairie de fonctions
Chaque fonction effectue une tâche bien précise (par exemple
afficher un caractère donné sur l'écran)
L'appel de l'une de ces fonctions = appel système
Fonctions du BIOS procédures appelées avec l'instruction
CALL
il a été prévu de pouvoir modifier le comportement du BIOS en
cours d'utilisation (par exemple pour gérer un nouveau
périphérique)
Code du BIOS en ROM = non modifiable
Le BIOS étant différent d'un ordinateur à l'autre, les adresses
des fonctions changent...
Slide 103
Vecteurs d’interruption (1)
Problème résolu par l'utilisation d'une table d'indirection = la
table des vecteurs d'interruptions
table est placée en RAM : contient les adresses (en ROM ou en
RAM) des fonctions du BIOS
implantée à partir de l'adresse 00000000H (première case
mémoire)
elle est initialisée par le BIOS lui même au moment du démarrage
du PC (boot).
Adresse
0000
0004
...
contenu
adresse de la première fonction du BIOS
adresse de la deuxième fonction du BIOS
Slide 104
Vecteurs d’interruption
Chaque élément de la table occupe 4 octets (adresse 32 bits).
table à 256 éléments (1Ko).
exemple : si l'on sait que la fonction du BIOS qui affiche un
caractère est la 33ième, on va l'appeler en lisant la 33ième ligne de
la table, puis en allant exécuter les instructions à l'adresse trouvée :
Adresse
...
0084H
...
contenu
F1234560H
(car 4x33 = 84H).
La table des vecteurs d'interruptions contient des valeurs
différentes pour chaque version de BIOS
peut être modifiée pour pointer sur du code en mémoire
principale, modifiant alors le BIOS existant.
Slide 105
Interruptions
Unité de Traitement exécute séquentiellement les
instructions ou effectue des sauts programmés (JMP,
CALL)
Il existe des situations où l ’U. T. est « déroutée » de sa
tâche :
Reset : signal envoyé au processeur pour un (re-)
démarrage
Exceptions (interruptions internes) : débordement de
pile, dépassement de capacité, div /0, …
Appels systèmes (int. logicielles) : appels du
programme lui- même « int 21h » …
Interruptions physiques (int. externes) : appels d’autres
périphériques
Slide 106
Interruptions logicielles : INT n
L'instruction INT n permet d'appeler la n-ième
fonction de la table des vecteurs d'interruptions.
n est un entier compris entre 0 et 255 (1 octet), car il y a
256 vecteurs d'interruptions dans la table (ex: Int 21h )
L'instruction INT n est semblable à l'instruction CALL
sauf que l'adresse de destination est donnée par la table
des vecteurs d'interruptions
que les indicateurs sont automatiquement sauvegardés
sur la pile.
l’adresse de retour complète (32 bits) doit être empilée
car le traitant d’interruption n’est pas nécessairement dans
le même segment de code que le programme
Slide 107
Interruptions : déroulement
Le déroulement de INT n se passe comme suit :
1. sauvegarde les indicateurs du registre d'état sur la pile
(les indicateurs sont regroupés dans un mot de 16 bits);
2. sauvegarde CS et IP sur la pile;
3. CS et IP sont chargés avec la valeur lue à l'adresse 4 n,
n étant le paramètre de INT. L'exécution continue donc au
début du traitant d'interruption.
Slide 108
Interruptions : fonctionnement
Lorsque l’interruption est déclenchée, l ’U. T. doit
exécuter un bout de programme précis : le traitant de
l’interruption.
l ’U. T. doit savoir où se trouve l ’adresse (CS: IP) du traitant numéro n
Cette information est stockée en mémoire (0000: 0000 à 0000: 03FFh)
Slide 109
Appels système
Le système DOS (Disk Operating System) repose sur le
BIOS,
il appelle les fonctions du BIOS pour interagir avec le matériel
Les fonctions du DOS s'utilisent comme celles du BIOS, via
des vecteurs d'interruptions
fonctionnalités de plus haut niveau que le BIOS (entrées/sorties,
ouverture de fichiers sur disque, etc.)
Les fonctions du DOS s'appellent à l'aide du vecteur 21H
La valeur du registre AH permet d'indiquer quelle est la fonction
que l'on appelle : MOV AH, numero_fonction INT 21H
fonction 4CH du DOS = terminer un programme et de revenir à
l'interpréteur de commandes DOS : MOV AH, 4CH INT 21H
Slide 110
Fonctions du BIOS
INT
Fonction
0
Division par 0
5
Copie d'écran
10H
Écran
12H
Taille mémoire
13H
Gestion disque dur
14H
Interface série
16H
Clavier
appelé automatiquement lors de
div. par 0
gestion des modes vidéo
(initialiser, lire/écrire secteurs)
(lire caractère, état du clavier)
Slide 111
Fonctions du DOS
Numéro Fonction
01H
02H
09H
Lecture caractère
Affiche caractère
Affiche chaîne de car
0BH
Lit état clavier
met le code ascii lu dans AL
code ascii dans registre DL
DX=adresse début chaîne,
terminée par '$'
met AL=1 si caractère, 0 sinon.
Ce programme lit un caractère au clavier et l'affiche en majuscule :
MOV
INT
AND
MOV
INT
AH, 01H
; code fonction DOS
21H
; attente et lecture d'un caractère
AL, 11011111b
; passe en majuscule
DL, AL ; MOV AH, 02H ; code fonction affichage
21H
; affiche le caractère
Slide 112
Exemple
Affichage d'un octet en binaire : afficher la valeur contenue dans un
registre 8 bits (BL).
L'idée est d'utiliser un masque BL AND 10000000 pour tester le bit de
gauche, et de décaler BL à gauche pour parcourir ainsi tous les bits.
mov BL, 10
; on teste le prog avec BL=10
mov CX,8
; compteur de boucle
masque:
Test BL, 10000000b
JNZ bit1
bit0:
Mov DL,"0"
jmp affiche
bit1:
Mov DL,"1"
affiche: mov AH,2
; affichage
int 21h
SHL BL,1
Loop masque
fin:
mov ah,4Ch
int 21h