Cours-Architectures Des Processeurs-Mr Nizar TOUJANI
Cours-Architectures Des Processeurs-Mr Nizar TOUJANI
Cours-Architectures Des Processeurs-Mr Nizar TOUJANI
ARCHITECTURE de BASE
Modèle de Von Neumann
John Von Neumann est à l'origine d'un modèle de machine universelle de traitement programmé
de l’information (1946). Cette architecture sert de base à la plupart des systèmes à microprocesseur
actuel. Elle est composé des éléments suivants :
une unité centrale
une mémoire principale
des interfaces d’entrées/sorties
Les différents organes du système sont reliés par des voies de communication appelées bus.
Architecture et Microprocesseur 1
Architecture et Microprocesseur 2
L’unité centrale de traitement (CPU : Central Processing Unit) est constituée :
d’une unité arithmétique et logique : c’est l’organe de calcul du calculateur ;
de registres : zones de stockage des données de travail de l’UAL (opérandes, résultats
intermédiaires) ;
d’une unité de contrôle (CU: Control Unit) : elle envoie les ordres ou commandes à tous les
autres éléments du calculateur afin d’exécuter un programme.
un microprocesseur consiste en une unité centrale de traitement (UAL + registres + unité
de contrôle) entièrement contenue dans un seul circuit intégré.
L’unité de transfert est le support matériel de la circulation des données. Les échanges d’ordres et de
données dans le calculateur sont synchronisés par une horloge qui délivre des impulsions à des
intervalles de temps fixes.
Architecture et Microprocesseur 3
La mémoire principale
La mémoire peut être vue comme un ensemble de cellules ou cases contenant chacune une information
ou une instruction ou une donnée. Chaque case mémoire est repérée par un numéro d’ordre
unique : son adresse.
Architecture et Microprocesseur 4
Les Bus
Un bus est un ensemble de fils qui assure la transmission du même type d’information.
un bus de données (Data Bus) : bidirectionnel qui assure le transfert des informations entre le
microprocesseur et son environnement, et inversement. Son nombre de lignes est égale à la
capacité de traitement du microprocesseur.
un bus d'adresses (Adress Bus) : unidirectionnel qui permet la sélection des informations à
traiter dans un espace mémoire ou espace adressable qui peut avoir 2n emplacements, avec n
est le nombre de conducteurs du bus d'adresses.
un bus de commande (Control Bus) : constitué par quelques conducteurs qui assurent la
synchronisation des flux d'informations sur les bus des données et des adresses.
Architecture et Microprocesseur 5
Le microprocesseur
Un microprocesseur est chargé :
d’interpréter et d’exécuter les instructions d’un programme,
de lire ou de sauvegarder les résultats dans la mémoire,
de communiquer avec les unités d’échange.
Toutes les activités du microprocesseur sont cadencées par une horloge.
Architecture et Microprocesseur 6
Un microprocesseur exécute un programme. Le programme est une suite d’instructions stockées
dans la mémoire.
Rangement en mémoire
Pour exécuter les instructions dans l’ordre établi par le
programme, le microprocesseur doit savoir à chaque instant
l’adresse de la prochaine instruction à exécuter. Le
microprocesseur utilise un registre contenant cette information.
Ce registre est appelé pointeur d’instruction (IP : Instruction
Pointer) ou compteur d’instructions ou compteur ordinal.
Architecture et Microprocesseur 7
Exemple
Pour savoir quel type d’opération doit être exécuté (addition, soustraction, ...), le microprocesseur
lit le premier octet de l’instruction pointée par le pointeur d’instruction (code opératoire) et le range
dans un registre appelé registre d’instruction. Le code opératoire est décodé par des circuits de
décodage contenus dans le microprocesseur. Des signaux de commande pour l’UAL sont produits
en fonction de l’opération demandée qui est alors exécutée.
Architecture et Microprocesseur 8
Remarque : pour exécuter une instruction, l’UAL utilise des registres de travail, exemple
l’accumulateur, registre temporaire recevant des données intermédiaires.
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémenté de façon à pointer
vers l’instruction suivante :
Architecture et Microprocesseur 9
CHAPITRE II
LES MEMOIRES
Introduction
Le but de ce chapitre est de :
présenter les mémoires à semi-conducteur, en particulier les mémoires mortes, de façon à
comprendre leur fonctionnement et à les utiliser pour la réalisation de fonctions logiques.
constituer des blocs mémoires à partir des blocs mémoires élémentaires,
traiter le problème de décodage d’adresse dans les systèmes à microprocesseurs.
Architecture et Microprocesseur 1
Organisation de la mémoire
2. Bus d’adresse
Une mémoire contient plusieurs cases. Pour identifier chaque case, on lui attribue un numéro
appelé adresse. Cette adresse s’obtient par la combinaison binaire d’un ensemble de fils appelé
bus d’adresse.
Architecture et Microprocesseur 2
Lorsque l’on a une mémoire de n bits d’adresse :
n
sa capacité est C=2 cases
n
ses cases sont numérotées de 0 à 2 -1
son bus d’adresse est noté An-1…….A0
10
Lorsque C vaut 1024 cases soit 2 cases une mémoire de 1 kilo cases notée 1Kcases.
20
Lorsque C vaut 1024 Kilo cases 1024*1024 cases soit 2 cases une mémoire de 1 Méga cases
notée 1Mcases.
3. Bus de donnée
Pour mettre le contenu d’une case mémoire en relation avec l’extérieur, la mémoire dispose d’un
ensemble de fils appelé bus de donnée.
Architecture et Microprocesseur 3
Fonctionnement d’une mémoire
Architecture et Microprocesseur 4
2. Notion de lecture d’une mémoire
Lire une mémoire consiste à transférer sur son bus de donnée externe le contenu d’une case
mémoire dont le numéro est placé sur le bus d’adresse.
La mémoire dispose d’une entrée notée OE : Output Enable (autorisation de sortie des données).
Cette entrée permet de donner l’ordre de lecture.
Architecture et Microprocesseur 5
3. Notion d’écriture mémoire
Ecrire dans une mémoire, on dit aussi programmer une mémoire, consiste à transférer la donnée
présente sur le bus de données dans le contenu de la case mémoire dont le numéro est présenté sur
le bus d’adresse.
La mémoire dispose d’une entrée notée WR par laquelle on donne l’ordre d’écriture.
Si WR=0 alors l’écriture est possible si bien sur la mémoire est sélectionnée (CS=0).
Si WR=1 alors il n’y a pas d’écriture.
Architecture et Microprocesseur 6
Architecture et Microprocesseur 7
Architecture et Microprocesseur 8
Architecture et Microprocesseur 9
Types de mémoire à semi-conducteur
Architecture et Microprocesseur 10
Programmer une mémoire morte consiste à modifier son contenu (c’est une opération d’écriture).
Lorsqu’une mémoire n’est pas programmée, on dit qu’elle est vierge.
ROM (Read Only Memory) : elles sont programmables à la fabrication par le constructeur.
PROM (Programmable ROM) : elles sont programmables une seule fois par l’utilisateur.
EPROM (Erasable PROM) : elles sont programmables plusieurs fois et effaçables par
exposition aux ultraviolets à travers une fenêtre réservée à cet effet. L’effacement est global; il
consiste à remettre tous les bits de la mémoire dans leur état de virginité. La programmation
nécessite une tension élevée (~12,5V) par rapport à la tension d’alimentation.
Architecture et Microprocesseur 11
Flash EPROM (EPROM rapide en programmation) : elles sont programmables plusieurs fois et
effaçables électriquement. La différence avec les EPROM réside dans la séquence de
programmation et le mode d’effacement.
pour les EEPROM : leurs dénominations sont presque identiques à celle des EPROM, il suffit
de remplacer 27 par 28.
Architecture et Microprocesseur 12
Constitution de blocs mémoire :
Décodage d’adresse
Exemple : connexion de trois boitiers mémoire d’une capacité de 8 Ko chacun (13 lignes
d’adresses) sur un bus d’adresse de 16 bits.
Architecture et Microprocesseur 13
Dans un même boîtier, une case mémoire est désignée par les bits d’adresses A0 à A12 :
Pour atteindre la mémoire N°1 A13=1 et A14=A15 =0 la plage d’adresses occupée par cette
mémoire est donc :
Pour la mémoire N°2 A13= 0, A14= 1 et A15= 0 la plage d’adresses occupée cette mémoire :
Pour la mémoire N°3 A13= 0, A14= 0 et A15= 1 la plage d’adresses occupée cette mémoire :
Architecture et Microprocesseur 14
Les trois bits A13, A14 et A15 fournissent en fait 8 combinaisons, d’où la possibilité de connecter
jusqu’à 8 boîtiers mémoire de 8 Ko sur le bus. La mémoire totale implantée devient donc de 8 × 8 =
64 Ko : valeur maximale possible avec 16 bits d’adresses.
Pour cela, il faut utiliser un circuit de décodage d’adresses : un décodeur 3 vers 8.
Architecture et Microprocesseur 15
Table de vérité du décodeur d’adresses :
Le mapping de la mémoire :
Architecture et Microprocesseur 16
Hiérarchie mémoire
L’ordinateur contient différents niveaux de mémoire, organisés selon une hiérarchie mémoire.
Mémoires de stockage :
Mémoires internes : mémoires volatiles mémoires permanentes
Architecture et Microprocesseur 17
Mémoire morte non
contient les informations volatile (lecture): contient
les plus récemment accédées par l’amorce (boot) de
le processeur l’ordinateur
Architecture et Microprocesseur 18
La mémoire cache est une mémoire intermédiaire placée entre le processeur et la mémoire centrale
dont le temps d'accès est de 4 à 20 fois inférieur à celui de la mémoire centrale. Elle comporte un
nombre fini d’entrées.
Architecture et Microprocesseur 19
1. Principe de localité
Architecture et Microprocesseur 20
2. Le cache en lecture
Architecture et Microprocesseur 24
Si (A) présente Alors Modifier (A) dans le cache
Modifier (A) en mémoire principale
Sinon Modifier (A) en mémoire principale
FinSi
Architecture et Microprocesseur 25
Si (A) présente Alors Modifier (A) dans le cache
Modifier (A) en mémoire principale
Sinon Modifier (A) en mémoire principale
FinSi
Architecture et Microprocesseur 26
CHAPITRE III
Architecture et Microprocesseur 1
Schéma fonctionnel du 8086
Architecture et Microprocesseur 2
Description et utilisation des signaux du 8086
RESET : entrée de remise à zéro du microprocesseur. Lorsque cette entrée est mise à l’état haut
pendant au moins 4 périodes d’horloge, le microprocesseur est réinitialisé : il va exécuter
l’instruction se trouvant à l’adresse FFFF0H (adresse de bootstrap). Le signal de RESET est fourni
par le générateur d’horloge.
Architecture et Microprocesseur 3
HOLD et HLDA : signaux de demande d’accord d’accès direct à la mémoire (DMA).
A16/S3 à A19/S6 : 4 bits de poids fort du bus d’adresses, multiplexés avec 4 bits d’état.
AD0 à AD15 : 16 bits de poids faible du bus d’adresses, multiplexés avec 16 bits de données. Le
bus A/D est multiplexé (multiplexage temporel) d’où la nécessité d’un démultiplexage pour
obtenir séparément les bus d’adresses et de données :
o 16 bits de données (microprocesseur 16 bits) ;
o 20 bits d’adresses, d’où 220 = 1 Mo d’espace mémoire adressable par le 8086.
Architecture et Microprocesseur 4
MN/MX : entrée de choix du mode de fonctionnement du microprocesseur :
o mode minimum (MN/MX = 1) : le 8086 fonctionne de manière autonome, il génère lui-
même le bus de commande (RD, WR, ...) ;
o mode maximum (MN/MX = 0) : ces signaux de commande sont produits par un contrôleur
de bus, le 8288. Ce mode permet de réaliser des systèmes multiprocesseurs.
Architecture et Microprocesseur 5
Circuit de démultiplexage A/D
o si ALE = 1, le verrou est transparent (Q = D) ;
o si ALE = 0, mémorisation de la dernière valeur de
D sur les sorties Q;
o les signaux de lecture (RD) ou d’écriture (WR) ne
sont générés par le microprocesseur que lorsque les
données sont présentes sur le bus A/D.
Architecture et Microprocesseur 6
RD : signal de lecture d’une donnée.
DEN : (Data Enable) indique que des données sont en train de circuler sur le bus A/D
(équivalent de ALE pour les données).
Architecture et Microprocesseur 7
Les signaux DEN et DT/R sont utilisés pour la
commande de tampons de bus (buffers) permettant
d’amplifier le courant fourni par le microprocesseur
sur le bus de données.
Exemples de tampons de bus : circuits transmetteurs
bidirectionnels 8286 ou 74245.
Architecture et Microprocesseur 8
Ces deux banques sont sélectionnées par :
o A0 pour la banque paire qui contient les octets de poids faible ;
o BHE pour la banque impaire qui contient les octets de poids fort.
Seuls les bits A1 à A19 servent à désigner une case mémoire dans chaque banque de 512 Ko. Le
microprocesseur peut ainsi lire et écrire des données sur 8 bits ou sur 16 bits :
Remarque : le 8086 ne peut lire une donnée sur 16 bits en une seule fois, uniquement si l’octet de
poids fort de cette donnée est rangé à une adresse impaire et l’octet de poids faible à une adresse
paire (alignement sur les adresses paires), sinon la lecture de cette donnée doit se faire en deux
opérations successives, d’où une augmentation du temps d’exécution du transfert dû à un mauvais
alignement des données.
Architecture et Microprocesseur 9
Réalisation des deux banques avec plusieurs boîtiers mémoire :
Architecture et Microprocesseur 10
Création du bus système du 8086 :
Architecture et Microprocesseur 11
Organisation interne du 8086
Le 8086 est constitué de deux unités
fonctionnant en parallèle :
o l’unité d’exécution (EU : Execution Unit) ;
o l’unité d’interface de bus (BIU : Bus
Interface Unit).
Ils peuvent être également considérés comme 8 registres sur 8 bits. Ils servent à contenir
temporairement des données. Ce sont des registres généraux mais ils peuvent être utilisés pour des
opérations particulières.
Exemple : AX = accumulateur, CX = compteur.
Architecture et Microprocesseur 13
Index :
o SI : Source Index ;
o DI : Destination Index.
Ils sont utilisés pour les transferts de chaînes d’octets entre deux zones mémoire.
Les pointeurs et les index contiennent des adresses de cases mémoire.
Architecture et Microprocesseur 14
Registres de segments : 4 registres sur 16 bits.
o CS (Code Segment) : registre de segment de code ;
o DS (Data Segment) : registre de segment de données ;
o SS (Stack Segment) : registre de segment de pile ;
o ES (Extra Segment) : registre de segment supplémentaire pour les données ;
Les registres de segments, associés aux pointeurs et aux index, permettent au microprocesseur 8086
d’adresser l’ensemble de la mémoire.
Architecture et Microprocesseur 15
Gestion de la mémoire par le 8086
L’espace mémoire adressable par le 8086 est de 220 = 1 Mo (20 bits d’adresses). Cet espace est
divisé en segments. Un segment est une zone mémoire de 64 Ko définie par son adresse de départ
qui doit être un multiple de 16. Dans une telle adresse, les 4 bits de poids faible sont à zéro. On peut
donc représenter l’adresse d’un segment avec seulement ses 16 bits de poids fort, les 4 bits de poids
faible étant implicitement à 0.
Architecture et Microprocesseur 16
La donnée d’un couple (segment, offset) définit une adresse logique, notée sous la forme
segment : offset.
L’adresse d’une case mémoire donnée sous la forme d’une quantité sur 20 bits est appelée adresse
physique car elle correspond à la valeur envoyée réellement sur le bus d’adresses A0 - A19.
Correspondance entre adresse logique et adresse physique :
Architecture et Microprocesseur 18
Mémoire accessible par le 8086 à un instant donné :
Remarque : les segments ne sont pas nécessairement distincts les uns des autres, ils peuvent se
chevaucher ou se recouvrir complètement.
Architecture et Microprocesseur 19
Le nombre de segments utilisé définit le modèle mémoire du programme.
Contenu des registres après un RESET du microprocesseur :
IP = 0000H
CS = FFFFH
DS = 0000H
ES = 0000H
SS = 0000H
Puisque CS contient la valeur FFFFH et IP la valeur 0000H, la 1ère instruction exécutée par le 8086 se
trouve donc à l’adresse logique FFFFH : 0000H, correspondant à l’adresse physique FFFF0H
(bootstrap). Cette instruction est généralement un saut vers le programme principal qui initialise
ensuite les autres registres de segment.
Architecture et Microprocesseur 20
CHAPITRE IV
La PROGRAMMATION en ASSEMBLEUR du
MICROPROCESSEUR 8086
Généralités
Chaque microprocesseur reconnait un ensemble d’instructions appelé jeu d’instructions
(Instruction Set) fixé par le constructeur.
Pour les microprocesseurs classiques CISC (Complex Instruction Set Computer), le nombre
d’instructions reconnues varie entre 75 et 150.
Pour les microprocesseurs RISC (Reduced Instruction Set Computer), le nombre d’instructions
est très réduit (entre 10 et 30 instructions), permettant d’améliorer le temps d’exécution des
programmes.
Une instruction est définie par son code opératoire, valeur numérique binaire difficile à manipuler
par l’être humain. On utilise donc une notation symbolique pour représenter les instructions : les
mnémoniques.
Architecture et Microprocesseur 1
Les instructions peuvent être classées en groupes :
o instructions de transfert de données ;
o instructions arithmétiques ;
o instructions logiques ;
o instructions de branchement ...
Architecture et Microprocesseur 2
Les instructions de transfert
Elles permettent de déplacer des données d’une source vers une destination :
o registre vers mémoire ;
o registre vers registre ;
o 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.
Il existe différentes façons de spécifier l’adresse d’une case mémoire dans une instruction : ce sont
les modes d’adressage.
Architecture et Microprocesseur 3
Exemples de modes d’adressage simples :
o mov ax,bx : charge le contenu du registre BX dans le registre AX. Dans ce cas, le transfert se fait de
registre à registre : adressage par registre.
o mov al,12H : charge le registre AL avec la valeur 12H. La donnée est fournie immédiatement avec
l’instruction : adressage immédiat.
Architecture et Microprocesseur 4
On peut changer le segment lors d’un
adressage direct en ajoutant un préfixe de
segment.
Exemple : mov bl,es :[1200H]
On parle alors de forçage de segment.
Architecture et Microprocesseur 5
Modes d’adressage évolués
Adressage basé : l’offset est contenu dans un registre de base BX ou BP (pointeur de base pile).
Exemples :
o mov al,[bx] : transfère la donnée dont l’offset est contenu dans le registre de base BX vers le
registre AL. Le segment associé par défaut au registre BX est le segment de données : on dit que
l’adressage est basé sur Data Segment;
o mov al,[bp] : le segment par défaut associé au registre de base BP est le segment de pile. Dans ce
cas, l’adressage est basé sur Stack Segment.
Architecture et Microprocesseur 6
Adressage indexé : semblable à l’adressage basé, sauf que l’offset est contenu dans un registre
d’index SI ou DI, associés par défaut au segment de données.
Exemples :
o mov al,[si] : charge le registre AL avec le contenu de la case mémoire dont l’offset est contenu
dans SI.
o mov [di],bx : charge les cases mémoire d’offset DI et DI + 1 avec le contenu du registre BX.
Remarque : une valeur constante peut éventuellement être ajoutée aux registres de base ou d’index
pour obtenir l’offset.
Exemple :
mov [si+100H],ax qui peut aussi s’écrire mov [si][100H],ax
ou encore mov 100H[si],ax
Architecture et Microprocesseur 7
Exemple :
mov si,0
mov word ptr table[si],1234H
mov si,2
mov word ptr table[si],5678H
Dans cet exemple, table représente l’offset du premier élément
du tableau et le registre SI joue le rôle d’indice de tableau.
Adressage basé et indexé : l’offset est obtenu en faisant la somme d’un registre de base, d’un
registre d’index et d’une valeur constante.
Exemple : mov ah,[bx+si+100H]
Ce mode d’adressage permet l’adressage de structures de données complexes : matrices,
enregistrements, ...
Exemple : mov bx,10 mov si,15 mov byte ptr matrice[bx][si],12H
Dans cet exemple, BX et SI jouent respectivement le rôle d’indices de ligne et de colonne dans la
matrice.
Architecture et Microprocesseur 8
Les Instructions Arithmétiques
o add ah,[bx] : ajoute le contenu de la case mémoire pointée par BX à l’accumulateur AH (adressage
basé).
o add byte ptr [1200H],05H : ajoute la valeur 05H au contenu de la case mémoire d’offset 1200H
(adressage immédiat).
Architecture et Microprocesseur 9
Soustraction : SUB opérande1,opérande2
L’opération effectuée est : opérande1 ← opérande1 − opérande2.
Architecture et Microprocesseur 10
Division : DIV opérande, où opérande est un registre ou une case mémoire.
Cette instruction effectue la division du contenu de AX par un opérande sur 1 octet ou le contenu
de (DX,AX) par un opérande sur 2 octets.
Résultat : si l’opérande est sur 1 octet, alors AL = quotient et AH = reste ;
si l’opérande est sur 2 octets, alors AX = quotient et DX = reste.
Exemples :
o mov ax,35
mov bl,10 AL=3 (quotient) et AH=5 (reste)
div bl
o mov dx,0
mov ax,1234 AX=123 (quotient) et DX=4 (reste)
mov bx,10
div bx
Architecture et Microprocesseur 11
Les instructions logiques
Ce sont des instructions qui permettent de manipuler des données au niveau des bits. Les
opérations logiques de base sont :
ET;
OU;
OU exclusif ;
complément à 1;
complément à 2;
décalages et rotations.
Les différents modes d’adressage sont disponibles.
Architecture et Microprocesseur 12
Application : masquage de bits pour mettre à « 0 » certains bits dans un mot.
Exemple : masquage des bits 0, 1, 6 et 7 dans un octet :
OU logique : OR opérande1,opérande2
L’opération effectuée est : opérande1 ← opérande1 OU opérande2.
Application : mise à 1 d’un ou plusieurs bits dans un mot.
Exemple : dans le mot 10110001, on veut mettre à « 1 » les bits 1 et 3 sans modifier les autres bits.
Architecture et Microprocesseur 13
Complément à 1 : NOT opérande
L’opération effectuée est :
Exemple :
Architecture et Microprocesseur 14
Instructions de décalages et de rotations : ces instructions déplacent d’un certain nombre de
positions les bits d’un mot vers la gauche ou vers la droite. Dans les décalages, les bits qui sont
déplacés sont remplacés par des zéros. Il y a les décalages logiques (opérations non signées) et les
décalages arithmétiques (opérations signées).
Dans les rotations, les bits déplacés dans un sens sont réinjectés de l’autre coté du mot.
entrée d’un 0 à la place du bit de poids fort ; le bit sortant passe à travers l’indicateur de retenue
CF.
Architecture et Microprocesseur 15
Remarque : si le nombre de bits à décaler est supérieur à 1, ce nombre doit être placé dans le
registre CL ou CX.
Exemple : décalage de AL de trois positions vers la droite :
entrée d’un 0 à la place du bit de poids faible; le bit sortant passe à travers l’indicateur de
retenue CF.
Même remarque que précédemment si le nombre de positions à décaler est supérieur à 1.
Architecture et Microprocesseur 16
Décalage arithmétique vers la droite : SAR opérande,n
Ce décalage conserve le bit de signe bien que celui-ci soit décalé.
Exemple :
Architecture et Microprocesseur 17
o Test de l’état d’un bit dans un mot
Exemple : on veut déterminer l’état du bit 5 de AL :
avec un décalage de 6 positions vers la droite ou 3 positions vers la gauche, le bit 5 de AL est
transféré dans l’indicateur de retenue CF. Il suffit donc de tester cet indicateur.
Architecture et Microprocesseur 18
Exemple :
réinjection du bit sortant qui est
copié dans l’indicateur de retenue
CF.
Rotation à droite avec passage par l’indicateur de retenue (Rotate Right through Carry) :
RCR opérande,n
Cette instruction décale l’opérande de n positions vers la droite en passant par l’indicateur de
retenue CF.
Architecture et Microprocesseur 19
Exemple :
le bit sortant par la droite est
copié dans l’indicateur de
retenue CF et la valeur
précédente de CF est réinjectée
par la gauche.
Rotation à gauche avec passage par l’indicateur de retenue (Rotate Left through Carry) :
RCL opérande,n
Cette instruction décale l’opérande de n positions vers la gauche en passant par l’indicateur de
retenue CF.
Exemple :
le bit sortant par la gauche
est copié dans l’indicateur de
retenue CF et la valeur
précédente de CF est réinjectée
par la droite.
Architecture et Microprocesseur 20
Les instructions de branchement
Les instructions de branchement ou saut permettent de modifier l’ordre d’exécution des
instructions du programme en fonction de certaines conditions. Il existe 3 types de saut :
saut inconditionnel ;
sauts conditionnels ;
appel de sous-programmes.
Architecture et Microprocesseur 21
Remarque : l’instruction JMP ajoute au registre IP (pointeur d’instruction) le nombre d’octets
(distance) qui sépare l’instruction de saut de sa destination. Pour un saut en arrière, la distance est
négative (codée en complément à 2).
Architecture et Microprocesseur 22
Remarque : les indicateurs sont positionnés en fonction du résultat de la dernière opération.
Exemple :
Remarque : il existe un autre type de saut conditionnel, les sauts arithmétiques. Ils suivent en
général l’instruction de comparaison : CMP opérande1,opérande2
Architecture et Microprocesseur 23
Exemple d’application des instructions de sauts conditionnels : on veut additionner deux nombres
signés N1 et N2 se trouvant respectivement aux offsets 1100H et 1101H. Le résultat est rangé à
l’offset 1102H s’il est positif, à l’offset 1103H s’il est négatif et à l’offset 1104H s’il est nul.
Architecture et Microprocesseur 24
Appel de sous-programme
Pour éviter la répétition d’une même séquence d’instructions plusieurs fois dans un programme,
on rédige la séquence une seule fois en lui attribuant un nom et on l’appelle lorsqu’on en a besoin.
Le programme appelant est le programme principal. La séquence appelée est un sous-programme ou
procédure.
Ecriture d’un sous-programme :
Remarque : une procédure peut être de type NEAR si elle se trouve dans le même segment ou de
type FAR si elle se trouve dans un autre segment.
Exemple :
Architecture et Microprocesseur 25
Lors de l’exécution de l’instruction CALL, le
pointeur d’instruction IP est chargé avec
l’adresse de la première instruction du sous-
programme. Lors du retour au programme
appelant, l’instruction suivant le CALL doit
être exécutée, càd que IP doit être rechargé
avec l’adresse de cette instruction.
Architecture et Microprocesseur 26
Fonctionnement de la pile : la pile est une zone mémoire fonctionnant en mode LIFO (Last In
First Out : dernier entré, premier sorti). Deux opérations sont possibles sur la pile :
o empiler une donnée : placer la donnée au sommet de la pile ;
o dépiler une donnée : lire la donnée se trouvant au sommet de la pile.
Le sommet de la pile est repéré par un registre appelé pointeur de pile (SP : Stack Pointer) qui contient
l’adresse de la dernière donnée empilée. La pile est définie dans le segment de pile dont l’adresse
de départ est contenue dans le registre SS (Stack Segment, registre de segment de pile).
Architecture et Microprocesseur 27
La pile et le programme croissent en sens inverse pour diminuer le risque de collision entre le code
et la pile dans le cas où celle-ci est placée dans le même segment que le code (SS = CS).
Lors de l’appel à un sous-programme, l’adresse de retour au programme appelant (contenu de IP)
est empilée et le pointeur de pile SP est automatiquement décrémenté. Au retour du sous-
programme, le pointeur d’instruction IP est rechargé avec la valeur contenue sommet de la pile et
SP est incrémenté.
Architecture et Microprocesseur 28
La pile peut également servir à sauvegarder le contenu de registres qui ne sont pas
automatiquement sauvegardés lors de l’appel à un sous programme :
o instruction d’empilage : PUSH opérande
o instruction de dépilage : POP opérande
où opérande est un registre ou une donnée sur 2 octets (on ne peut empiler que des mots de 16
bits).
Exemple :
Remarque : la valeur du pointeur de pile (SP) doit être initialisée par le programme principal avant
de pouvoir utiliser la pile.
Utilisation de la pile pour le passage de paramètres : pour transmettre des paramètres à une procédure,
on peut les placer sur la pile avant l’appel de la procédure, puis celle-ci les récupère en effectuant
un adressage basé de la pile en utilisant le registre BP.
Architecture et Microprocesseur 29
Exemple : Ecrire une procédure effectuant la somme de deux nombres et retournant le résultat dans
le registre AX .
Programme principal :
Procédure somme :
Architecture et Microprocesseur 30
L’instruction ret 4 permet de retourner au programme principal et d’incrémenter le pointeur de pile
de 4 unités pour dépiler les paramètres afin de remettre la pile dans son
état initial.
Etat de la pile :
Architecture et Microprocesseur 31
Méthodes de programmation
Etapes de la réalisation d’un programme
o Définir le problème à résoudre : que faut-il faire exactement ?
o Déterminer des algorithmes, des organigrammes : comment faire? Par quoi commencer,
puis poursuivre ?
o Rédiger le programme (code source) :
utilisation du jeu d’instructions (mnémoniques) ;
création de documents explicatifs (documentation).
o Tester le programme en réel ;
o Corriger les erreurs (bugs) éventuelles : déboguer le programme puis refaire des tests jusqu’à
obtention d’un programme fonctionnant de manière satisfaisante.
Architecture et Microprocesseur 32
Réalisation pratique d’un programme :
o Rédaction du code source en assembleur à l’aide d’un éditeur (logiciel de traitement de texte
ASCII) :
edit sous MS-DOS,
notepad (bloc-note) sous Windows,
Architecture et Microprocesseur 33
Structure d’un fichier source en assembleur :
Pour faciliter la lisibilité du code source en assembleur, on le rédige sous la forme suivante :
Architecture et Microprocesseur 34
CHAPITRE VI
Architecture et Microprocesseur 1
Adressage des ports d’E/S
Un circuit d’E/S possède des registres pour gérer les échanges avec les périphériques :
registres de configuration ;
registres de données.
A chaque registre est assigné une adresse : le microprocesseur accède à un port d’E/S en
spécifiant l’adresse de l’un de ses registres.
Le microprocesseur peut voir les adresses des ports d’E/S de deux manières :
Architecture et Microprocesseur 2
Conséquences :
• l’espace d’adressage des mémoires diminue ;
• l’adressage des ports d’E/S se fait avec une adresse de même longueur que pour les
cases mémoires ;
• toutes les instructions employées avec des cases mémoires peuvent être appliquées aux
ports d’E/S : les mêmes instructions permettent de lire et écrire dans la mémoire et les
ports d’E/S, tous les modes d’adressage étant valables pour les E/S.
o adressage indépendant : le
microprocesseur considère deux espaces
distincts : l’espace d’adressage des
mémoires et l’espace d’adressage des
ports d’E/S.
Architecture et Microprocesseur 3
Conséquences :
• l’espace mémoire total adressable n’est pas diminué ;
• l’adressage des port d’E/S peut se faire avec une adresse plus courte (nombre de bits
inférieur) que pour les circuits mémoires ;
• les instructions utilisées pour l’accès à la mémoire ne sont plus utilisables pour l’accès
aux ports d’E/S instructions spécifiques ;
• une même adresse peut désigner soit une case mémoire, soit un port d’E/S : le
microprocesseur doit donc fournir un signal permettant de différencier l’adressage de la
mémoire de l’adressage des ports d’E/S.
Architecture et Microprocesseur 4
Les instructions de lecture et d’écriture d’un port d’E/S sont respectivement les
instructions IN et OUT. Elles placent la ligne M/IO à 0 alors que l’instruction MOV
place celle-ci à 1.
Lecture d’un port d’E/S :
o si l’adresse du port d’E/S est sur un octet :
IN AL, adresse : lecture d’un port sur 8 bits ;
Ou bien
mov DX, adresse
IN AL,DX : lecture d’un port sur 8 bits.
o si l’adresse du port d’E/S est sur deux octets :
IN AX, adresse : lecture d’un port sur 16 bits ;
Ou bien
mov DX, adresse
IN AX,DX : lecture d’un port sur 16 bits.
où le registre DX contient l’adresse du port d’E/S à lire.
Architecture et Microprocesseur 5
Ecriture d’un port d’E/S :
o si l’adresse du port d’E/S est sur un octet :
OUT adresse,AL : écriture d’un port sur 8 bits ;
Ou bien
mov DX, adresse
OUT DX,AL : écriture d’un port sur 8 bits.
o si l’adresse du port d’E/S est sur deux octets :
OUT adresse,AX : écriture d’un port sur 16 bits ;
Ou bien
mov DX, adresse
OUT DX,AX : écriture d’un port sur 16 bits.
où le registre DX contient l’adresse du port d’E/S à écrire.
Architecture et Microprocesseur 6
Exemples :
• écriture de la valeur 1234H dans le port d’E/S sur 16 bits à l’adresse 49H :
mov ax,1234H
out 49H,ax
Architecture et Microprocesseur 7
Interface parallèle 8255
Architecture et Microprocesseur 8
Schéma fonctionnel
Architecture et Microprocesseur 9
Accès aux registres du 8255 : les lignes d’adresses A0 et A1 définissent les adresses des
registres du 8255 :
Configuration du 8255 : les ports peuvent être configurés en entrées ou en sorties selon le
contenu du registre de commande. De plus le 8255 peut fonctionner selon 3 modes :
o Le mode 0 est le plus simple : les ports sont configurés en entrées/sorties de base.
Les données écrites dans les registres correspondants sont mémorisées sur les lignes
de sorties; l’état des lignes d’entrées est recopié dans les registres correspondants et
n’est pas mémorisé.
Architecture et Microprocesseur 10
o Les modes 1 et 2 sont utilisés pour le dialogue avec des périphériques nécessitant
un asservissement.
Architecture et Microprocesseur 11
Le décodeur d’adresses détermine l’adresse de base du 8255 ; les lignes A1 et A2
déterminent les adresses des registres du 8255.
Exemple : connexion du 8255 sur la partie faible du bus de données du 8086, avec
décodage d’adresses incomplet (les lignes d’adresses A3 - A15 ne sont pas toutes
utilisées) :
Architecture et Microprocesseur 12
A2=0 et A1=0 adresse du port A = adresse de base +0 =300H;
A2=0 et A1=1 adresse du port B = adresse de base +2 =302H;
A2=1 et A1=0 adresse du port C = adresse de base +4 =304H;
A2=1 et A1=1 adresse du registre de commande = adresse de base +6 =306H;
Architecture et Microprocesseur 13
Timer 8253
Dans un PC, il existe une seule horloge de très haute fréquence, utilisée notamment
par la CPU, pour synchroniser ses activités avec ses circuits périphériques. Mais il existe
aussi des fonctions qui nécessitent des horloges de basse fréquence.
Le Timer 8253 PIT (Programmable Interval Timer) est conçu pour satisfaire ce besoin. Il
consiste à générer des basses fréquences à partir de CLK pour des applications diverses.
1 24 VCC CLK0
D7
WR GATE0
D6 2
D7 .. D0 OUT0
D5 RD
D4 CS m
D3 A1 CLK2
D2 8253 A0
P WR 8253 GATE2
OUT2
D1 CLK2 I/F RD
D0 OUT2
CLK0 GATE2 CLK1
OUT0 CLK1 A0 GATE1
GATE0 GATE1
A1 OUT1
GND 12 13 OUT1
CS
Architecture et Microprocesseur 14
o CLK (1,2,3) <= 2 MHz
o Le signal GATE est utilisé pour (Dés)Activer le compteur. État Haut (5V) pour activer
et vice-versa.
o Le bus données du 8253 (D0-D7) est connecté à celui du bus système. Il permet à la
CPU d’accéder les registres du 8253 pour les opérations R/W.
o Les signaux RD/WR sont connectés aux signaux de contrôle IOR/IOW du bus
système.
CS A1 A0 Port
0 0 0 Compteur 0
0 0 1 Compteur 1
0 1 0 Compteur 2
0 1 1 Registre de Contrôle
1 x x 8253/54 n’est pas
sélectionné
Architecture et Microprocesseur 15
Initialisation du T8253
o L’octet de contrôle est écrit dans le registre contrôle (pour, entre autres, indiquer
la forme de OUT).
o Le nombre N par qui la CLK est divisée pour générer la fréquence OUT, doit être
programmé, via D7-D0. Puisque le nombre maximum permis est FFFFh (16 bits), ce
nombre doit être envoyé en 2 temps, 1 octet à la fois.
D7 D6 ...... D1 D0 BCD Mode
SC1 SC0 RL1 RL0 M2 M1 M0 BCD 0 Compteur Binaire (16-bits)
M2 M1 M0 Mode
0 0 0 Mode 0
RL1 RL0 Mode SC1 SC0 Mode
0 0 1 Mode 1
0 0 Lecture du compteur (compteur 0 0 Compteur 0 sélectionné
x 1 0 Mode 2 d’avènement)
0 1 Compteur 1 sélectionné
Mode 3 0 1 Lire/Charger LSB seulement
x 1 1 Compteur 2 sélectionné
1 0
Mode 4 1 0 Lire/Charger MSB seulement
1 0 0 / (non permis)
1 1
Mode 5 1 1 Lire/Charger LSB, ensuite MSB
1 0 1
Architecture et Microprocesseur 16
Binaire: 0000 FFFFh CLK / [ 1 (0001h) à 65536 (FFFFh)]
D7 D6 ...... D1 D0
SC1 SC0 RL1 RL0 M2 M1 M0 BCD
0000 9999h
BCD:Registre CLK / [ 1 (0001h) à 10000 (9999h)]
de contrôle
Architecture et Microprocesseur 17
Exemple 1 : En supposant que la puce 8253 est activée par le pin CS à partir des adresses A7-A2
100101.
Architecture et Microprocesseur 18
Exemple 2 : En utilisant les adresses des ports (de l’exemple 1) Port Adr. Port
Compteur 1 95h
(en BCD) et la forme d’onde est un signal carrée (Mode 3).
Compteur 2 96h
MOV AL, 37H ; Compteur 0, mode 3, BCD 37H
Registre de 97h
OUT 97H, AL ; Envoi au registre contrôle Contrôle
Programmer le compteur 2, qui permet de générer un signal carré de fréquence fOUT2 = 360Hz,
sachant que fCLK2 = 1.8MHz. MOV AL, B6H ; Compteur 2, mode 3, Binaire B6H
OUT 97H, AL ; Envoi au registre contrôle
fCLK2 / fOUT2 = 5000 = 1388H (HEX) MOV AX, 1388H ; Charger le nombre diviseur (H pour
En Binaire
HEX)
= 5000 (BCD)
OUT 96h, AL ; Envoi de l’octet LSB au compteur 2
Note: En BCD, il suffit de changer (88h)
MOV AL, AH
MOV AL, B6H par
MOV AL, B7H OUT 96h, AL ; Envoi de l’octet MSB au compteur 2
(13h)
Architecture et Microprocesseur 19
Formes de OUT0,1,2
IBM PC a programmé le compteur 0 du Timer8253/54 en mode 3 (signal carré) avec le nombre maximum
65536 (donc son registre est chargé avec la valeur 0000H), pour obtenir une fréquence de 18.2Hz. Puisque le
nombre à charger est pair (65536) le rapport cyclique de OUT0 est de 50% .
1.193MHz TCLK0 = 838ns
CLK0 =
CLK1 =
CLK2
OUT0
OUT1
IBM PC a programmé le compteur 2 du Timer8253/54 en mode 3 (signal carré) avec le nombre 1331 (donc
son registre est chargé avec la valeur 0533H), pour obtenir une fréquence de 896Hz. Puisque le nombre à
charger est impair (1331) le rapport cyclique de OUT0 n’est pas 50% (N+1)/2 pulses à l’état haut et (N-
1)/2 pulses à l’état bas.
OUT2
Architecture et Microprocesseur 20
MODE 3 : Générateur d’un signal carré Charger le compteur de N
A condition GATE = 1
OUT
Architecture et Microprocesseur 21