Cours AO V1
Cours AO V1
Cours AO V1
Jamal BAKKAS
1 Jamal BAKKAS
Généralités
L'informatique, contraction d'information et automatique, est la
science du traitement de l'information.
l'automatisation,
le contrôle et la commande de processus,
la communication ou le partage de l'information.
2 Jamal BAKKAS
Histoire
1642 : Blaise Pascal invente la pascaline
3 Jamal BAKKAS
Histoire
1694 : machine de Leibniz (multiplication et division)
4 Jamal BAKKAS
Histoire
1820 : C.X. Thomas invente l’arithmomètre (6 à 20
chiffres)
1 500 exemplaires vendus de 1823 à 1878
5 Jamal BAKKAS
Histoire
1937 : C. Herzstark invente la Curta
Curta I : 80 000 exemplaires vendus de 1947 à 1970
Curta II : 60 000 exemplaires vendus de 1954 à 1970
6 Jamal BAKKAS
Histoire
1938 : K. Zuse crée le Z1, ordinateur binaire programmable
mécanique !
Jamal BAKKAS 9
Histoire
Invention du transistor le 23 décembre 1947 par les Américains John Bardeen,William
Shockley et Walter Brattain, chercheurs des Laboratoires Bell
1950 : M.V. Wilkes invente l ’assembleur (avant on programmait en binaire)
1953 : invention de la mémoire à tores de ferrite
1956 : TRADIC le premier ordinateur à transistors par Bell amorce la seconde génération
d ’ordinateurs
1957 : J. Backus d ’IBM crée le langage FORTRAN
Date Type de processeur (Intel) Nb de transistors / puce
1971 4004 10 3
1978 8086 5. 10 4
1982 (80)286 10 5
1985 (80)386 5. 10 5
1989 (80)486 10 6
1993 Pentium 5. 10 6
1995 Pentium Pro 8. 10 6
1997 Pentium II 9. 10 6
1999 Pentium III 10 7
2000 Pentium IV 7. 10 7
Jamal BAKKAS 10
Historique
1945-1958 1972-1977
ordinateurs dédiés, exemplaire uniques technologie LSI (large SI)
machines volumineuses et peu fiables
107 éléments logiques
technologie à lampes, relais, resistances
104 éléments logiques avènement de réseaux de machines
programmation par cartes perforées traitement distribué/réparti
1958-1964 1978 -
usage général, machine fiable
technologie VL/WSI (very large,
technologie à transistors
105 éléments logiques
wafer)
apparition des langages de programmation 108 éléments logiques (le PII contient
évolués (COBOL, FORTRAN, LISP) 7,5 millions de transistors, mémoire
non comprise)
1965-1971
technologie des circuits intégrés (S/MSI
systèmes distribués interactifs
small/medium scale integration) multimédia, traitement de données
106 éléments logiques non numériques (textes, images,
avènement du système d'exploitation paroles)
complexe, des mini-ordinateurs.
parallélisme massif
11 Jamal BAKKAS
Les systèmes à base de microprocesseur
12 Jamal BAKKAS
Les systèmes à base de microprocesseur
Les applications des systèmes à microprocesseurs sont multiples
et variées :
Ordinateur, PDA
Console de jeux
Calculatrice
Télévision
Téléphone portable
distributeur automatique d’argent
Robotique
lecteur carte à puce, code barre
Automobile
Instrumentation
etc…
13 Jamal BAKKAS
Les systèmes à base de microprocesseur
En 1946, John Von Neumann propose un modèle de machine universelle de
traitement programmé de l’information. Son architecture est formée des trois
éléments suivants:
Une unité CPU (central processing unit )
Une mémoire (ROM et RAM)
Des ports d'entrées/sorties.
Les trois modules sont interconnectés autour de trois bus :
14 Jamal BAKKAS
Bus
15 Jamal BAKKAS
Bus
Le microprocesseur doit pouvoir communiquer avec :
les différentes mémoires
et les différents boîtiers d’interface.
Ceux-ci sont tous reliés sur le même bus de données.
Pour éviter des conflits, un seul composant doit être sélectionné à la fois.
Nécessité de la présence d’un décodeur d’adresse chargé d’aiguiller les
données présentes sur le bus de données.
16 Jamal BAKKAS
Le circuit intégré
17 Jamal BAKKAS
Mémoires
Définition:
La mémoire est un
dispositif électronique qui sert à stocker :
des informations
des programmes à exécuter
Organisation d’une mémoire
une mémoire est organisée sous forme
d’un ensemble de case mémoires
numérotés par numéros . Ces numéros
sont appelés adresses.
Une adresse mémoire est un
nombre entier naturel qui désigne une
zone particulière de la mémoire.
18 Jamal BAKKAS
Mémoires
Avec une adresse de n bits il est possible de référencer au plus 2n cases mémoire.
Chaque case est remplie par un mot de données (sa longueur m est toujours
une puissance de 2).
Le nombre de fils d’adresses d’un boîtier mémoire définit donc le nombre de
cases mémoire que comprend le boîtier.
Le nombre de fils de données définit la taille des données que l’on peut
sauvegarder dans chaque case mémoire.
En plus du bus d’adresses et du bus de données, un boîtier mémoire
comprend :
une entrée de commande qui permet de définir le type d’action que l’on
effectue avec la mémoire (lecture/écriture)
une entrée de sélection du circuit
19 Jamal BAKKAS
Mémoires
Une opération de lecture ou d’écriture de la mémoire
suit toujours le même cycle :
1) Sélection de l’adresse
2) Choix de l’opération à effectuer ( R/W )
3) Sélection de la mémoire ( CS = 0 )
4) Lecture ou écriture la donnée
20 Jamal BAKKAS
Mémoires
Exemple
21 Jamal BAKKAS
Mémoires
Caractéristiques d’une mémoire
La capacité : c’est le nombre total de bits que contient la mémoire. Elle
s’exprime aussi souvent en octet.
Le format des données : c’est le nombre de bits que l’on peut mémoriser par
case mémoire. On dit aussi que c’est la largeur du mot mémorisable.
Le temps d’accès : c’est le temps qui s'écoule entre l'instant où a été lancée
une opération de lecture/écriture en mémoire et l'instant où la première
information est disponible sur le bus de données.
Le temps de cycle : il représente l'intervalle minimum qui doit séparer deux
demandes successives de lecture ou d'écriture.
Le débit : c’est le nombre maximum d'informations lues ou écrites par seconde.
Volatilité : elle caractérise la permanence des informations dans la mémoire.
L'information stockée est volatile si elle risque d'être perdue par un défaut
d'alimentation électrique et non volatile dans le cas contraire.
22 Jamal BAKKAS
Mémoires
Capacité
Attention aux multiples de l'octet,:
1 kilooctet (ko)= 210 octets= 1 024 octets
1 mégaoctet (Mo)= 220 octets= 1 024 ko= 1 048 576 octets
1 gigaoctet (Go)= 230 octets= 1 024 Mo= 1 073 741 824 octets
1 téraoctet (To)= 240 octets= 1 024 Go= 1 099 511 627 776 octets
1 pétaoctet (Po)= 250 octets= 1 024 To= 1 125 899 906 842 624 octets
1 exaoctet (Eo)= 260 octets= 1 024 Po= 1 152 921 504 606 846 976 octets
1 zéttaoctet (Zo)= 270 octets= 1 024 Eo= 1 180 591 620 717 411 303 424 octets
1 yottaoctet (Yo)= 280 octets= 1 024 Zo= 1 208 925 819 614 629 174 706 176 octets
23 Jamal BAKKAS
Mémoires
Exemple: Cycle de lecture
24 Jamal BAKKAS
Mémoires
Types d’accès:
Aléatoires (ou directe) : l’accès se fait d’une manière directe en
utilisant l’adresse
Temps d’accès est rapide (mémoire vive)
Séquentiel : le contenu de la mémoire est parcouru depuis le
début jusqu’à la rencontre de la donnée recherchée.
Temps d’accès dépend de l’emplacement de la donnée dans la mémoire
Exemple: Bandes magnétiques
25 Jamal BAKKAS
Mémoires
Différents types de mémoire
Les mémoires vives (RAM): (Random Acces Memory,
mémoire à accès aléatoire) c’est la mémoire de travail de
l’ordinateur, elle sert au stockage temporaire de données.
Elle est accessible en lecture et ecriture
Elle doit avoir un temps de cycle très court pour ne pas ralentir le
microprocesseur.
Les mémoires vives sont en général volatiles : elles perdent leurs
informations en cas de coupure d'alimentation
Il existe deux types de mémoires RAM:
Les RAM statiques
Les RAM dynamiques
26 Jamal BAKKAS
Mémoires
Mémoire STATIQUE:
Appelée aussi SRAM (Static Random Access Memory)
L’information est stockée de façon permanente. Seule la
tension d’alimentation suffit pour le maintien de cette
information.
Mémoire DYNAMIQUE:
Appelée aussi DRAM (Dynamic Random Access
Memory) est un type de mémoire vive compacte et
peu dispendieuse.
L’effet mémoire est obtenu par la conservation de charges
électriques dans des condensateurs de faible valeur.
L’existence de fuites implique obligatoirement un
rafraîchissement périodique de l’information.
27 Jamal BAKKAS
Mémoires
Mémoire statique
Mémoire dynamique
28 Jamal BAKKAS
Mémoire
Utilisation
29 Jamal BAKKAS
Mémoires
Les mémoires mortes (ROM)
Appelée aussi ROM (Read Only Memory, Mémoire en lecture seule): elle permet de
conserver des informations de façon permanente même lorsque l'alimentation électrique
est interrompue.
Ces mémoires sont non volatiles
Elle est utilisée pour stocker les programmes nécessaires au démarrage de l’ordinateur.
Ces mémoires, contrairement aux RAM, ne peuvent être que lue.
Il existe donc plusieurs types de ROM :
ROM : Elle est programmée par le fabricant et son contenu ne peut plus être ni modifié, ni
effacé par l'utilisateur.
PROM :(Programmable ROM) C’est une ROM qui peut être programmée une seule fois
par l'utilisateur.
EPROM: (Erasable Programmable ROM) permettre une erreur de programmation
EEPROM : (Electically EPROM) est une mémoire programmable et effaçable
électriquement
FLASH EPROM : Elle est programmable et effaçable électriquement comme les EEPROM.²
30 Jamal BAKKAS
Mémoires auxiliaires
Bandes magnétiques
stockage secondaire
accès séquentiel
31 Jamal BAKKAS
Mémoires auxiliaires
32 Jamal BAKKAS
Mémoires auxiliaires
Disque optique ou magnéto-optique: CD-ROM, Disques DVD, etc..
Technologie Optique
Taille 780 Mbytes (CD-ROM) ~ 4 Gigabyte (DVD)
Lecture Seulement / Gravable une ou plusieurs fois
SSD (Solid State Drive): utilise mémoire flash (encore très cher)
Mémoire flash
La mémoire flash est une mémoire de masse à semi-conducteurs réinscriptible
33 Jamal BAKKAS
Les registres
34 Jamal BAKKAS
Mémoires
Notion de hiérarchie mémoire
35 Jamal BAKKAS
Microprocesseur
appelé aussi Unité Centrale de Traitement ou CPU (Central Processing Unit):
c’est un circuit électronique très sophistiqué. C’est le cerveau de
l’ordinateur
Il est caractérisé par une très grande intégration.
Il permet l’exécution les instructions des programmes
Le processeur est rythmé par une horloge (quartz) cadencée plus ou
moins rapidement (on parle de fréquence d'horloge).
A chaque impulsion d'horloge, le processeur lit l'instruction stockée
généralement dans un registre d'instruction et l'exécute.
On caractérise le microprocesseur par :
Sa fréquence d’horloge : en MHz ou GHz
Le nombre d’instructions par secondes qu’il est capable d’exécuter : en
MIPS (Millions d'Instructions Par Seconde)
la taille des données qu’il est capable de traiter : en bits
36 Jamal BAKKAS
Loi de Moore
Gordon Moore, cofondateur de la société Intel avait
affirmé en 1965 : « Dans les microprocesseurs, le nombre de
transistors sur une puce de circuit intégré double tous les dix-huit mois. »
37 Jamal BAKKAS
Microprocesseur
Un microprocesseur est construit autour des éléments
principaux suivants:
Une unité de commande
Une unité de traitement
Les registres
38 Jamal BAKKAS
L’unité de commande
39 Jamal BAKKAS
L’unité de traitement
40 Jamal BAKKAS
L’unité de commande
Le compteur de programme (PC) :
( Program Counter) appelé aussi Compteur Ordinal (CO)
Il contient toujours l’adresse de la prochaine instruction à
exécuter.
Son contenu est initialisé avec l'adresse de la première
instruction du programme.
Une fois l'instruction chargée, il est automatiquement
incrémenté pour pointer l'instruction suivante.
Registre instruction
contient l’instruction en cours d’exécution, elle demeure dans
ce registre pendant toute la durée de son exécution.
41 Jamal BAKKAS
L’unité de commande
Un programme est constitué d’une suite d'instructions.
Chaque instruction est constituée de plusieurs micro-
instructions.
Chaque micro-instruction génère plusieurs micro-commandes
Exemple:
ADD A,B : cette instruction correspond à un ordre donné à
l’ordinateur en langage assembleur qui permet de faire l’addition
entre les données A et B.
Toute instruction présente en fait deux types d’informations :
Ce qu’il faut faire comme action (addition, affichage, division …)
Avec quelles données réaliser cette action
42 Jamal BAKKAS
L’unité de commande
Composition d’une instruction
Code opération : Cette zone un code qui permet de déterminer
la nature de l’opération à effectuer par le microprocesseur.
43 Jamal BAKKAS
L’unité de commande
Décodeur d’instruction:
Elle décompose et analyse l’instruction se trouvant dans le registre
d’instructions,
Selon le code opération, elle envoie la nature des opérations à
effectuer au séquenceur qui va ensuite générer les microcommandes
nécessaires aux différents composants participant à l’exécution de
l’instruction
microcommandes
Décodeur
Séquenceur
d’instruction
44 Jamal BAKKAS
L’unité de commande
Exemple :
l’instruction : ADD A, B
cette instruction est représenté dans le registre d’instructions
comme suit :
microcommandes
Signaux de commandes pour
Décodeur rechercher les adresses de A
Séquenceur et B en mémoire et de réaliser
d’instruction
l’addition par l’UAL
45 Jamal BAKKAS
L’unité de commande
Séquenceur :
C’est un automate générant les signaux de commande contrôlant les
différentes unités. Il y a deux façons de le réaliser: Séquenceur câblé,
Séquenceur micro-programmé (firmware)
Avantages
Câblé : un peu plus rapide
Micro-programmé : plus souple et plus simple à réaliser
Séquenceur câblé:
Circuit séquentiel réalisé avec des portes de base
Pour chaque instruction exécutable
Un sous-circuit réalisant le contrôle des éléments pour réaliser l'opération
Un seul des sous-circuits est activé selon le code renvoyé par le décodeur
Séquenceur micro-programmé
Une ROM contient des micro-programmes constitués de micro-instructions
Le séquenceur sait exécuter en séquence des micro-instructions
46 Jamal BAKKAS
L’unité de commande:
L’unité de commande utilise également d’autres registres pour
accéder en mémoire comme:
Le registre d’adresse :
C’est un registre qui contient l’adresse du mot à accéder en
mémoire centrale. A chaque accès mémoire, l’adresse recherchée est
stockée dans ce registre.
Le registre de données :
Appelé aussi mot mémoire, il contient le mot mémoire faisant objet
d’une opération de lecture ou d’écriture dans la mémoire centrale.
Ce registre a la taille d’un mot mémoire qui est la même que celle
des registres de travail et l’accumulateur qui est égale à la taille du
bus de données.
47 Jamal BAKKAS
L’unité de traitement
L’Unité Arithmétique et Logique (UAL) :
UAL est un circuit complexe qui assure les fonctions logiques et
Arithmétiques:
Logiques: ET, OU, Comparaison, Décalage, Etc…
48 Jamal BAKKAS
L’unité de traitement
Exemple:
49 Jamal BAKKAS
L’unité de traitement
L’Accumulateur:
C’est un registre de travail qui sert à stocker un opérande au début d'une
opération arithmétique et le résultat à la fin de l'opération.
51 Jamal BAKKAS
Microprocesseur
Exemple: Lecture/Ecriture:
La lecture et l’écriture dans la mémoire centrale se fait de la façon
suivante :
Lecture :
l’adresse du mot à lire est transférée au registre d’adresse,
le dispositif d’accès à la mémoire se charge de chercher le mot et de le
mettre dans le registre de données (registre mot mémoire).
Encas de lecture, le contenu des cases mémoire n’est pas détruit.
Ecriture :
le registre d’adresse est chargé par l’adresse mémoire ou on va écrire, le
mot à écrire est placé dans le registre mot mémoire.
Lorsque l’ordre de l’écriture est donné, le contenu des cases mémoires
sera écrasé et remplacé par la nouvelle valeur.
52 Jamal BAKKAS
Microprocesseur: (Schéma fonctionnel)
53 Jamal BAKKAS
Cycle d’exécution d’une instruction
Le traitement d’une instruction peut être décomposé en trois phases.
Phase 1: Recherche de l'instruction à traiter
1. La valeur de PC est placée sur le bus d'adresses par l'unité de commande
Émission de l’ordre de lecture par l’unité de commande.
2. Sélection de la case mémoire et transfert de son contenu (instruction) sur le bus
des données (après Tacc).
3. Instruction placée dans le registre instruction du processeur.
54 Jamal BAKKAS
Cycle d’exécution d’une instruction
55 Jamal BAKKAS
Cycle d’exécution d’une instruction
Phase 2 : Décodage de l’instruction et recherche de l'opérande:
Le registre d'instruction contient le code opératoire de l'instruction.
1. L'unité de commande génère une suite de commandes élémentaires
2. Si l'instruction nécessite une donnée en provenance de la mémoire, l'unité de
commande récupère sa valeur sur le bus de données.
3. L’opérande est stockée dans un registre.
56 Jamal BAKKAS
Cycle d’exécution d’une instruction
Phase 3 : Exécution de l'instruction
1. L’UAL exécute l'instruction
2. Les drapeaux sont positionnés (registre d'état).
3. L'unité de commande positionne le PC pour l'instruction suivante.
57 Jamal BAKKAS
Le Microprocesseur 8086
58 Jamal BAKKAS
Le processeur Intel 8086
L'Intel 8086 est un microprocesseur fabriqué par Intel en 1978.
C’est le premier microprocesseur de la famille Intel 80x86 (8086,
80186, 80286, 80386, 80486, Pentium, ...)
Il est basé sur des registres 16 bits,
Il dispose d'un bus externe de données de 16 bits
il dispose d'un bus d'adresse de 20 bits, qui lui permet d'adresser 1
Mo.
Il intègre 29 000 transistors
Chaque cycle d'accès au bus comporte 4 périodes d'horloge (T1 à
T4) auxquelles peuvent s'ajouter des périodes d'attente Tw (wait
states) insérées entre T3 et T4.
59 Jamal BAKKAS
Le microprocesseur 8086
60 Jamal BAKKAS
Le microprocesseur 8086
61 Jamal BAKKAS
Description des PINs
Vcc et GND assure l’alimentation électrique du microprocesseur.
AD15-AD0 : Bus multiplexés: Adresses/Données (ALE = 1: bus d’adresses/ ALE = 0: bus de
données)
A19/S6-A16/S3 : Bus multiplexés Adresses/Etats
M / IO : Indique si l'adresse est une mémoire ou l'adresse E/S, (1:mémoire/ 0: E/S).
RD (Read): signal de lecture d'une donnée.
WR (Write): Signal d'écriture d'une donnée.
ALE (Address latch enable): démultiplexe les bus d’adresses/données: (1:bus d’adresse, 0 bus de
données)
DT/R (Data Transmit/Receive): bus de données transmet ou reçoit les données
DT/R = 1 : données émises par le microprocesseur (écriture) ;
DT/R = 0 : données reçues par le microprocesseur (lecture).
DEN (Data bus Enable): indique que les données sont en train de circuler sur le bus A/D
CLK : entrée destinée à recevoir le signale de l'horloge système, qui cadence le fonctionnement du
microprocesseur.
INTR: interruption normale
NMI : interruption prioritaire:(Non Maskable Interrupt)
INTA : Interrupt Acknowledge, indique que le microprocesseur accepte l’interruption
62 Jamal BAKKAS
Description des PINs
READY : synchronise des mémoires et les E/S lents avec le CPU
insertion de périodes d'attente entre les périodes des cycles
RESET: un signale de remise à l'état initiale. Ce signale doit rester à l'état
haut pendant au moins quatre cycles d'horloge
Test : Entrée de mise en attente du microprocesseur d’un évènement
extérieur
MN/MX: indique dans quel mode le processeur doit fonctionner:
minimum/maximum
HOLD: entrée de demande d'accès au bus.
HLDA: indique que le microprocesseur a pris en compte la demande
d'accès au bus.
BHE : Bus High Enable, signal de lecture de l’octet de poids fort du bus de
Données.
S0 à S7: Signaux d'état indiquant le type d'opération sur le bus.
63 Jamal BAKKAS
Opération d’écriture
64 Jamal BAKKAS
Opération de lecture
65 Jamal BAKKAS
Architecture interne du 8086
EXECUTION UNIT (EU) BUS INTERFACE UNIT (BIU)
15 7 0
AX AH AL Accumulateur Registres de Segment
BX BH BL Base 15 0
CX CH CL Compteur CS segment de code
OPERANDES
Registres d'état
et de contrôle
ALU SEQUENCEUR FILE D’ATTENTE D’INSTRUCTIONS
Flags Buffer
66 Jamal BAKKAS
Architecture interne du 8086
L'EU ( Exécution Unit, unité d'exécution):
regroupe les fonctions de traitement (unité arithmétique et logique), les
registres généraux, le décodeur d'instruction. Elle lit les codes opération
dans une file d'attente et les exécute. La file d'attente est alimentée par
le BIU qui constitue la deuxième machine.
67 Jamal BAKKAS
Les registres du processeur 8086
Les types de registres
Les données dont le processeur a besoin sont stockées dans des "cases"
qu'on appelle des registres. Il existe plusieurs types de registres et chacun a
son utilité.
Registres généraux ou de travail : Ils servent à manipuler des données, à
transférer des paramètres lors de l’appel de fonction DOS et à stocker des
résultats intermédiaires.
Registres de segment : Ils sont utilisés pour stocker l’adresse de début d’un
segment. Il peut s’agir de l’adresse du début des instructions du programme, du
début des données ou du début de la pile.
Registre de flag : Il contient des bits qui ont chacun un rôle indicateur.
68 Jamal BAKKAS
Les registres de 8086
Registres généraux (ou de données)
AX, BX, CX et DX : Ce sont des registres 16 bits.
chacun est divisé en 2 parties :
L (comme Low pour désigner les bits de poids faible)
H (pour High afin de désigner les bits de poids forts).
Par exemple : AX (AL et AH), BX (BL et BH), CX (CL et CH), DX (DL et DH).
AX "accumulator": l'accumulateur est privilégié pour certaines opérations
arithmétiques ainsi que les opérations d'entrée/sortie
BX "base register": il est appelé registre de base car l'adressage en mémoire
peut se faire par son intermédiaire
CX "count register": est implicitement le registre compteurs de boucles pour
les instructions répétitives.
DX "data register" : sert dans certaines circonstances d'extension à
l'accumulateur.
Ceci est leur utilisation théorique, mais dans la pratique ils peuvent être utilisés à
d'autres usages.
69 Jamal BAKKAS
Les registres de 8086
Registres d'adresses
SI (Source index) :
Adressage comme registre d’index, (Par défaut, son offset est relatif à DS)
Certaines instruction de déplacement de donnés l'utilise comme index de l'opérande
source. L'opérande destination étant indexé par DI
DI (Destination index):
Adressage comme registre d’index, (par défaut, son offset est relatif à DS)
Certaines instruction de déplacement de donnés l'utilise comme index de l'opérande
destination, l'opérande destination étant indexé par SI
BP (Base pointer): il est associé au registre de segment SS (SS :BP) pour accéder aux
données de la pile lors d’appels de sous-programmes (CALL).
SP (Stack pointer): il est associé au registre de segment SS (SS :SP) pour indiquer le
dernier élément de la pile.
Le pointeur d'instructions (IP):
Ce registre est associé au registre de segment CS (CS :IP) pour indiquer la
prochaine instruction à exécuter.
Il ne pourra jamais être modifié directement ; il sera modifié indirectement par les
instructions de saut, par les sous-programmes et par les interruptions
70 Jamal BAKKAS
Les registres de 8086
Registres de segments:
Le processeur utilise des adresses pour stocker ou récupérer des données. L'adresse
est composée de 2 parties de 16 bits (ou 32bits selon le mode utilisé). La première
est le segment et la deuxième est l'offset. L'adresse est présenté comme cela :
segment:offset (par exemple : 0A000h:00000h). Voici les différents segments :
CS (Code Segment) : indique le début du segment du code qui contient les
instructions du programme. Les adresses des différentes instructions du
programme sont relatives à CS
DS (Data Segment) : contient l’adresse du début de segment des données du
programme. Qui contient les données traitées par le programme
SS (Stack Segment): pointe sur le segment qui représente la pile
ES (Extra Segment): Registre segment supplémentaire est utilisé, par défaut, par
certaines instructions de copie de bloc. En dehors de ces instructions, le
programmeur est libre de l’utiliser comme il l’entend
71 Jamal BAKKAS
Gestion de la mémoire
L'espace mémoire adressable est de taille 1Mo = 220 (20 bits du bus d'adresse)
Il est divisé en quatre segment logiques allant jusqu'à 64 KOctets chacun .
La taille des registres (d’adresse) est de 16 bits donc la possibilité d'adressage est
de 216 = 64 Ko (<1Mo),
solutionutilisation de deux registres pour représenter une adresse:
Registre Segment:Registre offset
Chaque segment débute l'endroit spécifié par le registre segment.
Le déplacement (offset) à l'intérieur de chaque segment se fait par un registre de
décalage qui permet de trouver une information à l'intérieur du segment.
L'adresse d'un octet se note donc :XXXX:YYYY où : XXXX est l'adresse de segment
YYYY est l'offset
Exemple
la paire de registre CS:IP : pointe sur le code d'une instruction (CS registre
segment et IP Déplacement)
72 Jamal BAKKAS
Gestion de la mémoire
73 Jamal BAKKAS
Gestion de la mémoire
Cette adresse de 20 bits est formée par la juxtaposition d'un
registre segment (16 bits de poids fort) et d'un déplacement
(offset, 16 bits de poids faible).
Adresse physique= Base * 16+ offset
Exemple:
74 Jamal BAKKAS
Segment & offset
75 Jamal BAKKAS
Segment & offset
le 8086 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,
et le segment supplémentaire peut aussi contenir des données.
Le registre CS est associé au pointeur d’instruction IP, ainsi la prochaine instruction
à exécuter se trouve à l’adresse logique CS : IP
Les valeurs des registres des segments cs, ds et ss sont automatiquement
initialisées par le système d’exploitation au lancement du programme.
Dès lors, ces segments sont implicites, c’est-à-dire que si l’on désire
accéder à une donnée en mémoire, il suffit de spécifier son offset sans avoir
à se soucier du segment.
76 Jamal BAKKAS
Les registres de 8086
Registre d'états
Ce registre contient les flags, ce sont des bits qui
basculent d'un état à l'autre en fonction des résultats de
l'exécution d'opérations arithmétiques ou logiques.
Les instructions arithmétiques, logiques et de
comparaison modifient la valeur des indicateurs.
Les instructions conditionnelles testent la valeur des
indicateurs et agissent en fonction du résultat.
CF : Carry Flag - Indicateur de retenue
PF : Parity Flag - Indicateur de parité
AF : Auxiliary carry Flag - Indicateur de retenue auxiliaire
ZF : Zero Flag - Indicateur zéro
SF : Sign Flag - Indicateur de signe
0110 ZF=0 (le résultat 1011 n'est pas nul)
IF : Interruption Flag - Indicateur d'interruption +0101 SF=1 (le signe du résultat est négatif)
DF : Direction Flag - Indicateur de direction -------- CF=0 (il n'y a pas de retenue)
1011 …
OF : Overflow Flag - Indicateur de dépassement
77 Jamal BAKKAS
L’assembleur 8086
Jamal BAKKAS
78 Jamal BAKKAS
Pourquoi faire de l'assembleur ?
Pourquoi faire de l'assembleur ?
Ecrire un compilateur
79 Jamal BAKKAS
Rappel: systèmes de numération
Notation des entiers
Positifs et négatifs
Les entiers positifs sont stockés en binaire par conversion simple
Les entiers négatifs sont stockés en binaire par complément à deux
Cette méthode permet des opérations arithmétiques correctes
Complément à deux
Le complément à deux se calcule en deux étapes
On inverse d'abord les bits (complément à un)
On ajoute 1 au résultat
Exemple
13 se note 0000 1101 sur 8 bits
-13 se note donc 1111 0011 sur 8 bits
L'opposé d'un entier est son complément à deux.
Il est possible de manipuler les entiers dans des différentes bases:
Binaire : 1010b
Octal : 12o
Décimal: 592 ou 592d
Hexadécimal : 0Ah
80 Jamal BAKKAS
Jeu d’instructions
Les instructions permettent de spécifier les opérations à
effectuer
Elles sont données au processeur sous la forme d'une chaine
binaire ayant la forme suivante:
83 Jamal BAKKAS
Modes d’adressage
Adressage par registre
Concerne tout transfert ou toute opération, entre deux registres de
même taille, ou sur un registre.
Pratique si l’opérande est utilisé constamment par une suite
d’instructions (compteur d’une boucle par exemple)
L’instruction contient le numéro de registre
Exemple :
MOV SI , CX ;CX vers SI (16 bits)
ADD DH,AL ; Transfert de DH+AL vers DH (8 bits)
84 Jamal BAKKAS
Modes d’adressage
Adressage directe:
l'opérande est une case mémoire dont l’adresse est donnée
directement par l’instruction
Adresse connue et fixe au moment de la compilation
Utilisation : variables globales et variables statiques
Exemple:
MOV AL,[10h] ; <=> mov al,[ds:10h]
MOV AX,[ES:10h] ;
85 Jamal BAKKAS
Modes d’adressage
Adressage basé (ou indirect par registre):
L'opérande est une case mémoire dont l'adresse est donnée par
BX(avec DS par défaut) ou BP(avec SS par défaut)
Exemple:
MOV AH,[BX] ; <=> mov ah,[ds:bx]
MOV AL,[BP] ; <=> mov al,[ss:bp]
MOV AH,[BX+123h] ; <=> mov ah,[ds:bx+123h] Adressage basé avec déplacement
86 Jamal BAKKAS
Modes d’adressage
Adressage indexé:
L’adressage se fait à partir d’un registre (SI ou DI) auquel peut être
ajouté une constante de déplacement
Utilisation : manipulation des tableaux par exemple
Exemples:
MOV AX,[SI]
; Charger AX par le contenu de la mémoire d'adresse DS:SI
MOV AX,[SI+500] ;Adressage indexé avec déplacement
; Charger AX par la mémoire d'adresse DS:SI+500
MOV AX,[DI-8]
; Charger AX par la mémoire d'adresse DS:DI-8
MOV AX,[ES:SI+4]
; Charger AX par la mémoire d'adresse ES:SI+4
87 Jamal BAKKAS
Modes d’adressage
Adressage Basé Indexé:
L'adresse effective de l'opérande est calculée au moment de l'exécution
de l'instruction par addition du contenu du registre de base au
déplacement:
Le calcul de l'adresse effective se fait dynamiquement au moment de
l'exécution de l’instruction.
Exemples:
MOV AX,[BX+SI]
;Adressage basé indexé avec déplacement
; AX est chargé par la mémoire d'adresse DS:BX+SI
MOV AX,[BX+DI+5] ;
; AX est chargé par la mémoire d'adresse DS:BX+DI+5
MOV AX,[BP+SI-8]
; AX est chargé par la mémoire d'adresse SS :BP+SI-8
MOV AX,[BP+DI]
; AX est chargé par la mémoire d'adresse SS:BP+DI
88 Jamal BAKKAS
Résumé: Exemples
adressage immédiat
Exemples: MOV AX, 0A1EBH ; AX:= valeur hexa A1EB
ADD CL, 25 ; CL:= CL + 25
OR AH,11000000 ; forcer les 2 bits de fort poids de AH à 1
adressage direct.
Exemples: MOV BX,Total
MOV DX,ES:Nom
adressage indirect (ou basé).
Exemples: MOV AX,[BX]
MOV AX,[BP]
adressage indexé.
Exemple: MOV AX,Tab[SI]
adressage indirect indexé (ou basé indexé).
Exemples: MOV AX,[BX][SI] ; relatif a DS
MOV AX,[BP][SI] ;Relatif a SS
adressage basé indexé avec déplacement.
Exemple: MOV AX,Compte[BX][SI]
89 Jamal BAKKAS
Structure d’un programme assembleur 8086
TITLE nom ; donner un nom au programme
PILE SEGMENT STACK ; déclaration d’un segment de pile dont le nom est pile
..........
PILE ENDS ; fin de la déclaration de la pile
DONNEE SEGMENT ; déclaration d’un segment de données qui va contenir les variables
...........
DONNEE ENDS ; fin de la déclaration de données
.................................
90 Jamal BAKKAS
Structure d’un programme en assembleur
DOSSEG : organisation de la mémoire. C'est la première
DOSSEG ligne de tout programme
.MODEL small .MODEL xxx : Modèle mémoire.
SMALL ou TINY, il n'y a qu'un segment, qui servira
.STACK 100h
à la fois pour les données et le programme.
.DATA MEDIUM permet l'utilisation de 64k de code et
jusqu'à 576k de données.
… COMPACT permet 64k de données pour 576k de
donnee1 DB 25 code;
.... LARGE et HUGE permettent de partager jusqu'à
640k entre le code et les données.
.CODE .STACK xxx : xxx est la taille de la pile en octet,
… Exemple 100h soit 256 éléments.
.... .DATA: Segment de données. Permet de déclarer les
données utilisé dans le programme : variables, tableaux,…
.... .CODE : Segment de code. Contient l'ensemble des
END instructions du programme
END : est l'instruction qui déclare la fin du programme.
91 Jamal BAKKAS
Les déclarations de variables
La directive DB
Réserve et initialise un octet avec un permettant d’accéder à cet octet .
Syntaxe:
Nom DB valeur ; si la valeur n’est pas connue elle remplacée par «?»
Exemples :
NB DB 36 ;NB référence une donnée codée sur un octet initialisée à 36
DEUX DB 43, 26 ;DEUX référence une donnée codée sur un octet initialisée à
43, l’octet suivant étant initialisé avec 26. tableau de 2 octets
LETTRE DB ’e’ ; LETTRE référence une donnée initialisée avec le code ASCII
du caractère ’e’ ;
CH DB ’hello world !’, 13, 10, ’$’ ;CH référence une chaîne de caractères
composée des caractères ’h’, ’e’, ’l’, ’l’, ’o’, ’ ’, ’w’, ’o’, ’r’, ’l’, ’d’, ’ ’, ’!’, et enfin du
caractère ’$’
TABLEAU DB 10 dup (0) ;TABLEAU référence un tableau de 10 octets dont
la valeur initiale des éléments est 0
92 Jamal BAKKAS
Les variables
La directive DW
Réserve et initialise un mot (16 bits) avec un nom permettant d’accéder à ce mot.
Syntaxe: Nom DW valeur
Exemples:
MOT DW 1559 ;MOT qui référence une donnée codée sur un mot et qui sera
initialisée avec la valeur 1559
MOT2 DW ((45 * 23) / 9 + 23) ;MOT2 qui référence une donnée codée sur un mot
et qui est initialisée avec la valeur 138 ;
TMOT DW 20 DUP (0) ;TMOT qui référence un tableau de 20 mots initialisés avec
la valeur 0
La directive DUP
DUP qui permet de déclarer un tableau de n cases, toutes initialisées à la même valeur.
Exemple :
tab DB 100 dup (15) ; 100 octets valant 15
zzz DW 10 dup (?) ; 10 mots de 16 bits non initialises
93 Jamal BAKKAS
Les variables
94 Jamal BAKKAS
Les constantes
La directive EQU :
Syntaxe:
nom EQU valeur
Exemple :
TROIS EQU 3
95 Jamal BAKKAS
Les opérations arithmétiques
L'opposé d'un nombre : NEG
L'instruction NEG sert à rendre un nombre positif en négatif
et inversement.
Il ne demande qu'un seul opérande : la destination.
NEG Destination
Exemple :
Si AX = 5,
NEG AX
Résultat AX = -5.
Si BX=-6
NEG BX
Résultats : BX = 6
96 Jamal BAKKAS
Les opérations arithmétiques
Addition : ADD :
Syntaxe :
ADD Destination, Source.
Exemple:
si AX = 4 et BX = 6 :
ADD AX, BX
Après cette opération : AX = 4+6 = 10 et BX = 6
Addition + retenue : ADC :
Syntaxe :
ADC Destination, Source.
Exemple:
si AX = 4 et BX = 6 :
ADC AX, BX ; AX=AX,BX +CF
Après cette opération : AX = 4+6 +CF (0 ou 1) et BX = 6
97 Jamal BAKKAS
Les opérations arithmétiques
Soustraction: SUB:
Syntaxe :
SUB Destination, Source.
Exemple:
si AX = 6 et BX = 4 :
SUB AX, BX
Après cette opération : AX = 6-4 = 10 et BX = 4
Soustraction - retenue : SBB :
Syntaxe :
SBB Destination, Source.
Exemple:
si AX = 6 et BX = 4 :
SBB AX, BX ; AX=AX-BX -CF
Après cette opération : AX = 6-4-CF (0 ou 1) et BX = 4
98 Jamal BAKKAS
Les opérations arithmétiques
Multiplication : MUL :
L'instruction MUL est utilisé pour les nombres non signés et
IMUL pour les signés.
Contrairement aux opérations précédentes, la multiplication
n'a besoin que d'une seule opérande : la source. La destination
et donc le nombre qui devra être multiplié se trouvera
toujours et obligatoirement dans AX.
La source est un registre.
MUL Source
Exemple:
si AX = 4 et BX = 6
MUL BX
Résultats : AX = 4*6 = 24 et BX = 6
99 Jamal BAKKAS
Les opérations arithmétiques
Multiplication : IMUL (Multiplication pour les nombres signés):
Syntaxe :
IMUL Source
Si la source est un octet alors elle sera multipliée par l'accumulateur AL le
résultat sur 16 bits sera stocké dans le registre AX .
Exemple :
Si AX = 32 et BX = 5 :
DIV BX
Résultats : AX = 6
et DX =2 (DX étant le reste)
Si l'opérande est un octet : alors on récupère le quotient dans le registre AL et le reste dans
le registre AH.
Si l'opérande est un mot : alors on récupère le quotient dans le registre AX et le reste dans le
registre DX
Application 1:
MOV AH,00h
MOV AL,33H
MOV DL,25H
DIV DL ; Cela implique que AH= et AL =
Application 2:
MOV AX,500H
MOV CX,200H
DIV CX ;Cela implique que AX= et AL =
Décrémentation : DEC
Syntaxe :
DEC Destination
Exemples d’incrémentation:
INC AX ; AX = AX + 1 (incrémentation sur 16 bits).
INC AL ; AL = AL +1 (incrémentation sur 8 bits).
INC [SI] ; [SI] = [SI] + 1 le contenu de la case mémoire pointé par SI
sera incrémenter
Syntaxe :
AND Destination, source
Exemples :
MOV AX , 503H ; AX = 0000 0101 0000 0011
AND AX , 0201H ; 0000 0101 0000 0011 ; AND 0000 0010 0000 0001 ; = 0000 0000 0000 0001
AND AX,BX ; AX = AX . BX (Et logique entre AX et BX)
AND AL,BH ; AL = AL . BH (ET logique sur 8 bits)
AND AL,[SI] ; AL = AL AND le contenu de la case mémoire ; pointé par SI
AND [DI],AL ; ET logique entre la case mémoire pointé par ; DI et AL , le résultat est mis dans la case ;
105 mémoire pointé par DI Jamal BAKKAS
Les opérations logiques
OU exclusif XOR : Elle permet de faire un OU exclusif logique entre la
destination et la source (octet ou un mot) le résultat est mis dans la
destination
Syntaxe :
XOR Destination, source
Exemples :
MOV AX , 503H ; AX = 0000 0101 0000 0011
XOR AX , 0201H ; 0000 0101 0000 0011 XOR 0000 0010 0000 0001 = 0000 0011 0000 0010
XOR AX,BX ; AX = AX + BX (OU exclusif entre AX et BX )
XOR AL,BH ; AL = AL + BH ( OU exclusif sur 8 bits )
XOR AL,[SI] ; AL = AL OU exclusif le contenu de la case ; Mémoire pointé par SI
XOR [DI],AL ; XOR logique entre la case mémoire pointé par ; DI et AL, le résultat est
mis dans la case ; mémoire pointé par DI
Syntaxe :
OR Destination, source
Exemples :
MOV AX , 503H ; AX = 0000 0101 0000 0011
OR AX , 0201H ; 0000 0101 0000 0011 OR 0000 0010 0000 0001 ; = 0000 01110000 0011
OR AX,BX ; AX = AX + BX ( OU logique entre AX et BX )
OR AL,BH ; AL = AL + BH ( OU logique sur 8 bits )
OR AL,[SI] ; AL = AL OU le contenu de la case mémoire ; pointé par SI
OR [DI],AL ; OR logique entre la case mémoire pointé par ; DI et AL, le résultat est mis dans la case ; mémoire
pointé par DI
Syntaxe:
SHL opérande1, n:
Exemple :
LEA (Load Effective Address): Elle transfert l'adresse offset (décalage) d'une
opérande mémoire dans un registre de 16 bits (pointeur ou index).
Exemple : LEA BX, TAB_VAL ;c'est équivalent à MOV BX, offset TAB_VAL
POPA :
Dépile tous les registres généraux et d’adressage dans
l'ordre inverse de PUSHA afin que chaque registre
retrouve sa valeur.
Comparaison : CMP
C’est l’instruction la plus utilisée pour positionner les
indicateurs avant d’effectuer une instruction de saut
conditionnel.
CMP est identique à l’instruction SUB, mais ne produit pas de
résultat. Il positionne seulement les flags
MOV BX,5
while: CMP BX,0
JLE Endwhile
DEC BX
JMP while
Endwhile:
} }
} }
mov DL,’B’
mov AH, 06h ; fonction no. 6
int 21h ; résultat dans AL
129 Jamal BAKKAS
Les entrées Sorties en assembleur
Affichage d’une chaine de caractères :
Pour l'écriture d'une chaîne de caractères , on doit avant tout la
déclarer dans la partie déclarative comme suit :
<Identificateur> DB "<le message>$"
Le $ indique la fin de la chaîne à afficher.
puis on met son offset dans DX : MOV DX, OFFSET <Identificateur>
Puis on utilise la fonction 09
mov DX, offset ch ; l’offset de ch est transfère dans DX
mov AH, 09h ; fonction no. 2
int 21h ; appel au DOS