Cours d’Assembleur
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, compiler, debugger et exécuter un programme assembleur
Réaliser des travaux pratiques pour programmer en assembleur des applications d'acquisition de données
Professeur M.QBADOU 1
Objectifs
Cours d’Assembleur
COURS (15H)
Introduction
Processeurs Intel
Famille des processeurs Intel x86
Architecture interne des processeurs Intel x86 (32 bits)
Les registres
Segmentation de la mémoire et adresses mémoire
Mode d’adressage (calcul d’adresse absolue)
Langage assembleur
Avantages et inconvénients
Opération – Format général
Classes d’opérations
Procédures et Pile
Les interruptions
Professeur M.QBADOU 2
Sommaire
Cours d’Assembleur
Les interfaces parallèle et série
TP (27H)
Prise en main
Instruction arithmétiques, indicateurs d’états, branchement, …
Procédures et pile
Les chaînes de caractères
Les interruptions
La gestion de l’écran
MINI PROJET (Travail de recherche )
Gestion d’une liaison série (PC-PC)
Gestion d’une liaison parallèle (PC-PC)
Professeur M.QBADOU 3
Sommaire
Cours d’Assembleur
Professeur M.QBADOU 4
Chap1. Introduction
Objectifs :
Introduire 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
Cours d’Assembleur
Professeur M.QBADOU 5
Chap1. Introduction
Ordinateur
Homme Langages humains
Langages orientés objets
Langages structurés
Langage Assembleur
Langage machine Codage binaire des
opérations : code opération
+ codes opérandes
Langage machine avec
codes mnémotechniques
Langages Basic, Pascal,
Fortran, C , …
Langages C++, Java , …
Langages Naturels (,
Arabe, Anglais , …
Niveaux de programmation :
Cours d’Assembleur
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
Professeur M.QBADOU 6
Chap1. Introduction
Cours d’Assembleur
Chap1. Introduction
Professeur M.QBADOU 7
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,
• …
Cours d’Assembleur
Assembleur langage - 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,
Chap1. Introduction
Professeur M.QBADOU 8
Cours d’Assembleur
Assembleur langage - 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
Chap1. Introduction
Professeur M.QBADOU 9
Chaque microprocesseur a son propre langage et son propre jeu d'instructions
Cours d’Assembleur
Bus de commande
Bus de donnée
Objectifs
Comprendre les mécanismes de fonctionnement du microprocesseur
comment fonctionne la mémoire
Comment Calculer les adresses en mémoire
Chap2. Processeurs Intel x86
Professeur M.QBADOU 10
Microprocesseur
Unité de mémoire RAM/ROM/HDD
Ports d’entrée Ports de sortie
Bus d’adresse (unidirectionnel)
Cours d’Assembleur
Professeur M.QBADOU 11
Chap2. Processeurs Intel x86
Processeur Intel 86 :
Le microprocesseur Intel 86, Développer 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
Cours d’Assembleur
Processeur Intel 286 : Le microprocesseur Intel 286, Développer 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
Chap2. Processeurs Intel x86
Professeur M.QBADOU 12
Cours d’Assembleur
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
Chap2. Processeurs Intel x86
Professeur M.QBADOU 13
Cours d’Assembleur
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.
Chap2. Processeurs Intel x86
Professeur M.QBADOU 14
Cours d’Assembleur
Architecture
L’élément de base d’un calculateur est constitué par l’unité centrale
de traitement ( CPU : Central Processing Unit).
Chap2. Processeurs Intel x86
Professeur M.QBADOU 15
Cours d’Assembleur
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
Chap2. Processeurs Intel x86
Professeur M.QBADOU 16
Cours d’Assembleur
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
Chap2. Processeurs Intel x86
Professeur M.QBADOU 17
Cours d’Assembleur
Architecture interne - cas du processeur Intel 386
Chap2. Processeurs Intel x86
Professeur M.QBADOU 18
Un
ité
d’e
xécu
tio
n
EAX (32 bits)
AX (16bits)
AH AL
EBX (32 bits)
BX (16bits)
BH BL
ECX (32 bits)
CX (16bits)
CH CL
EDX (32 bits)
DX (16bits)
DH DL
EDI (32 bits)
DI (16bits)
ESI (32 bits)
SI (16bits)
ESP (32 bits)
SP (16bits)
EBP (32 bits)
BP (16bits)
Indicateurs (32 bits)
DS
SS
CS
ES
EIP
Commandes
de l’unité
d’exécution
6
5
4
3
2
1
Pointeur d’instruction
Regis
tres d
e
se
gm
en
ts
bus externe
A/D
+bus de
contrôle
Regis
tres d
e
gé
né
rau
x
Po
inte
urs
et
ind
ex
File d’attente
des
instructions
(6 Octets)
32 Bus de données interne
Un
ité
d’i
nte
rfac
e d
e b
us
UAL
Génération
d’adresses
et contrôle
de bus
Cours d’Assembleur Chap2. Processeurs Intel x86
Professeur M.QBADOU 19
Les Registres - Registres généraux :
Registres de 32 bits, qui servent notamment pour stocker les résultats des opérations arithmétiques.
Exemples d’utilisation du registre EAX :
Nom Fonction privilégiée
16 bits 32 bits
AX (AH:AL) EAX Accumulateur (Mul, Div, E/S)
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
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
Cours d’Assembleur
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
CS Code segment Indique l’adresse du début des
instructions d’un programme
DS Data segment Indique la localisation des
données
SS Stack segment Indique la localisation de la pile
ES Extra segment Indique la localisation de
données supplémentaires
Professeur M.QBADOU 20
Chap2. Processeurs Intel x86
CS
DS
SS
ES
Mémoire
Remarque : A partir des processeurs 386, les
extra segments FS et GS sont disponible et ont
les mêmes fonctionnalités que le registre DS.
Cours d’Assembleur
Professeur M.QBADOU 21
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
Chap2. Processeurs 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
• 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
Cours d’Assembleur
Les Flags (drapeaux) : Représente un ensemble de variables à valeurs booléennes
décrivant l’état courant du processeur.
Professeur M.QBADOU 22
Chap2. Processeurs Intel x86
• CF : Le carry indique un dépassement de capacité du résultat.
• PF : La parité du nombre de bits égaux à 1.
• 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é.
Cours d’Assembleur
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.
Professeur M.QBADOU 23
Chap2. Processeurs Intel x86
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.
Cours d’Assembleur
Professeur M.QBADOU 24
Chap2. Processeurs 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 2
Segment 1
Segment 1
Segment 2
Cours d’Assembleur
Professeur M.QBADOU 25
Chap2. Processeurs Intel x86
Adressage de la mémoire :
Une case mémoire est repérée au
moyen de deux quantités sur 16
bits :
l’adresse d’un segment
(sélecteur),
un déplacement ou offset dans
ce segment.
Sélecteur
Adresse multiple de 16
Offset
FFFF
0000
Cours d’Assembleur
Professeur M.QBADOU 26
Chap2. Processeurs Intel x86
Adr. physique = 16 × segment + offset
Adressage de la mémoire – adresses Logique/physique :
Adresse logique : segment : offset.
Adresse physique : 20 bits (A0 - A19).
Exemples
3100:27EE correspond
à l'adresse :
31000 + 27EE = 317EE
3101:27DE correspond
à l'adresse :
31010 + 27DE = 317EE
Cours d’Assembleur
Professeur M.QBADOU 27
Chap2. Processeurs 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 :