CoursAssembleur_chap1 Et 2

28
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

Transcript of CoursAssembleur_chap1 Et 2

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

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 :

Cours d’Assembleur

Professeur M.QBADOU 28

Chap2. Processeurs Intel x86

Adressage de la mémoire – Modes d’adressage : Du tableau précédent, on peut distinguer différentes modes

d’adressage