Vous êtes sur la page 1sur 150

Architecture des Ordinateurs

Jamal BAKKAS

1 Jamal BAKKAS
Généralités
 L'informatique, contraction d'information et automatique, est la
science du traitement de l'information.

 Apparue au milieu du 20ème siècle, elle a connu une évolution


extrêmement rapide.
 A sa motivation initiale qui était de faciliter et d'accélérer le calcul,
se sont ajoutées de nombreuses fonctionnalités, comme:

 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 !

 1939 : Z2, une partie de la mécanique est remplacée par des


relais téléphoniques

 1941 : Z3, premier calculateur avec programme enregistré.


Mémoire : 64 nombres de 22 bits, puissance : 4 +/s ou 1 x
en 4s

 1945 : J. Von Neuman travaillant sur le projet ENIAC définit


ce que devrait être un ordinateur à programme enregistré :
architecture de Von Neuman
7 Jamal BAKKAS
Histoire
 L'ENIAC (Electronic Numerical Integrator Analyser and Computer), est le
premier ordinateur entièrement électronique.
 Il peut être reprogrammé pour résoudre, en principe, tous les problèmes calculatoires.
 18000 Tubes – 30 tonnes
 Multiplie 2 nombres de 10 chiffres en 3 millisecondes
 500 m2, 140 KW, 100 kHz, Câblage du programme

Changement d’une lampe


8 Jamal BAKKAS
Historique : quelques machines intermédiaires

 1949 : revue Popular Mechanics : « Alors que le calculateur ENIAC est


équipé de 18000 tubes à vide et pèse 30 tonnes, les futurs ordinateurs de
l’an 2000 ne devraient avoir que 1000 tubes à vide et ne peser que 1,5
tonnes. »

 1964 IBM lance la famille 360 des ordinateurs compatibles

 1980 IBM sort le PC (Personal Computer)

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

 des systèmes à microprocesseurs se caractérisent par le traitement programmé de


l’information.
 Un système à microprocesseur= Matériel (Harware)+ Logiciel (SoftWare)
 Hardware: correspond à l’aspect concret du système (mémoires, périphériques,…)
 Software: c’est l’ensemble des programmes qui commande le Matériel

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

 On appelle bus, en informatique, un ensemble de liaisons physiques (câbles,


pistes de circuits imprimés, etc.) pouvant être exploitées en commun par
plusieurs éléments matériels afin de communiquer.

 Le bus de données : c'est un ensemble de fils bidirectionnels qui transmettent les


données entre les éléments du système.
 Transmission des données à traiter par le microprocesseur.
 Transmission des données résultants de ces traitements
 Sa taille n correspond à la capacité de traitement du microprocesseur.
 Le bus d'adresses : il permet l’adressage des éléments (memoires & peripheriques)
par le microprocesseur il est unidirectionnel.
 Si n est le nombre de fils du bus d’adresses, le processeur peut adresser jusqu’à 2 n
emplacements
 Le bus de commandes et de contrôle : c'est un bus qui permet de véhiculer des
signaux complémentaires identifiant le type d'action : lecture ou écriture, taille du
message, etc…

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é

appelé aussi puce électronique, est un composant


électronique reproduisant une, ou plusieurs,
fonction(s) électronique(s) plus ou moins
complexe(s), intégrant souvent plusieurs types de
composants électroniques de base dans un
volume réduit (sur une petite plaque), rendant le
circuit facile à mettre en œuvre.

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

 Semi – séquentiel : l’accès à la donnée se fait par la combinaison


de l’accès direct et séquentiel au même temps
 Exemple : Les disque magnétique:
 l’accès au piste est direct
 L’accès au secteur est séquentiel

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

 En général les mémoires dynamiques, qui offrent une plus


grande densité d'information et un coût par bit plus faible,
sont utilisées pour la mémoire centrale,

 alors que les mémoires statiques, plus rapides, sont


utilisées lorsque le facteur vitesse est critique,
notamment pour des mémoires de petite taille comme
les caches et les registres.

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

 Disque dur, Disque ZIP, Jazz, Disquettes


 Technologie Magnétique
 Taille ~ 1 Tbyte (disque dur)
 1.4 Mbyte (disquette)
 Lecture / Écriture

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

 Les registres sont des cellules mémoire interne au


CPU. Ils sont peu nombreux de petites tailles
(quelques octets) mais il ont un accès très rapide.

 Ils servent à stocker:


 Les opérandes,
 Les résultats intermédiaires d'opérations
(arithmétiques ou logiques)
 Les informations de contrôle du processeur

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

 Elle permet de séquencer le déroulement des instructions.


Elle effectue:
 la recherche en mémoire de l'instruction,
 le décodage pour enfin réaliser son
 exécution
 puis effectue la préparation de l'instruction suivante.

 Pour cela, elle est composée par :


 le compteur de programme
 le registre d'instruction
 le décodeur d'instruction
 Bloc logique de commande (ou séquenceur)

39 Jamal BAKKAS
L’unité de traitement

 Elle regroupe les circuits qui assurent les


traitements nécessaires à l'exécution des
instructions :
 L’Unité Arithmétique et Logique (UAL)
 Le registre d'état
 L'accumulateur
 Les registres généraux

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.

 Code adresse : contient les adresses en mémoire des opérandes


qui participent dans une opération, dans certains cas elle contient
l’opérande même. Il existe plusieurs modes d’adressages pour
accéder aux données.

Code opération Adresses des opérandes

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

Code opération Adresses des operandes

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 :

ADD Adresse de A Adresse de B

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…

 Arithmétiques : Addition, Soustraction, Multiplication, ….

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.

 Attention!! : Le contenu de l’accumulateur est écraser après chaque opération


pour contenir le résultat
 Les registres généraux :
 Les registres généraux servent à stocker les données allant être utilisées (ce qui
permet d'économiser des aller-retours avec la mémoire).
50 Jamal BAKKAS
L’unité de traitement
 Le registre d’état :
 Le registre d’état ( State register ou Program Status Word (PSW) ses
bits servent d’indicateur ( drapeau ou flag) sur l’état du processeur.
 Chacun de ces bits est un indicateur dont l'état dépend du résultat
de la dernière opération effectuée par l’UAL.
 Les états sont les suivants :
 Le bit Z (Zéro): positionné à 1 si le résultat est nul, sinon il est mis à 0
 Le bit C (Carry): positionné à 1 si retenue, à 0 sinon
 Le bit S ( Sign): positionné à 0 si résultat opération positif, à1 sinon
 Le bit V ( Overflow) : bit indiquant un débordement
 Le bit P (Parity): bit de parité
 La plupart des microprocesseurs ne se servent pas de la
totalité des indicateurs.

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

DX DH DL Données (E/S) DS segment de données


Source index SI SS segment de pile

Destination index DI ES segment


supplémentaire
Base pointer BP IP
Stack pointer SP
bus externe A/D
Registres généraux multiplexé
BUS MULTIPLIXE GENERATION D’ADRESSES +
& bus de
CONTRÔLE DE BUS contrôle

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.

 l'UIB (Bus Interface Unit, unité d'interface de bus) :


son travail principal est de de chercher les instructions en mémoire et
de les mettre dans la file d'attente.

pendant que l'EU ne demande pas de transfert avec la mémoire , le BIU


occupe ce temps libre du bus pour amener les instructions dans la file
d'attente. Quand la file d'attente est vide , l'EU attend que le BIU y place
une instruction.

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 d’adresse ( ou d’offset ou pointeur) : Ils contiennent une valeur


représentant un offset à combiner avec une adresse de segment

 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),
 solutionutilisation 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

 Environnements embarqués, microcontrolleurs

 Systèmes temps-réels durs

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:

Code opération operandes

 Le jeu d'instructions est l'ensemble des instructions qu'un


processeur d'ordinateur peut exécuter.
 Si le code opération est sur n bits ce processeur dispose d’un
jeu d’instructions de 2n instructions
 Ainsi un octet permet de distinguer au maximum 256
instructions différentes.
81 J.BAKKAS
Jeu d’instructions
 Les instructions peuvent avoir 0, 1, ou 2 opérandes:
 nom_instruction
 nom_instruction opérande 1
 nom_instruction opérande 1 , opérande 2
 Exemple:
 Instructions sans opérande: NOP, STI, CLI, PUSHF, CBW...;
 Instructions avec une seule opérande: INC, DEC, NEG,....;
 Instructions avec deux opérandes: CMP, ADD, MOV, XCHG, AND
......
 Les opérandes à manipuler peuvent être dans des registres, dans la
mémoire, dans la pile ou spécifiées immédiatement dans l’instruction
 La technique associée à la localisation de ces opérandes s’appelle
l’adressage ou le mode d’adressage.
82 Jamal BAKKAS
Modes d’adressage
 Adressage immédiat
 L’opérande est contenu dans le champ adresse de l’instruction
 Il est appelé immédiat, car il est automatiquement chargé de la mémoire
lors du chargement de l’instruction
 Il est immédiatement disponible à l’utilisation
 Exemple:
 MOV AX, 10h
 Avantage : il ne nécessite pas un accès supplémentaire à la mémoire
pour récupérer l’opérande
 Inconvénient : limité par le nombre de bits réservés au champ de
l’opérande
 Utilisation: utilisé principalement pour définir les constantes

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

LECODE SEGMENT ; déclaration du segment de code qui va contenir le code

.................................

LECODE ENDS ; fin de la déclaration du code


END ; fin du point d’entrée du code

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

 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

94 Jamal BAKKAS
Les constantes
 La directive EQU :

 Syntaxe:
nom EQU valeur
 Exemple :
 TROIS EQU 3

 définit une constante qui s’appelle TROIS. dont la valeur est 3.


 Une fois cette déclaration effectuée, toute occurrence de
l’identificateur TROIS sera remplacée par la valeur indiquée.

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):

 IMUL effectue une multiplication signée de l ‘opérande source


avec l'accumulateur :

 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 .

 Si la source est un mot alors elle sera multiplié avec l'accumulateur AX


le résultat de 32 bits sera stocké dans la paire des registres AX et DX

100 Jamal BAKKAS


Les opérations arithmétiques
 Division : DIV
Pareil que MUL : Cette instruction divise la valeur de AX par la source.
 Syntaxe :
DIV Source

 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

101 Jamal BAKKAS


Les opérations arithmétiques
 Division : DIV

 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 =

102 Jamal BAKKAS


Les opérations arithmétiques
 Division : IDIV (Division des nombres signés )
 Syntaxe :
IDIV Source
 Elle effectue une division signée de l'accumulateur par l'opérande source :
 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
 IDIV DL ; Cela implique que AH= et AL =
 Application 2
 MOV AX,-500H
 MOV CX,200H
 IDIV CX ; Cela implique que AX= et AL =

103 Jamal BAKKAS


Les opérations arithmétiques
 Incrémentation : INC
 Syntaxe :
INC Destination
 Elle permet d'incrémenter le contenu de la destination

 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

104 Jamal BAKKAS


Les opérations logiques
 Négation NOT : Elle réalise la complémentation à 1 d'un nombre
 Syntaxe :
NOT Destination
 Exemple :
 MOV AX, 500 ; AX = 0000 0101 0000 0000
 NOT AX ; AX = 1111 1010 1111 1111

 Et logique AND : Elle permet de faire un ET logique entre la destination et la


source (octet ou un mot) le résultat est mis dans la destination

 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

106 Jamal BAKKAS


Les opérations logiques
 OU logique OR : Elle permet de faire un OU logique entre la destination et
la source (octet ou un mot) le résultat est mis dans la destination

 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

107 Jamal BAKKAS


Instructions de décalage
 Décalage à droite :SHR
Décale (Shift on right) les bits de l'opérande1 de n positions sur la
droite. Des zéros sont insérés à gauche.
 Syntaxe :
SHR opérande1, n
 Exemple :
mov ax, 12754 ;AX = 0011000111010010b
shr ax, 3 ;AX = 0000011000111010b "000" a été ajouté ,"010" a été coupé

 Cette méthode peut servir à diviser rapidement un nombre par une


puissance de 2.
 En effet, shr nombre, 4 équivaut à diviser nombre par 2^4, soit nombre
divisé 16. Attention cependant, ceci ne marche pas avec les nombres
négatifs.

108 Jamal BAKKAS


Instructions de décalage
 Décalage à gauche: SHL
Identique à SHR mais vers la gauche. Des zéros sont insérés à droite.

 Syntaxe:
SHL opérande1, n:
 Exemple :

mov ax, 12754 ;AX = 0011000111010010b


shl ax, 3 ;AX = 1000111010010000b "001" a été ajouté et "000" a été coupé

 Cette méthode peut servir à multiplier rapidement un nombre par une


puissance de 2.
 En effet, shl nombre, 4 équivaut à multiplier nombre par 2^4, soit
nombre*16.

109 Jamal BAKKAS


Les instructions de transfert
 Elles permettent de déplacer des données d’une source vers
une destination :
 registre vers mémoire ;

 registre vers registre ;

 mémoire vers registre.

 Remarque : le microprocesseur 8086 n’autorise pas les


transferts de mémoire vers mémoire (pour ce faire, il
faut passer par un registre intermédiaire).

110 Jamal BAKKAS


Les instructions de transfert
 MOV
Elle permet de transférer les données (un octet ou un mot)
d'un registre à un autre registre ou d'un registre à une case
mémoire,
 Syntaxe :
MOV destination, source
 Exemples :
 MOV AX, BX ; Transfert d'un registre de 16 bits vers un registre de 16 Bits
 MOV AH, CL ; Transfert d'un registre de 8 bits vers un registre de 8 bits
 MOV AX, Val1 ; Transfert du contenu d'une case mémoire 16 bits vers AX
 MOV Val2, AL ; Transfert du contenu du AL vers une case mémoire d'adresse
Val2
111 Jamal BAKKAS
Les instructions de transfert
 MOV
 Remarques :
 Pour transférer le contenu d'une case mémoire vers une autre
case mémoire, on doit passer par un registre :
 MOV AL,Val2
 MOV Val1, AL
 On n'a pas le droit aussi de transférer un registre segment
vers un autre registre segment sans passer par un autre
registre :
 MOV DS, ES
 On va passer comme la première instruction :
 MOV AX, ES
 MOV DS, AX
 Le CS n'est jamais utilisé comme registre destination.
112 Jamal BAKKAS
Les instructions de transfert
 L'instruction Offset retourne l'adresse mémoire de la variable qui la suit

 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

 LDS (Load data segment) : Cette instruction permet de charger le segment et


l'offset d'une adresse
 Exemple : LDS BX , tab_val ; charge l'offset de tab_val dans BX ;et le segment dans DS .

 XCHG (Echange de valeurs ) : L’instruction XCHG échange le contenu de deux


emplacements mémoire ou registres.
 Exemple:
 MOV AX ,20
 MOV DX ,10
 xchg ax, dx ;entraînera : AX contient la valeur 10 et DX la valeur 20.

113 Jamal BAKKAS


La Pile
 La pile est un espace temporaire de stockage des données.
 La zone mémoire de la pile est adressée par le segment SS.
 Le registre BP pointe sur le début de la pile - il est donc
toujours supérieur ou égal à SP, qui pointe vers le dernier
élément "empilé".
 Empilé signifie ajouter un élément dans la pile  SP est alors
décrémenté de 2 (16 bits word).
 Quand il est "dépilé" (retirer un élément de la pile)  la
donnée est retournée et SP est incrémenté de 2.
 Il faut faire attention à la gestion de la pile
 Le dépassement de taille de la pile mène généralement au
plantage.
114 Jamal BAKKAS
Les instructions de transfert
 PUSH :
permet d'empiler les registres du CPU sur le haut de la pile
 Syntaxe :
PUSH SOURCE
 Exemple :

115 Jamal BAKKAS


Les instructions de transfert
 POP :
permet de dépiler les registres du CPU sur le haut de la pile
 Syntaxe :
POP destination
 Exemple :

116 Jamal BAKKAS


Les instructions de transfert
 PUSHA :
Empile tous les registres généraux et d’adressage dans
l'ordre suivant :
AX, CX, DX, BX, SP, BP, SI, DI

 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.

117 Jamal BAKKAS


Instructions de contrôle
 Par défaut, exécution séquentielle des instructions
 Possibilité de sauter à d'autres endroits du programme
de 2 façons:
 Saut à une adresse du programme
 Saut conditionnel à une adresse du programme
 Pas de structures de contrôle plus évoluées

118 Jamal BAKKAS


Instructions de contrôle
 Saut inconditionnel : JMP
JMP label
 Exemple:
MOV AX, [1000h]
MOV BX, [1004h]
JMP calcul
suite:
MOV [BX],AX
..
calcul:
ADD AX, BX
JMP suite

119 Jamal BAKKAS


Instructions de contrôle
 Comparaison : TEST
 Cette instruction teste la valeur d’un ou plusieurs bits en
effectuant un ET LOGIQUE sur les opérandes. Le résultat ne
modifie pas les opérandes mais les indicateurs.
 Exemple :
 TEST AX,1 ;Effectue un ET LOGIQUE sur le premier bit de AX avec 1, si il est égal à
1, ZF passera à 1 et inversement (si 0 alors ZF=0).

 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

120 Jamal BAKKAS


Sauts conditionnels
 Saut conditionnel:
 Les instructions de saut testant un flag.
 JC / JNC Jump if Carry / not Carry
 JS / JNS Jump if Sign/ not Sign
 JO / JNO Jump if Overflow / not Overflow
 JP / JNP Jump if Parity / not Parity
 JZ / JNZ Jump if Zero / not Zero
 Les instructions de saut sur test arithmétique signé.
 JE / JNE Jump if Equal / if Not Equal
 JG Jump if Greater
 JGE Jump if Greater or Equal
 JL Jump if Less
 JLE Jump if Less or Equal
 Les instructions de saut sur test arithmétique non signé.
 JA Jump if Above
 JAE Jump if Above or Equal
 JB Jump if Below
 JBE Jump if Below or Equal

121 Jamal BAKKAS


JZ Saut si zéro. JNZ
JE Saut si égal. ZF = 1 JNE
JC Saut si Retenue (inférieur). JNC
JB Saut si inférieur. JNB
JNAE Saut si ni supérieur ni égal. CF = 1 JAE
JS Saut si signe négatif. SF = 1 JNS
JO Saut si débordement. OF = 1 JNO
JPE Saut si parité paire.
JP Saut si parité. PF = 1 JPO
JNZ Saut si pas zéro. JZ
JNE Saut si différent. ZF = 0 JE
JNC Saut si pas de retenue. JC
JNB Saut si pas inférieur. JB
JAE Saut si supérieur ou égal. CF = 0 JNAE
JNS Saut si aucun signe (positif). SF = 0 JS
JNO Saut si pas de débordement. OF = 0 JO
JPO Saut si parité impaire. JPE
JNP Saut si pas de parité. PF = 0 JP
122 Jamal BAKKAS
La boucle loop
 LOOP
 l’instruction LOOP nécessite l’utilisation implicite du registre CX.
MOV CX, une valeur
Boucle:
…… ; le corps de la boucle
LOOP Boucle
Cela signifie que le corps de la boucle est exécuté tant que la
valeur de CX n’est pas nulle. A chaque itération, CX est
décrémenté d’une unité.

Attention: si CX est nul au premier tour, alors il décrémenté et sa


valeur devient 65535, et on va attendre un bon bout de temps
pour arriver à la valeur nulle et sortir de la boucle

123 Jamal BAKKAS


Exemple
 Exemple 1 : CMP AX, 3
if (AX = 3) { JNE else ; si pas égal, on saute à else
MOV BX, 5 ; sinon on est dans le then
BX = 5 JMP endif ; on saute le then pour aller à la fin du if
}else{ else:
BX = DX MOV BX, DX
endif:
}
MOV AX,0 ; initialisation de AX et CX à 0
MOV CX,0 ; CX est le compteur de boucle
for:
 Exemple 2 : CMP CX, 5 ; compare CX à 5
JGE endfor ; si CX >= 5, on sort de la boucle
for (cx=0; cx<5; cx++){ ADD AX, CX ; fait le calcul
ax = ax + cx INC CX ; CX est incrémenté de 1
JMP for ; on reprend au début de la boucle
} endfor:
124 Jamal BAKKAS
bx = 5
while (bx >0)
bx = bx -1;

MOV BX,5
while: CMP BX,0
JLE Endwhile
DEC BX
JMP while
Endwhile:

125 Jamal BAKKAS


CMP n,1
JNE case2
............
switch (n) { JMP endswitch
case 1: ....; break; case2: CMP n,2
case 2: .....; break; JNE
default
default: .....;
..........
} JMP
endswitch
default: ...........
endswitch: ...........
126 Jamal BAKKAS
Écrire le code de l’instruction En assembleur
if (a>b) && (c <= d) if: cmp a, b
{ jng endif
................
} cmp c, d
jnle endif
..............
endif:

Exercice: coder en assembleur les instructions suivantes:


1. if (a >b) || (c > d)) 2. for (i=1; i < 10; i++)
{ {

} }

127 Jamal BAKKAS


Exercice : Écrire le code de l’instruction
if (a>b) && (c <= d)
{
................
}

Exercice: coder en assembleur les instructions suivantes:


1. if (a >b) || (c > d)) 2. for (i=1; i < 10; i++)
{ {

} }

128 Jamal BAKKAS


Les entrées Sorties en assembleur
 Lecture d’un caractère:
 appel de la fonction DOS 01 (Lecture avec echo) ou 08 (Lecture sans echo)
 Le caractère lu est dans AL
Exemple:
mov AH, 01h ; fonction no. 1 (avec écho)
int 21h ; résultat est mis dans AL
mov AH, 08h ; fonction no. 8 (sans écho)
int 21h ; résultat dans AL
Affichahe d’un caractère:
 Avant tout le caractère à afficher doit être met dans DL
 Puis on fait appel à la fonction DOS 02 ou bien 08
 Exemple:
mov DL,’A’
mov AH, 02h ; fonction no. 2
int 21h ; résultat est mis dans AL

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

130 Jamal BAKKAS


Les entrées Sorties en assembleur
 Lecture d’une chaine de caractères :
 On doit avant tout déclarer la chaîne comme suit :
<identificateur> DB <Taillemaximale>, 0

Puis on utilise les instructions suivantes :


MOV DX, OFFSET StrP
MOV AH,0AH
INT 21H

131 Jamal BAKKAS


Code Segment
Title Example Assume CS:Code,DS:Data
Pile Segment Stack Begin:
MOV AX, Data
DW 50 DUP (?) MOV DS, AX
Pile EndS MOV DX, OFFSET MSG
MOV AH,09H
Data Segment
INT 21H
MSG DB 'Input A : $ ' MOV DX, OFFSET NewLine
NewLine DB 10,13,'$' MOV AH,09H
INT 21H
Data EndS
MOV AX,4C00H
INT 21H
Code ENDS
END Begin

132 Jamal BAKKAS


Les entrées Sorties en assembleur
 Arrêt de programme: mov AX, 4C00h;
int 21h;
 Ces instructions ont pour effet de retourner au DOS

133 Jamal BAKKAS


134 Jamal BAKKAS
135 Jamal BAKKAS
136 Jamal BAKKAS
137 Jamal BAKKAS
138 Jamal BAKKAS
139 Jamal BAKKAS
140 Jamal BAKKAS
141 Jamal BAKKAS
142 Jamal BAKKAS
143 Jamal BAKKAS
144 Jamal BAKKAS
145 Jamal BAKKAS
146 Jamal BAKKAS
147 Jamal BAKKAS
148 Jamal BAKKAS
149 Jamal BAKKAS
 Segment et offset calcul !!?
 Utilisation d’un seul segment (code +pile,data)

150 Jamal BAKKAS