Vous êtes sur la page 1sur 29

ETUDE D’UN µP ET TECHNIQUE DE PROGRAMMATION

▪ Présenter les notions de base nécessaires à la


compréhension des microprocesseurs Intel famille x86

▪ Comprendre les différents modes d’adressage de la


mémoire

▪ Acquérir les concepts fondamentaux de la programmation


en assembleur

▪ Apprendre à écrire, assembler, debugger et exécuter un


programme assembleur

▪ Réaliser des travaux pratiques pour programmer en


assembleur des applications d'acquisition de données

Pr A. RAIHANI 1
GÉNÉRALITÉS

Objectifs :
▪ Situer le langage assembleur par rapport aux
autres langages
▪ Définir les avantages et les inconvénients de
l’assembleur
▪ Définir les domaines d’utilisation de
l’assembleur

Pr A. RAIHANI 2
GÉNÉRALITÉS
Niveaux de programmation :
Homme Langages humains Langages Naturels (,
Arabe, Anglais , …

Langages orientés objets Langages C++, Java , …

Langages Basic, Pascal,


Langages structurés
Fortran, C , …

Langage Assembleur Langage machine avec


codes mnémotechniques

Codage binaire des


Ordinateur Langage machine opérations : code opération
+ codes opérandes

Pr A. RAIHANI 3
GÉNÉRALITÉS
Assembleur - Définition :
▪ langage de programmation constitué d'instructions qui sont
nommées par un mnémonique évoquant le type d'action que va
faire l'instruction.
▪ Il s’agit du langage de plus bas niveau utilisable par humain
▪ Utilise le jeu d'instructions du processeur
Exemples :
MOV ax,7 : Déplacement
ADD ax , dx : Addition
SUB ax,5 : Soustraction
MOV cx , ax
MUL cx : Multiplication
Pr A. RAIHANI 4
GÉNÉRALITÉS
Langage Assembleur – Champs d’application :
La programmation assembleur est parfois assimilée à la
programmation système :
• Programmation au niveau du BIOS ,
• Programmation des drivers,
• Traduction de codes des compilateurs ,
• Programmation de jeux et graphismes 2D/3D,
• Programmation des systèmes temps réel,
• Programmation des systèmes embarqués ,
• Programmation des microcontrôleurs et des chips spécialisés,
• …
Pr A. RAIHANI 5
GÉNÉRALITÉS
Langage Assembleur - Avantages:
▪ Comprendre le fonctionnement interne des processeurs,
▪ Comprendre l’implantation des structures de données dans la
mémoire fondamentalement linéaire,
▪ Rapide par rapport à des langages de haut niveau,
▪ Offre une meilleure souplesse d’utilisation de la mémoire,
▪ Permet de modifier un programme compilé dont on n’a pas les
sources (Reverse Engineering),
▪ peut être insérer dans des langages de plus haut niveau pour une
meilleur optimisation,
▪ Indépendant du système d'exploitation, il se réfère simplement au
microprocesseur auquel il s'applique,

Pr A. RAIHANI 6
GÉNÉRALITÉS
langage Assembleur - Inconvénients :
▪ programmes longs et fastidieux à écrire,
▪ programmes très peu portables vers une autre architecture (existante
ou future),
▪ Nécessite une bonne maitrise et une grande expérience de la part du
programmeur,
▪ Difficulté de mise au point et de débogage,
▪ L’augmentation des performances des ordinateurs fait que le champ
d’utilisation de l’assembleur devient de plus en pus réduit

Chaque microprocesseur a son propre langage et son


propre jeu d'instructions

Pr A. RAIHANI 7
PROCESSEUR INTEL x86
Objectifs
▪ Comprendre les mécanismes de fonctionnement du microprocesseur
▪ comment fonctionne la mémoire
▪ Comment Calculer les adresses en mémoire

Unité de mémoire
Ports d’entrée Ports de sortie
RAM/ROM/HDD

Bus d’adresse (unidirectionnel)

Microproce
sseur Bus de donnée

Bus de commande

Pr A. RAIHANI 8
PROCESSEUR INTEL x86
Processeur Intel 86 :
▪ Le microprocesseur Intel 86, Développé en 78, est caractérisé par :
• Données sur 16 bits
• Adresses mémoire sur 20 bits : 1 Mo adressable
• 8 registres généraux de 16 bits
• Mémoire divisée en Segments de 64KO
• Travail en mode réel (accès à toute la mémoire même celle d’un autre
programme)
• Vitesse d'horloge: 5 MHz pour 0,333 MIPS ,8 MHz pour 0,66 MIPS,10 MHz
pour 0,75 MIPS
▪ Ses prédécesseurs les mieux connus sont :
• processeur 4004, puis 8008,
• processeur 8 bits 8080

Pr A. RAIHANI 9
PROCESSEUR INTEL x86
Processeur Intel 286 :
▪ Le microprocesseur Intel 286, Développé en 1982, est caractérisé par :
• Double mode de travail :
– mode réel : accès à toute la mémoire adressable qui est de 1Mo
– Mode protégé : empêche un programme d’accéder à la mémoire d’un autre
programme mais permet d’adresser 16Mo de mémoire centrale et 1GO de
mémoire virtuelle
• Architecture 16 bits, données sur 16 bits
• Adresses mémoire sur 24 bits : 16 Mo adressable
• 8 registres généraux de 16 bits
• Ajoute quelques nouvelles instructions au jeu d’instructions
• Vitesse d'horloge:
– 6 MHz pour 0,9 MIPS
– 8 MHz, 10 MHz pour 1,5 MIPS
– 12,5 MHz pour 2,66 MIPS
Pr A. RAIHANI 10
PROCESSEUR INTEL x86
Processeurs Intel 386DX
▪ Le Processeur 386 améliore grandement le 286 grâce à son
architecture 32 bits. Développé en 1985, il a les caractéristiques :
• Données sur 32 bits
• Adresses mémoire sur 32 bits : 4 Go adressable
• 8 registres généraux de 32 bits
• ajoute deux nouveaux registres de 16 bits FS et GS (segment de données)
• Architecture 32 bits en mode protégé et Mémoire virtuelle 64 TO
• Vitesse d'horloge :
– 16 MHz pour 5 à 6 MIPS
– 2/16/1987 20 MHz pour 6 à 7 MIPS
– 4/4/1988 25 MHz pour 8,5 MIPS
– 4/10/1989 33 MHz pour 11,4 MIPS

Pr A. RAIHANI 11
PROCESSEUR INTEL x86
Processeurs Intel 486 et plus
▪ Développé en 1989
▪ Ajout de registres, d'opérations et de l'FPU
▪ cache d'instruction et de donnée intégré
▪ accélération de la vitesse d’exécution ( 1 instruction par cycle)

Processeur Pentium 4
• 16 registres 64 bits
• Registres multimédia : 16 registres 128 bits
• Ensemble d’instructions vectorielles pour les applications multimédia
• Registres flottants (x87) : 8 registres 80 bits

Compatibilité ascendante:
▪ Intel a développé de nouvelles instructions tout en conservant les
instructions plus anciennes et la structure des registres des 1er µp.
Pr A. RAIHANI 12
PROCESSEUR INTEL x86
Architecture
▪ L’élément de base d’un calculateur est constitué par l’unité centrale
de traitement ( CPU : Central Processing Unit).

Pr A. RAIHANI 13
PROCESSEUR INTEL x86
Architecture
▪ unité arithmétique et logique (Arithmetic and Logic Unit) : c’est
l’organe qui réalise les calculs arithmétiques et logiques sur entiers
▪ registres : zones de stockage des données de l’UAL (opérandes,
résultats intermédiaires, adresses mémoire, état du processeur)
▪ unité de contrôle (Control Unit) : elle envoie les ordres à tous les
autres éléments afin d’exécuter un programme.
▪ La mémoire centrale contient : programme et données.
▪ L’unité d’entrées/sorties (E/S) est un intermédiaire entre le calculateur
et le monde extérieur.
▪ L’unité de transfert est le support de la circulation des données
▪ Horloge délivre des impulsions à des intervalles de temps fixes que les
composants du processeur utilisent pour effectuer leurs opérations
Pr A. RAIHANI 14
PROCESSEUR INTEL x86
Architecture – Remarques
▪ Les processeurs évolués possèdent en plus de l’UAL des unités de
calculs supplémentaires sur les réels et sur les données multimédias :
• FPU :
– Calculs sur des flottants
– Fonctions mathématiques avancées : sqrt, sin

• Unité multimédia : Intel MMX


– Fait principalement des calculs vectoriels
– Exécution en parallèle d'une même instruction sur plusieurs données.

• Un processeur peut intégrer plus d'une unité de chaque type


Exemple AMD Athlon 64 : 3 ALU et 3 FPU → calculs parallèles possibles

Pr A. RAIHANI 15
PROCESSEUR INTEL x86
Architecture interne - cas du processeur Intel 386

Unité d’interface de bus


EAX (32 bits) ECX (32 bits)
Pointeur d’instruction
Registres de
généraux AX (16bits) CX (16bits)
AH AL CH CL EIP

DS

Registres de
EBX (32 bits) EDX (32 bits)

segments
BX (16bits) DX (16bits) SS
BH BL DH DL CS
ES
Pointeurs et

EDI (32 bits) ESP (32 bits)


index

DI (16bits) SP (16bits)

ESI (32 bits) EBP (32 bits)


SI (16bits) BP (16bits) Génération
d’adresses
Bus de données interne 32 et contrôle
Unité d’exécution

bus externe
de bus A/D
+bus de
contrôle
6
5
4 File d’attente
3 des
UAL Commandes 2 instructions
de l’unité 1 (6 Octets)
d’exécution
Indicateurs (32 bits)

Pr A. RAIHANI 16
PROCESSEUR INTEL x86
Les Registres - Registres généraux :
Registres de 32 bits, qui servent notamment à stocker les résultats des
opérations arithmétiques ou à envoyer un paramètre à une interruption.
Nom
Fonction privilégiée
16 bits 32 bits
AX (AH:AL) EAX Accumulateur (Mul, Div, E/S, Interruptions)
BX (BH:BL) EBX Base (adressage en mémoire de données)
CX (CH:CL) ECX Compteur de boucle, Décalage
DX (DH:DL) EDX Données, Entrées/Sorties
Exemples d’utilisation du registre EAX :
INSTRUCTION EAX AX AH AL
MOV EAX,12345678h 12345678h 5678h 56h 78h
MOV AL,10h 12345610h 5610h 56h 10h
MOV AX,0000h 12340000h 0000h 00h 00h
MOV AH,31h 12343100h 3100h 31h 00h
MOV AL,AH 12343131h 3131h 31h 31h
Pr A. RAIHANI 17
PROCESSEUR INTEL x86
Les Registres - Registres de segment :
Ces registres, de 16 bits, servent à indiquer à partir de quel
segment on veut lire ou écrire sur la mémoire.
Nom Nom complet Fonction
Indique l’adresse du début des
CS Code segment
instructions d’un programme
Indique la localisation des
DS Data segment
données
SS Stack segment Indique la localisation de la pile
Indique la localisation de
ES Extra segment
données supplémentaires

ES
Remarque : A partir des processeurs 386, les
SS
extra segments FS et GS sont disponible et ont
DS
les mêmes fonctionnalités que le registre DS. Mémoire
CS
Pr A. RAIHANI 18
PROCESSEUR INTEL x86
Registres d’offset (de pointeurs) :
• Ils servent essentiellement à calculer des adresses en fournissant ce qu’on
appelle un décalage (offset).
• Les registres ESI et EDI servent à gérer des déplacement de données. Sont
utilisés principalement lors d’opérations sur les chaînes
• Les registres ESP et EBP sont utilisés pour pointer sur des données dans la pile
• Le registre EIP sert de compteur ordinal spécifiant l’adresse de la prochaine
instruction qui va être exécutée
Nom
Nom complet
16 32
IP EIP Instruction pointer
SP ESP Stack pointer
SI ESI Source index
DI EDI Destination index
BP EBP Base pointer
Pr A. RAIHANI 19
PROCESSEUR INTEL x86
Les Flags (drapeaux) :
Représente un ensemble de variables à valeurs booléennes
décrivant l’état courant du processeur.

• CF : Le carry indique un dépassement de capacité du résultat.


• PF : La parité du nombre de bits.
• AF : La retenue intermédiaire qui se propage du quartet (4 bits) de
poids faible vers le quartet de poids fort.
• ZF : Le Zéro indique que le résultat d’une opération est nul.
• SF : Le Signe est le bit de poids fort, en arithmétique signée
• TF : Le pas-à-pas, ou Trappe, permet la mise au point du logiciel.
• IF : L’autorisation d’interruptions externes .
• DF : Le flag de direction, permet de balayer une suite de données par
valeur croissante, ou décroissante, des adresses.
• OF : Le flag d’overflow, signale un dépassement signé.
PROCESSEUR INTEL x86
Adressage de la mémoire (Mode réel ) :
▪ La mémoire est formé de cellules, chacune de ces cellules
contenant une certaines quantité d’informations. Chaque
cellule a un numéro, appelée adresse
▪ L’espace mémoire adressable par le 8086 est de 220 = 1Mo.
▪ Cet espace est divisé en segments.
▪ Un segment est une zone mémoire de longueur 64 Ko
définie par son adresse de départ qui doit être un multiple
de 16 (articulations mémoire).
▪ Dans une telle adresse, les 4 bits de poids faible sont à
zéro.
On peut donc représenter l’adresse d’un segment avec seulement ses 16
bits de poids fort, les 4 bits de poids faible étant implicitement à 0.
PROCESSEUR INTEL x86
Adressage de la mémoire – distribution des segments :
Les segments mémoires peuvent être :
• Disjoints
• Consécutifs
• en chevauchement(plusieurs façons d’adresser la même
cellule)
• superposés Segment 1 Segment 2

Segment 1 Segment 2

Segment 1

Segment 2
Segment 1

Segment 2
PROCESSEUR INTEL x86
Adressage de la mémoire :
FFFF
Une case mémoire est repérée au
moyen de deux quantités sur 16
bits : Offset
▪ l’adresse d’un segment
(sélecteur),
▪ un déplacement ou offset dans
ce segment.

Adresse multiple
de 16
Sélecteur 0000
PROCESSEUR INTEL x86
Adressage de la mémoire – adresses Logique/physique :
Adresse logique : segment : offset.
Adresse physique : 20 bits (A0 - A19).

Adr. physique = 16 × segment + offset

Exemples
▪ 3100:27EE correspond
à l'adresse :
31000 + 27EE = 337EE
▪ 3101:27DE correspond
à l'adresse :
31010 + 27DE = 337EE
Pr A. RAIHANI 24
PROCESSEUR INTEL x86
Adressage de la mémoire – adresses Logique/physique :

A un instant donné, le microprocesseur a accès à 4


segments dont les adresses se trouvent dans les
registres de segment CS, DS, SS et ES.

✓ Le segment de code contient les instructions du


programme,
✓ Le segment de données contient les données
manipulées par le programme,
✓ Le segment de pile contient la pile de sauvegarde
✓ Le segment supplémentaire peut aussi contenir
des données.
Pr A. RAIHANI 25
PROCESSEUR INTEL x86
Adressage de la mémoire – adresses Logique/physique :

✓ Le segment de code:

Le registre CS est
associé au pointeur
d’instruction IP, ainsi la
prochaine instruction à
exécuter se trouve à
l’adresse logique CS:IP.

Pr A. RAIHANI 26
PROCESSEUR INTEL x86
Adressage de la mémoire – adresses Logique/physique :

✓ Le segment de données:
De même, les registres de
segments DS et ES
peuvent être associés à un
registre d’index.
Exemple: DS : SI, ES : DI
✓ Le segment de pile:
Le registre de segment de
pile peut être associé aux
registres de pointeurs
Exemple: SS:SP ou SS:BP

Pr A. RAIHANI 27
PROCESSEUR INTEL x86
Adressage de la mémoire – Modes d’adressage :
L’adresse effective est le résultat de l’addition d’un mot, d’un
registre de base (BP ou BX) et d’un registre d’index (SI ou DI).
16 possibilités (BP seul est interdit) pour créer une adresse de
données :

Pr A. RAIHANI 28
PROCESSEUR INTEL x86
Adressage de la mémoire – Modes d’adressage :
Du tableau précédent, on peut distinguer différents modes
d’adressage

Pr A. RAIHANI 29

Vous aimerez peut-être aussi