Ecole des Mines de l’Industrie et de la Géologie EMIG
SYSTEMES MICRO-PROGRAMMES
Alkassoum Nabil
[email protected]
# octobre 2004 #
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Chapitre 01 - INTRODUCTION AUX MICROPROCESSEURS I. Introduction Avant l’apparition des microprocesseurs, les systèmes logiques étaient conçus à l’aide de circuits intégrés logiques (AND, OR, NOR, etc.). Cette méthode de conception est appelée : logique câblée. La logique câblée relève du matériel « hardware ». Le matériel est l’ensemble des éléments utilisés pour la réalisation d’un système logique. Parmi ces éléments on peut citer : o Les circuits intégrés logiques o
Les composants discrets : transistors, capacités…
o
Les circuits imprimés
o
Les connecteurs et câbles de liaison.
L’apparition des microprocesseurs a permis de concevoir tout autrement un système logique.
II. Historique Premiers calculateurs Les tout premiers calculateurs, ancêtres de l'ordinateur numérique, furent imaginés et réalisés au XVIIe siècle, en particulier par Wilhelm Schickard, Blaise Pascal et Leibniz. L'appareil de Pascal comportait une série de roues à dix crans, chaque cran représentant un chiffre de 0 à 9. Les additions et les soustractions s'effectuaient en tournant les roues dentées d'un certain nombre de crans. Leibniz améliora par la suite cette machine pour lui permettre d'effectuer aussi des multiplications. Machine à calculer de Pascal Au début du XIXe siècle, Joseph-Marie Jacquard conçut un métier automatique en utilisant de fines plaques en bois perforées qui contrôlaient le tissage de motifs compliqués. Puis, dans les années 1880, le statisticien américain Hermann Hollerith eut l'idée d'utiliser des cartes perforées, similaires à celles de Jacquard, pour traiter des données. En utilisant un système où les cartes perforées passaient sur des contacts électriques, il parvint à compiler des informations statistiques pour le recensement de la population des États-Unis en 1890. En 1896, il fonda la Tabulating Machine Corporation, qui devint par la suite la société IBM. Machines différentielle et analytique Au XIXe siècle, le mathématicien et inventeur britannique Charles Babbage découvrit les principes de l'ordinateur numérique moderne. Il créa différentes machines, en particulier la machine différentielle et la machine analytique. Bien qu'elle n'ait jamais été terminée, la machine différentielle était destinée à résoudre des problèmes mathématiques avec une précision de vingt décimales. Babbage améliora ensuite cette machine pour concevoir en 1833 la machine analytique, dont une partie seulement fut réalisée. Véritable précurseur de nos ordinateurs, cette machine aurait été capable de stocker des instructions, d'exécuter des opérations mathématiques et d'utiliser des cartes perforées comme support de mémoire. La plupart des historiens considèrent Babbage comme le véritable inventeur de l'ordinateur numérique moderne, même si la technologie peu avancée de l'époque l'empêcha de réaliser concrètement ses idées. Il fut dont le premier à décrire les principes d’un calculateur d’application générale (machine pouvant répéter des séquences d’opérations et choisir une série d’opérations particulière en fonction de l’état du calcul). Premiers ordinateurs Les premiers ordinateurs analogiques furent fabriqués au début du XXe siècle. Ils effectuaient leurs calculs grâce à un système d'axes et d'engrenages. Ce type de machine permettait de fournir des approximations numériques d'équations difficiles à résoudre autrement. Pendant les deux guerres mondiales, des systèmes analogiques mécaniques, puis électriques, furent notamment utilisés comme pointeurs de torpille dans les sous-marins et comme contrôleurs de visée dans les bombardiers. Ordinateurs électroniques Dès 1939, un prototype de machine électronique (1er ordinateur binaire à lampes : ABC – Antanasoff Berry Computer) fut fabriqué aux États-Unis par John Atanasoff et Clifford Berry à l'Iowa State College. Il comportait une mémoire de 60 mots de 50 bits et une unité arithmétique et logique. Bien que le programme ne fut pas stocké en mémoire, l’ABC est souvent considéré comme le premier vrai ordinateur. Ce prototype fut discrètement développé, et éclipsé par la présentation en 1945 de l'ENIAC (Electronic Numerical Integrator And Computer), ordinateur et intégrateur numérique électronique proposé en 1942 par Presper Eckert et John Mauchly. L'ENIAC contenait plus de 18 000 tubes à vide, 1500 relais, consommait 170 kW, pesait 30 tonnes, couvrait une surface de 72 m2. Il était environ 500 fois plus rapide que le Mark 1 (environ 330 multiplications par seconde). Cependant sa programmation s’effectuait à l’aide de fiches à brancher dans le tableau de connexions. Le travail de programmation pouvait prendre plusieurs jours.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
1
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Pendant la même période, John Von Neumann, consultant sur l’ENIAC, proposa de coder le programme sous forme numérique et de les enregistrer en mémoire, avec gain en souplesse et rapidité. Il jetait ainsi les bases de l’architecture de l’ordinateur moderne. Il ne fut cependant pas le premier à réaliser cette machine. Parallèlement, à Londres, fut mis au point pendant la Seconde Guerre mondiale Colossus, un ordinateur numérique entièrement électronique. Élaboré par une équipe de scientifiques et de mathématiciens dirigée par Alan Turing, Colossus fut opérationnel en décembre 1943. Comportant 1 500 tubes à vide, il fut utilisé pour déchiffrer les messages radio codés des Allemands. Des querelles entre Eckert, Mauchly et Von Neumann portant notamment sur la paternité de l’idée et des brevets, retardèrent le projet EDVAC (Electronic Discret Variable Computer). Celui-ci fut devancé en 1948 par un prototype, appelé Manchester Mark 1, puis en 1949 par l’EDSAC (Electronic Delay Storage Automatic Computer) première machine opérationnelle construite par Maurice Wilkes. En 1948, William Shockley, John Bardeen et Wlter Brattain inventèrent le transistor bipolaire. Celui-ci remplaça rapidement les lampes, apportant fiabilité et rapidité aux ordinateurs. À la fin des années 1950 furent conçus des ordinateurs dits de deuxième génération, la taille et la consommation diminuèrent sensiblement. Le premier ordinateur utilisant des transistors fut le TRADIC en 1955. A la même époque IBM commercialisa le premier disque dur (5 disques de 61 cm de diamètre pour 5 Mo). Les mémoires à tore de ferrite étaient également disponibles. Le PDP-8 de DEC fut le premier mini-ordinateur à être diffusé en grand série (50000 exemplaires). La troisième génération, à partir de 1970, correspond à l’utilisation des circuits intégrés. L’Intel 4004, le premier microprocesseur 4 bits, fut en 1971 le premier circuit intégré incorporant unité de calcul, mémoire et gestion des entrées-sorties. Il comportait 2300 transistors. Le 8008 sortit un an plut tard. Le premier microordinateur, le Micral N, fut construit en 1973 par une entreprise française R2E. Depuis le début de 1980, le niveau d’intégration des puces ayant largement progressé en surface et en densité, on parle de quatrième génération.
III. Principes de base
Tableau de commande
Les premiers automatismes étaient réalisés à partir de la logique câblée selon le synoptique suivant : Automatisme à logique câblée Les systèmes à logique câblée sont conçus à l'aide de circuits intégrés logiques. Certains de ces circuits font appel à :
j
ei i
Actionneurs Processus Capteurs
sj La logique combinatoire
(les sorties sont définies uniquement à partir des variables d'entrée)
la logique séquentielle (les sorties dépendent toujours des entrées mais aussi des états antérieurs).
n ei
i
j
Tableau de commande
Interface Mémoire (instruction)
sj
Le microprocesseur donne naissance au principe de la logique programmée. Le fonctionnement n'est plus défini par un ensemble de circuits logiques, câblés entre eux, mais par une suite ordonnée d'instructions stockées en mémoire et gérées par cet élément. Nouveau synoptique : Critères de choix avantage inconvénient rapidité spécificité logique câblée logique programmée souplesse lenteur
Microprocesseur
Interface Automatisme à logique câblée
Actionneurs Processus Capteurs
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
2
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
III.1
logique câblée :
Pour une configuration hardware donnée, nous avons une fonction donnée. Il y a nécessité de modifier le hardware pour changer de fonction. III.2
logique programmée :
Le hardware conçu est figé. Il est réalisé pour plusieurs commandes. C'est le programme qui crée la fonction. Pour une suite d'instructions donnée, nous avons une fonction donnée. Il y a nécessité de modifier le programme pour une nouvelle fonction Parmi ses avantages on peut citer : Souplesse d’utilisation (grâce à la programmation) ;
Changement de programme) ;
fonction
facile
(par
Facilité de mise au point ;
Consommation et encombrement réduits ;
Durée courte pour l’étude du système.
changement
de Machine universelle I/O
Mémoire
Bus du système
CPU
IV. Machine de Von Neumann John Von Neumann est à l’origine (1946) d’un modèle de machine universelle (non spécialisée) qui caractérise les machines possédant les éléments suivants : Une mémoire contenant les programmes (instructions) et les données ;
Une unité arithmétique et logique (UAL ou ALU) ;
Une unité permettant l’échange d’information avec les périphériques : unité d’entrée / sortie (E/S ou I/O) ;
Une unité de commande (UC).
La plupart des machines actuelles s’appuient sur le modèle Von Neumann.
Registres Interconnexion interne du CPU
Unité Arithmétique et Logique
Unité de contrôle
Figure 1 : Machine de Von Neumann
V. Microprocesseur V.1
Définition (1)
le microprocesseur, noté aussi M.P.U. (Microprocessor unit) ou encore C.P.U. (Central Processing Unit) est un circuit intégré complexe réalisé en technologie ULSI (Ultra large scale intégration) capable d'effectuer séquentiellement et automatiquement des suites d'opérations élémentaires ( fonctions logiques, arithmétiques , contrôle de mémoire et contrôle des circuits d’entrées sorties). V.2
Son rôle
Ce circuit remplit deux fonctions essentielles :
le traitement des données
On parle d'unité de traitement. Cette fonction est dédiée à l'U.A.L. Elle concerne la manipulation des données (mots binaires de 8, 16, 32 ou 64 bits) sous formes de transfert, opérations arithmétiques, opérations logiques...
le contrôle du système
Cette fonction se traduit par des opérations de décodage et d'exécution des ordres exprimés sous forme d'instruction. Les mots binaires qui sont traités sont des instructions puisqu’ils instruisent le microprocesseur de la fonction à exécuter. Pour faire fonctionner un système à microprocesseur, il faut prévoir une suite ordonnée d’instructions, cette suite est appelée programme. Le programme est logé dans une mémoire externe au microprocesseur, ce dernier reçoit les instructions séquentiellement est exécute la fonction spécifiée. Le microprocesseur est le cœur de tout système à microprocesseur. Il n’a aucune utilité fonctionnelle par luimême. Il commande les fonctions des autres éléments du système. Il est généralement destiné à commander plusieurs périphériques (clavier, écran, imprimante, afficheur, moteur, etc.). L’interfaçage avec ces différents périphériques se fait par l’intermédiaire de circuits d’entrées/sorties.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
3
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Le microprocesseur a la charge des fonctions suivantes dans un système à microprocesseur : Fournir les signaux de synchronisation et de commande à tous les éléments du système ; Transfert des données entre la mémoire et les dispositifs d’E/S, et vice versa ;
Décodage des instructions ;
Effectuer les opérations arithmétiques et logiques commandées par les instructions ;
Réagir aux signaux de commande produits par les entrées / sorties comme le signal RESET et les INTERRUPTIONS.
Microprocesseur UAL
Section des REGISTRES
Bus de données
Bus d’adresses
Section de COMMANDE et de SYNCHRONISATION
Bus de commandes
Périphériques
Mémoires
Prendre en charge les instructions et les données dans la mémoire ;
Circuits d’entrées / sorties
Figure 2 : Microprocesseur et son environnement
V.3
Structure d’un calculateur
L’´élément de base d’un calculateur est constitué par l’unité centrale de traitement (UCT, CPU : Central Processing Unit). L’UCT est constituée : • d’une unité arithmétique et logique (UAL, ALU : Arithmetic and Logic Unit) : 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 (UC, CU : Control Unit) : elle envoie les ordres (ou commandes) à tous les autres éléments du calculateur afin d’exécuter un programme. La mémoire centrale contient : • le programme `a exécuter : suite d’instructions élémentaires ; • les données `a traiter. L’unité d’entrées/sorties (E/S) est un intermédiaire entre le calculateur et le monde extérieur. L’unité de transfert est le support 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 (signal d’horloge) `a des intervalles de temps fixes. Définition (2)
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
4
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Un microprocesseur consiste en une unité centrale de traitement (UAL + registres + unité de contrôle) entièrement contenue dans un seul circuit intégrée. Un calculateur construit autour d’un microprocesseur est un microcalculateur ou un microordinateur. Remarque : un circuit intégré qui inclut une UCT, de la mémoire et des périphériques est un microcontrôleur. V.4
Puissance d'un microprocesseur
Définition : La notion de puissance est la capacité de traiter un grand nombre d'opérations par seconde sur de grands nombres et en grande quantité. Intrinsèquement la puissance se joue donc sur les trois critères suivants: • La longueur des mots : données et instructions (on parle de largeur du bus des données). •
Le nombre d'octets que le microprocesseur peut adresser (on parle de largeur du bus des adresses).
•
La vitesse d'exécution des instructions liée à la fréquence de fonctionnement de l'horloge de synchronisation exprimée en MHz.
L'aspect dimensionnel renseigne assez bien de la puissance du composant. V.5
Organisation de la mémoire centrale
La mémoire peut être vue comme un ensemble de cellules ou cases contenant chacune une information : une instruction ou une donnée. Chaque case mémoire est repérée par un numéro d’ordre unique : son adresse. Représentation :
Une case mémoire peut être lue ou écrite par le microprocesseur (cas des mémoires vives) ou bien seulement lue (cas des mémoires mortes). V.6
Circulation de l’information dans un calculateur
La réalisation matérielle des ordinateurs est généralement basée sur l’architecture de Von Neumann
Le microprocesseur échange des informations avec la mémoire et l’unité d’E/S, sous forme de mots binaires, au moyen d’un ensemble de connexions appelé bus. Un bus permet de transférer des données sous forme parallèle, c’est-à-dire en faisant circuler n bits simultanément. Les microprocesseurs peuvent être classées selon la longueur maximale des mots binaires qu’ils peuvent échanger avec la mémoire et les E/S : microprocesseurs 8 bits, 16 bits, 32 bits, ... On distingue trois types de bus :
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
5
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
• le bus d’adresses permet au microprocesseur de spécifier l’adresse de la case mémoire `a lire ou à écrire ; • le bus de données permet les transferts entre le microprocesseur et la mémoire ou les E/S ; • le bus de commande transmet les ordres de lecture et d’écriture de la mémoire et des E/S.
Remarque : les bus de données et de commande sont bidirectionnels, le bus d’adresse est unidirectionnel : seul le microprocesseur peut délivrer des adresses (il existe une dérogation pour les circuits d’accès direct à la mémoire, DMA).
VI. Architecture du microprocesseur VI.1
architecture interne
L’unité centrale de traitement UCT (CPU : Central Processing Unit), encore dénommée processeur ou microprocesseur, est l’élément central, d’un système à microprocesseur, qui interprète et exécute les instructions d’un programme. C’est le « cerveau » du système. Mais on trouve aussi des processeurs dits spécialisés, qui peuvent décharger le CPU et assurer des tâches en parallèle. Ceci est fréquent pour la gestion des entrées / sorties. Un processeur est aujourd’hui un circuit électronique à très haute densité d’intégration (ULSI : Ultra Large Scale Integration), qui peut compter quelques dizaines de millions de transistors. Le premier circuit de ce type a été fabriqué par INTEL en 1971 : le 4004 conçu pour équiper des calculatrices. Il comptait alors 2300 transistors pour 46 instructions. La loi de Moore, formulée en 1965 par des fondateurs de la compagnie INTEL, qui prédit un doublement des capacités des processeurs tous les 18-24 mois, à jusqu’à présent été relativement bien suivie. Il ne s’agit pas seulement de l’augmentation de la fréquence de fonctionnement ou du nombre de transistors. Les concepteurs cherchent aussi à augmenter la quantité de traitement par cycle d’horloge. VI.1.1
SCHEMA FONCTIONNEL D'UN MICROPROCESSEUR
Un microprocesseur comprend essentiellement, comme le montre la figure qui suit : Bus interne
Accumulateur
Registre d’état
Reg. D’instruction
Décodeur
Reg. Temporaire
UAL B C E F H L SP PC
Unité de COMMANDE et de TEMPORISATION RESET
RD
WR
Bus de commande externe
Buffer d’adresse
IO/R
Buffer d’adresse Bus d’adresse externe
Bus de donnée externe Figure 3 : Architecture interne d'un microprocesseur V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
6
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs •
Une Unité Arithmétique et logique (UAL), qui effectue les différents traitements (opérations arithmétiques, logiques et test) ;
•
Une Unité de Commande (UC), qui va chercher dans la mémoire chaque instruction à exécuter pour la décoder et générer tous les signaux nécessaires pour l’exécution de l’instruction.
•
Des Registres, utilisés pour le stockage provisoire des informations à l’intérieur du microprocesseur.
Cet ensemble est interconnecté au travers de différents bus interne qui relient tous les différents éléments du microprocesseur. VI.1.1.1
L'unité Arithmétique et Logique (UAL)
Son rôle : L’UAL (ALU : Arithmetic and Logical Unit) est l’unité fonctionnelle où sont effectuées les opérations arithmétiques, logiques et les testes sur les données. Toute instruction qui modifie une donnée fait toujours appel à l'UAL. La nature de l’opération à mener sur les données est déterminée par les signaux de l’unité de commande. Les données, qui sont traitées, proviennent soit de la mémoire, soit de l’unité d’E/S. les résultats du traitement sont transférés dans la mémoire ou à l’unité d’E/S. L'entrée de L'UAL est connectée au bus interne via : - Des registres "temporaires". -
Un registre particulier appelé "accumulateur".
La sortie de l'UAL est connectée uniquement à l'entrée de l'accumulateur. L’UAL comprend au minimum : • Un additionneur ; •
Un complémenteur (pour la soustraction) ;
•
Un décaleur (pour la division et la multiplication) ;
•
Des parties logiques diverses.
Noter : Les deux entrées sont précédées par une mémoire tampon. On les appelle encore des registres tampons ou verrou. Ces registres permettent de stocker des octets aux entrées de l'U.A.L. L'UAL étant constitué d'une logique combinatoire, elle est dépourvue de moyen propre de stockage. Ce type de registre ne peut être manipulé par le programmeur. Il lui est totalement transparent. VI.1.1.2
Les Registres
L’exécution d’une instruction demande le stockage temporaire de données. La mémoire interne du CPU est découpée en deux (2) types de registres : • Les registres visibles pour l’utilisateur qui permettent au programmeur d’optimiser les référence à la mémoire. •
VI.1.1.2.1
Les registres de contrôle et de statuts, utilisés par l’unité de commandes pour contrôler l’activité du CPU et par des programmes du système d’exploitation pour contrôler l’exécution des programmes. Registres visibles pour l’utilisateur
Un registre utilisateur est un registre référençable par les instructions exécutées par le CPU. On trouve différentes catégories de registres : - Données : ne peuvent être employés pour le calcul d’adresse ; -
Adresses : souvent dévolus à un mode d’adressage particulier (contenant des valeurs de base ou d’index) ;
-
Conditions (flags) : constitués d’une suite de bits indépendants dont chacun est positionné en fonction du résultat d’une opération ;
-
Autres : n’ont pas de fonction spécifique.
VI.1.1.2.2
Registres de contrôle et de statuts
En général, ces registres ne sont pas visibles pour l’utilisateur. Quatre (4) registres sont essentiels à l’exécution d’une instruction, ils sont utilisés pour l’échange avec la mémoire principale :
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
7
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs •
Le compteur ordinal CO (PC : Program Counter) : contient l’adresse de la prochaine instruction à exécuter ;
•
Le registre d’instruction (IR) : contient l’instruction du fetch le plus récent ;
•
Le registre d’adresse mémoire (MAR) : contient une adresse mémoire. Est directement connecté au bus d’adresse ;
•
Le registre tampon mémoire (MBR) : contient un mot de données à écrire en mémoire ou un mot lu récemment. Est directement connecté au bus de données. Fait le lien avec les registres visibles pour l’utilisateur.
Des registres supplémentaires peuvent être intercalés entre l’ALU et les registres utilisateurs / MBR. Un registre PSW (Program Status Word) contient des informations de statuts. Parmi les plus fréquentes : o Signe : le bit de signe du résultat de la dernière opération arithmétique ; o
Zéro : à 1 lorsque le résultat d’une opération est égal à 0 ;
o
Retenue : à 1 lorsqu’une opération a généré une retenue ;
o
Egal : à 1 si le résultat d’une comparaison est une égalité ;
o
Débordement : à 1 lorsqu’une opération a provoqué un débordement ;
o
Interruption : indique si le fonctionnement normal peut être interrompu ;
o
Superviseur : indique un mode privilégié.
En plus du PSW, un registre peut faire office de pointeur sur une zone mémoire contenant des informations supplémentaires. L’implantation de registres de contrôle peut être aussi faite en fonction de la prise en compte du système d’exploitation. VI.1.1.2.3
l'accumulateur
C'est le registre le plus important du microprocesseur, il sert systématiquement lorsque le µp a besoin de "manipuler" des données. La plupart des opérations logiques et arithmétiques sur les données font appel au couple "UAL - accumulateur" selon la procédure suivante:
Figure 4 : Accumulateur
Il en est de même pour les déplacements et transferts des données d'un endroit à un autre comme : - De mémoire à mémoire. -
De mémoire à unités d'entrée-sortie (I/O).
Cette action se fait en deux temps : Source vers Accumulateur et ensuite Accumulateur vers destination. Les instructions supportées par un accumulateur sont très nombreuses. Au niveau de la programmation, il représente une grande souplesse d'utilisation! Les autres registres ne permettent que des opérations limitées. Certains microprocesseur, possèdent des accumulateurs de longueur double tel D chez Motorola et HL chez Intel - dissociés en deux et généralement baptisés individuellement A et B ou H et L respectivement. Gros avantage présenté par un µp possédant plusieurs accumulateurs : les opérations logiques et arithmétiques se font entre accumulateurs limitant ainsi les accès (transferts) avec l'extérieur. C’est un registre sur 8, 16, 32 ou 64 bits selon le microprocesseur. VI.1.1.2.4
le compteur d'instructions
Appelé encore Compteur Programme (P.C. Program Counter) ou Compteur Ordinal (C.O.) Son rôle consiste à pointer TOUJOURS le premier octet d'une instruction. Le programme à exécuter est une succession d'instructions ordonnées (chaque instruction pouvant prend plusieurs octets!) qui se trouve rangé dans une zone mémoire, généralement à des adresses successives.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
8
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Le P.C. "repère" le premier octet de chaque instruction du programme. L’exécution de l’instruction incrémente automatiquement le compteur ordinal. Dans le cas où le PC à une taille de 16 bits, cela lui permettrait d'adresser 65536 adresses mémoire soit 64 k octets (le champ mémoire). Notons que le PC est connecté au bus interne des données. A la mise sous tension, une valeur particulière est déposée sur le bus d'adresses (Dans le cas du 6809, cette valeur est $FFFE). Le contenu des cases mémoires ($FFFE-$FFFF) représente en général l'adresse où se trouve le premier octet de la première instruction du programme.
$FFFE $FFFF
adresse haute adresse basse
Figure 5 : Contenu du PC (cas du 6809) Cette adresse est transmise aux circuits mémoires par l'intermédiaire du bus d'adresse via le Registre d'Adresses. !! Le P.C. pointe toujours l'adresse du début de l'instruction suivante. (A retenir, car parfois il est utile de connaître l'adresse présente.) Il est possible de recharger le [P.C.] avec une adresse qui ne correspond pas au déroulement séquentiel du programme. On trouve les détournements conditionnel et inconditionnel. La figure suivante illustre les différentes étapes d’exécution d’une instruction : Adresse 1 Pointeur d’Instruction Instruction Instruction
Registre d’Instruction
Programme en code machine en mémoire
Instruction
3
Instruction
Décodeur Contenu
4
2
Unité de Séquencement
Prochaine instruction à exécuter
et de commande 5 Exécution Figure 6 : Synoptique de l'exécution d'une instruction VI.1.1.2.5
le registre d'instructions
Il contiendra le code d’opération de l’instruction qui doit être exécutée. Le registre est chargé, pendant le cycle de base extraction-exécution, par 1er octet (code opératoire opcode), Il reçoit l'information (octet) grâce au bus de données auquel il est connecté. L'information qu'il "capture" sur le bus des données est utilisé par le décodeur d'instructions, suivant le protocole ci-dessous : La donnée extraite de la mémoire est stockée dans le R.I. (c'est la phase extraction). Ensuite ce contenu est interprété par le décodeur d'instructions qui agit alors sur la logique de contrôle (c'est la phase exécution). Cet octet indique au microprocesseur deux choses : Une action (une lecture, une écriture ou autre...) Un lieu d'action (un registre, un accumulateur, une case mémoire...) Le résultat de cette interprétation se traduit par des niveaux logiques sur le bus de contrôle. VI.1.1.2.6
Le registre d'état (Program Status Word PSW)
L'existence de ce registre permet de distinguer le simple calculateur du véritable ordinateur.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
9
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
C’est un registre constitué d’un ensemble de bascule qui caractérise l’état de fonctionnement du microprocesseur. Ces bascules sont affectées après l’exécution d’une instruction. Elles nous renseignent sur les résultats obtenus après une opération effectuée par l’UAL. après traitement sur les données L'existence de ces résultats permet d'écrire des programmes avec des branchements conditionnels (nouvelle adresse dans le C.I.). En fonction de l'état des bits de ce registre le microprocesseur peut, alors, exécuter des programmes différents. Le microprocesseur prend en quelque sorte des "décisions". Les bits les plus couramment utilisés sont : a- Le bit de retenue (C : Carry) Ce bit est dans l'état actif lorsqu’une retenue arithmétique est générée ; le huitième bit du résultat de l'opération génère une retenue dans le cas de mot de 8 bits ( dans le cas de mot de 16 bits ce serait donc le 16ème bit). b- Le Bit de Débordement ou dépassement ( O : Over flow) Cet indicateur est utilisé que dans le cas des opérations arithmétiques faisant appel à la représentation qui peut amener à un résultat erroné. c- Indicateur de zéro (Z : Zero) Ce bit est actif lorsque l'opération a pour effet de mettre tous les bits d'un accumulateur ou d'un registre à la valeur logique 0 (très utilisé pour réaliser des compteurs). d- Le bit de signe (S ) Information qui indique que le bit le plus significatif (MSB) du contenu de l'accumulateur est un 1 logique. e- Masque d’interruption (I : Interrupt) Cet indicateur permet de valider ou inhiber les interruptions provenant des circuits extérieurs. Dans le cas où les interruptions sont validées le microprocesseur peut être interrompu pour exécuter d’autres tâches (sous programme d’interruption). f- Demi-retenue (H : Half carry) Ce bit est mis à 1 dans le cas d’une retenue du 4ème bit vers le 5ème (du 8ème vers le 9ème pour un 16 bits). e- Parité (P : Parity) La plus part des microprocesseurs ne dispose pas de ce bit d’état ; il indique si le nombre de bits à 1 d’un registre est pair ou impair. P H I S Z O C Retenue Débordement Résultat nul Résultat négatif Masque
d’interruption Demi-retenue Parité Figure 7 : Exemple de registre d'état VI.1.1.2.7
Pointeur de Pile (SP Stack Pointer)
La pile est une partie de la mémoire RAM adressée par le microprocesseur, elle est utilisée pour faire des sauvegardes de données (les registres par exemple) lorsque celle est nécessaire. Le pointeur de pile SP pointe le sommet de cette pile. La pile est une structure LIFO (Last In, First Out). Le microprocesseur d’INTEL par exemple utilise deux instructions pour accéder à la pile : - L’instruction PUSH permet de sauvegarder le contenu d’un registre dans la pile. Le SP est décrémenté automatiquement avant une opération PUSH ; -
Exemple : PUSH AX (AX [SP]) L’instruction POP permet d’extraire de la pile un contenu d’un registre déjà sauvegardé. Le SP est incrémenté automatiquement après une opération POP. Exemple : POP AX
( [SP] AX).
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
10
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
VI.1.1.2.8
le registre d'adresses
Le Registre d'adresses ou (R.A.) sert d'interface entre le bus des données interne et le bus des adresses. Il "pilote" le bus d'adresses du microprocesseur. Son contenu provient de différentes sources : • Le Compteur d'instruction • Un registre général • Un emplacement mémoire Le contenu du registre d'adresse pointe la zone mémoire utile au microprocesseur. !! Une fois que le premier octet de l'instruction en cours est décodé... Le contenu du Compteur d'Instructions est changé (contient l'adresse du début de l'instruction à venir). Le contenu du Registre d'adresses change! Donc [C.I.] ≠ [R.A.] Ce changement correspond... Soit à une incrémentation du contenu afin de lire l'information complémentaire de l'instruction en cours. Soit à un chargement d'une nouvelle valeur correspondant à une nouvelle zone mémoire utilisée temporairement par le microprocesseur (zone différente de celle où se trouve le programme). Cette nouvelle valeur provient soit... D’une lecture en mémoire (directement ou indirectement selon les modes d'adressage utilisés) ; D’un calcul (addition,...). VI.1.1.2.9
les registres généraux
En plus des registres sus-cités, les microprocesseurs peuvent procéder d'autres destinés à faciliter la tâche du programmeur. On les nomme registres généraux. Leur nombre et leur taille différent selon les microprocesseurs. Ce ne sont pas des registres puissants (tel un accumulateur) puisqu'ils n'ont pas de liaison directe avec la sortie de l'U.A.L. Ces registres peuvent néanmoins affecter le Registre d'Etat. Parfois, ils peuvent constituer couplé par deux - appelé paire de registre (ex : BC chez Intel ou D chez Motorola). Ainsi, il est possible de réaliser des opérations sur un mot (ex : incrémentation de la paire). Ils servent généralement de registre intermédiaire dans le calcul. Exemple : soit à faire le calcul suivant : y=[(x+y)-z] avec x=4000, y=5000 et z=1000. AX= x = 4000 ; BX= y =5000 ; CX = z =1000. 1ère solution 2ème solution MOV AX,4000 MOV AX,4000 ADD AX,5000 MOV BX,5000 SUB AX,1000 MOV CX,1000 ADD AX,BX SUB AX,CX (Exemple avec le 8086). MOV BX,AX VI.1.1.3
La logique de contrôle (Unité de Commande UC)
Appelé encore Séquenceur ou Unité de contrôle (U.C.) Permet le contrôle de tous les éléments constitutifs du microprocesseur en leur fournissant les signaux de synchronisations et de commandes. Il leurs permet donc de travailler ensemble et dans l'ordre. Il est en quelque sorte le « chef d’orchestre ». L’UC contient les circuits logiques et de synchronisations qui produisent les signaux nécessaires à l’exécution de chacune des instructions d’un programme se trouvant en mémoire. Les principaux éléments de l’unité de commande sont : • Le compteur ordinal (CO) : registre contenant l’adresse en mémoire où se trouve l’instruction à chercher ; •
Le registre d’instruction (RI) qui reçoit l’instruction qui doit être exécutée ;
•
Le décodeur qui détermine l’opération à effectuer et les opérandes, c’est à dire sélectionner les fonctions qui doivent être exécuter ;
•
Le séquenceur (unité de séquencement) qui génère les signaux de commande aux différents composants. ( Il est constitué par l’ensemble des circuits logiques de contrôle qui assurent l’exécution de l’instruction). Cette unité fonctionne au rythme des impulsions d’une horloge.
•
L’horloge (interne ou externe) qui émet les impulsions permettant la synchronisation de tous les éléments de l’unité centrale.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
11
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
La logique de contrôle est pilotée par le Registre d'Instruction via le décodeur d'instruction. Il reçoit l’ordre de la fonction sous la forme d’un code binaire appelé instruction. Cette unité joue en quelque sorte un rôle d'intendance puisqu'elle décide de la disponibilité du bus à tel ou tel élément logique. La logique de contrôle possède une architecture complexe et très spécialisée. L'élément central est représenté par le décodeur d'instructions qui décode les informations (premier octet) stockées dans le R.I. pour générer les signaux nécessaires à l'exécution de l'instruction. La logique de contrôle génère sur les lignes de contrôle des niveaux logiques qui activent les différents circuits environnant tels que mémoires et circuits I/O. Cette unité fournit, à partir d'un signal de référence qui est l'horloge, tous les signaux de synchronisation utiles au bon fonctionnement de l'ensemble. Cette horloge est crée à partir d'un oscillateur interne qui utilise un signal en provenance d'un quartz externe. Deux actions complémentaires à noter : Cette unité assure : Le contrôle de mise sous tension du microprocesseur (initialisation des registres).
Le traitement des interruptions.
La figure suivante montre un synoptique de l’UC pour des instructions codées sur 8 bits. dans ce cas on peut commander 256 lignes individuelles (c’est à dire 256 instructions) 8
8 Reg. D’instruction
Décodeur & Séquenceur
Horloge
256 sorties 256
256 sélections pour les différents circuits de l’UAL
(verrouillage) 1er instruction
2ème instruction Figure 8 : Unité de commande
VI.1.1.3.1
Qu'est-ce qu'une interruption ?
Disons pour l'instant, que c'est une requête présentée à la logique de contrôle par des éléments extérieurs (périphériques). VI.1.1.4
Bus interne
C’est un ensemble de fils par les quels transitent les informations binaires (données, adresses ou commandes).
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
12
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
VI.2
Architecture externe ( les signaux d’entrées sorties d’un microprocesseur)
Un microprocesseur se présente sous la forme d’un circuit intégré muni d’un nombre généralement important de broches. Exemples : • Intel 8085, 8086, Zilog Z80 : 40 broches, DIP (Dual In-line Package) ; • Motorola 68000 : 64 broches, DIP ; • Intel 80386 : 196 broches, PGA (Pin Grid Array). Technologies de fabrication : NMOS, PMOS, CMOS. On peut représenter un microprocesseur par son schéma fonctionnel :
Le microprocesseur est relié aux éléments extérieurs (mémoires, E/S,…) par des lignes d’entrées et /ou de sorties (brochages du circuit intégré). Ces lignes peuvent être groupées en quatre (4) parties : - Bus d’adresses -
Bus de données
-
Bus de commandes
-
Signaux de commandes
En plus de ces 4 groupes, il faut citer les brochages servant pour l’alimentation du microprocesseur. Demande d’interruptions
Demande DMA Autorisation DMA RESET CLK
Bus d’adresses
Microprocesseur
Autorisation d’interruptions
Bus de données Lecture mémoire Ecriture mémoire Lecture périphérique Ecriture périphérique
Figure 9 : Signaux d'entrées / sorties VI.2.1
Bus d’adresses
Ces broches unidirectionnelles permettent d’adresser les mémoires (RAM, ROM) et /ou les circuits d’entrées sorties. Ces adresses sont fournies par le microprocesseur au bus d'adresse du système. La taille du bus d’adresse est mesurée en nombres de bits qu’il peut adresser (exemple : 16, 20, 24, 32, 64 bits). Ce bus est en logique 3 états. VI.2.2
Bus de données
Ces broches sont bidirectionnelles. Elles permettent la communication avec le bus des données interne du microprocesseur. C’est à travers ce bus que les données transitent entre le microprocesseur et la mémoire (RAM ou ROM) et les circuits d’entrées sorties. Il est généralement sur 8, 16, 32 ou 64 bits. Le sens du bus est commandé par les opérations de lecture et d’écriture.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
13
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Dans certain microprocesseur, une partie ou la totalité du bus de données est multiplexé avec quelques lignes du bus d’adresses. Par exemple dans les cas du microprocesseur 8085 d’INTEL , les bits A0-A7 du bus d’adresses sont multiplexés avec les bits D0-D7 du bus de données. Le 8085 possède une commande ALE ( Adresse Latch Enable) qui permet de verrouiller l’adresse A0-A7 dans un registre extérieur. Il a les mêmes caractéristiques électriques que pour le bus d’adresse, c’est un bus en logique 3 états. VI.2.3
Bus de commandes
•
Ce bus est constitué d’un ensemble de lignes destinées à contrôler les opérations sur les mémoires et les E/S. Les principales commandes sont : Lecture mémoire (RD ou READ) ;
•
Ecriture mémoire (WR ou WRITE) ;
•
Lecture périphérique ;
•
Ecriture périphérique. Certains microprocesseurs disposent seulement des commandes de lecture et écriture mémoire ; dans ce cas les circuits d’entrées / sorties sont considérés comme des cases mémoires.
VI.2.4
Signaux de commandes du microprocesseur
Ces signaux permettent de faire certains commandes du microprocesseur telle que : RESET : réinitialisation du microprocesseur ; réexécution du programme de démarrage à nouveau (non masquable).
Demande et autorisation d’interruption : ces signaux permettent d’interrompre le microprocesseur afin d’exécuter un sous-programme d’interruption.
Demande et autorisation de DMA : ces signaux sont utilisés lorsqu’un périphérique veut accéder directement à la mémoire sans passer par le microprocesseur. Le périphérique demande un transfert DMA et le microprocesseur lui rend un accusé de réception en lui autorisant le transfert.
VI.2.5
Alimentation
Selon les microprocesseurs, il y’a une, deux ou trois alimentations et une masse. Certains microprocesseurs ne nécessitent qu’une seule alimentation de +5Volts.
VII. Fonctionnement du microprocesseur VII.1
Horloge et cadencement
Un microprocesseur exécute un programme. Le programme est une suite d’instructions stockées dans la mémoire. Une instruction peut être codée sur un ou plusieurs octets. Format d’une instruction :
Exemple :
Rangement en mémoire :
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
14
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Tous les microprocesseurs fonctionnent en mode synchrone, c’est à dire que leur travail est cadencé par une horloge. La vitesse d’exécution d’une instruction dépend de la fréquence de l’horloge. L’exécution d’une instruction est obtenue par une suite de ‘’micro cycle d’horloge’’ générée par l’unité de commande. L’oscillateur fournissant le signal d’horloge peut être intégré sur la puce silicium du processeur. Ce n’est généralement pas le cas pour au moins deux raisons : Tout d’abord, la fréquence d’oscillation est sensible à la variation de température. Or celle d’un microprocesseur n’est pas stable. Il serait possible d’observer une dérive fatale, la fréquence augmentant avec la température et la température augmentant avec la vitesse de fonctionnement. Cela poserait également des problèmes de synchronisation avec les composants externes au CPU. Par ailleurs en embarquant une horloge dans la puce du processeur, la fréquence de celui ci serait figée par le constructeur. Or les galettes de silicium ne sont jamais parfaitement homogènes. Les performances peuvent varier selon les zones. Le constructeur serait alors obligé d’ajuster la fréquence de l’oscillateur au plus bas, en prenant un facteur de sécurité. Alors qu’actuellement, les processeurs sont triés et vendus à un prix variant selon leur vitesse de fonctionnement. On préfère donc un oscillateur interne synchronisé sur un signale d’horloge externe, souvent fourni par un oscillateur à quartz. 1. Ceux qui disposent d’un oscillateur intégré dans la même puce, en conséquence il suffit de leur connecter un quartz ou un réseau RC externe pour fixer la fréquence d’horloge.
R C
Horloge
Horloge Quartz CPU
2.
CPU
Ceux qui ne disposent pas d’oscillateur intégré dans la puce, en conséquence il est prévu en dehors du CPU.
Oscillateur
Horloge
CPU
Généralement les fabricants des microprocesseurs prévoient des circuits intégrés spécialisés qui permettent de générer l’horloge. VII.2
Exécution d’une instruction
Le seul langage compris par l'unité centrale (CPU) est le langage machine. Le programme exécutable est donc obligatoirement, en langage machine. Ce programme est exécuté instruction par instruction, par la CPU à l'aide de ses registres internes. Une période élémentaire d’horloge est appelée micro-cycle. L’ensemble des micro-cycles qui concourent à l’exécution d’une instruction est appelé cycle-machine. L’exécution d’une instruction peut faire intervenir un cycle machine ou plusieurs. La réalisation de toute instruction s'effectue selon le cycle extraction décodage exécution qui se décompose comme suit (séquence de trois (3) phases) : 1. Recherche
(Fetch) ;
2. Décodage
(Decode) ;
3. Exécution
(Execute).
La première phase est la phase d’accès à l’instruction (Fetch), le contenu du compteur Ordinal (PC) est placé sur le bus d’adresse et une case mémoire est sélectionnée. La mémoire reçoit un ordre de lecture, les données sont transférées à l’intérieur du microprocesseur vers le registre instruction. Le cycle d’accès Fech est terminé. Le deuxième cycle est le cycle de décodage (Decode). En effet le contenu du registre d’instruction est décodé par l’unité de commande : le code de l’instruction est alors identifié.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
15
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémentée de façon à pointer vers l’instruction suivante, puis le processus de lecture et de décodage des instructions recommence. L e troisième cycle est le dernier cycle est le cycle d’exécution (Execute), dans cette étape l’unité de commande génère les signaux appropriés et l’instruction est exécutée. Cette étape est plus ou moins longue suivant la complexité de l'instruction. A la suite de chaque instruction, un registre du microprocesseur est actualisé en fonction du dernier résultat : c’est le registre d’état du microprocesseur. Chacun des bits du registre d’état est un indicateur d’état ou flag (drapeau). Toutes ces étapes (lecture de l’instruction, décodage, exécution) sont synchronisées par un séquenceur qui assure le bon déroulement des opérations :
Pour exécuter le programme contenu dans la mémoire centrale, le séquenceur du microprocesseur exécute luimême un programme appelé micro-code, contenu dans une mémoire morte à l’intérieur du microprocesseur. Le séquenceur est dirigé par une horloge qui délivre un signal de fréquence donnée permettant d’enchaîner les différentes étapes de l’exécution d’une instruction :
Figure 10 : Cycle d'exécution d'une instruction
Chaque instruction est caractérisée par le nombre de périodes d’horloge (ou microcycles) qu’elle utilise (donnée fournie par le fabricant du microprocesseur). Exemple : horloge `a 5 MHz, période T = 1/f = 0, 2 µs. Si l’instruction s’exécute en 3 microcycles, la durée d’exécution de l’instruction est : 3 × 0,2 = 0, 6 µs. L’horloge est constituée par un oscillateur `a quartz dont les circuits peuvent être internes ou externes au microprocesseur. La longueur d’une instruction peut être sur 8, 16, 32 ou 64 bits. Dans le cas où la longueur de l’instruction serait supérieure au mot traité, l’unité de commande doit retourner vers la mémoire pour transférer les mots suivants successivement à l’intérieur du microprocesseur Le premier mot de l’instruction contient toujours son code opération (opcode), c’est à dire le code binaire qui indique la nature de l’opération à exécuter.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
16
SYSTEMES MICROPROGRAMMES – Ch-01 – Introduction aux microprocesseurs
Les autres mots représentent généralement les données qui doivent être utilisées par l’instruction. Ces informations ne sont pas envoyées au décodeur.
VIII. Les circuits d’entrées / sorties Le microprocesseur est relié au monde extérieur à travers des circuits d’entrées/sorties. Parmi ces liaisons on peut citer : Des relations avec l’homme via des claviers, des imprimantes, des écrans, etc.
Des relations avec l’environnement grâce à des capteurs, des relais, des systèmes électromécaniques, des convertisseurs A/N et N/A, etc.
Des mémoires de masse : bandes magnétiques, cartes perforées, disques magnétiques souples et rigides, cassettes magnétiques, disques optiques, etc.
…
Selon leurs principes de fonctionnement les circuits d’E/S peuvent se classer principalement en deux catégories : - Les circuits d’E/S parallèles ; VIII.1
Les circuits d’E/S séries ;
Circuits d’E/S parallèles
La transmission entre les circuits d’E/S et le périphérique se fait sur un ensemble de fils en parallèle (n bits). VIII.2
Circuits d’E/S séries
La transmission entre les circuits d’E/S et le périphérique se fait sur un fils en série.
IX. Synoptique Général d’un système à microprocesseur La figure suivante illustre un synoptique simplifié d’un système à microprocesseur.
Microprocesseur
RAM
ROM
Bus d’adresses Bus de données Bus de commandes I/O
Périphériques
Figure 11 : Synoptique d'un système à microprocesseur
X. Conclusion L’arrivée du microprocesseur a provoqué un grand progrès dans la commande et le traitement de l’information par l’introduction des systèmes à microprocesseur entre autre l’ordinateur. Le système à microprocesseur est devenu actuellement un outil indispensable.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
17
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
Chapitre 2 - Le Microprocesseur 8086 d’Intel
I. Introduction La gamme de microprocesseurs 80x86 équipe les micro-ordinateurs de type PC et compatibles. Les premiers modèles de PC, commercialisés au début des années 1980, utilisaient le 8086, un microprocesseur 16 bits. Le modèles suivants ont utilisé successivement le 80286, 80386, 80486 et Pentium (ou 80586). Chacun de ces processeurs est plus puissant que les précédents : augmentation de la fréquence d'horloge, de la largeur de bus (32 bits d'adresse et de données), introduction de nouvelles instructions (par exemple calcul sur les réels) et ajout de registres. Chacun d'entre eux est compatible avec les modèles précédents; un programme écrit dans le langage machine du 286 peut s'exécuter sans modification sur un 486. L'inverse n'est pas vrai, puisque chaque génération a ajouté des instructions nouvelles. On parle donc de compatibilité ascendante. Du fait de cette compatibilité, il est possible de programmer le 486, comme un processeur 16 bits. C'est ce que nous ferons par souci de simplification. Ainsi, nous n'utiliserons (dans ce module) que des registres de 16 bits, avec un bus d'adresses de 20 bits pour gérer jusqu'a 1Mo de mémoire.
Voici les caractéristiques du processeur simplifié que nous étudierons : • Bus de données 16 bits; • Bus d'adresse 20 bits; • Registres : o Accumulateur AX (16 bits); o Registres auxiliaires BX , CX et DX (16 bits); o Pointeur d'instruction IP (16 bits); o Registres segments CS, DS, SS et EX (16 bits); o Pointeur de pile SP (16 bits), et pointeur BP (16 bits). Nous verrons plus loin que les registres de données de 16 bits peuvent parfois être utilisés comme deux registres indépendants de 8 bits (AX devient la paire (AH, AL)). Noter que nous évoquons ici uniquement les registres qui apparaissent explicitement dans l'écriture des instructions, et pas les registres intermédiaires.
II.
Structure interne du microprocesseur 8086
Le 8086 se présente sous la forme d’un boîtier DIP de 40 broches. Il adresse 1 Mo de mémoires et 64ko d’entrées/sorties pour un bus d’adresse de 20 bits. La taille des registres est limitée à 16 bits. Avec un registre de 16 bits on ne peut adresser que 64 ko de mémoire au lieu de 1 Mo adressable par le microprocesseur. Pour pouvoir adresser toute la mémoire adressable, elle est divisée en 16 segments ou 16 pages de 64 ko. Le 8086 utilise aussi le multiplexage dans le temps du Bus de Données et du Bus d’Adresse. L’inconvénient du multiplexage est le ralentissement qu’il provoque car il ne peut y avoir chevauchement entre les données et les adresses. Le 8086 a un Bus de Données de 16 bits et peut fonctionner en 2 modes :
-
Mode minimum ; Mode maximum.
En mode minimum le 8086 ne peut adresser que 64 ko. Dans ce cas le microprocesseur est associé à un contrôleur de bus (8288) pour générer les signaux de contrôle. Le 8086 se compose de deux parties (fig. 1) :
II.1
L’Unité d’Exécution (Execute Unite EU) ; L’Unité d’Interface du Bus (Bus Interface Unité BIU). L’Unité d’Exécution (Execute Unite EU). Le rôle de l’Unité d’Exécution (EU) est d’exécuter les instructions. L’EU est constituée de : a) Les registres généraux de données et d’adresses ; b) Le registre d’états ; c) L’Unité Arithmétique et Logique (UAL) ; d) L’Unité de Contrôle.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
18
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
AH BH CH DH
AL BL CL DL
IP 16
SI DI BP SP
+
EU
x
Interface avec Bus externe
BUS INTERNE (16 Bits)
Indicateurs
CS DS SS ES
ALU
UC BIU File d’attente
Fig. 1 : Organisation interne du 8086 a) Les registres généraux de données et d’adresses Avec ces registres, on peut effectuer les opérations arithmétiques et logiques. Il y a 8 registres à 16 bits chacun (Fig. 2). Les 4 registres AX, BX, CX et DX sont scindés en deux registres de 8 bits chacun. Les 4 registres de données : AX : registre ACCUMULATEUR indispensable aux opérations de transferts et de calculs. Les opérations de multiplications, de divisions et la conversion en BCD se font dans l’accumulateur. Ainsi que les opérations de traitement de chaînes de caractères. BX : registre de BASE utilisé dans les calcules d’adresses. CX : registre COMPTEUR, il sert de compteur pour les boucles, les décalages et les rotations. CX est le compteur à 16 bits alors que CL est celui de 8 bits lors des décalages et rotations. DX : registre qui reçoit les données lors des transferts en entrées/sorties. DX peut atteindre une extension de 32 bits pour les multiplications et les divisions de mots. 0 AL AX BH
BL BX
CH
CL CX
DH
DL DX
Accumulateur Base Compteur
Registres généraux
7
Donnée
SI
Index Source
DI
Index Destination
BP
Pointeur de Base
SP
Pointeur de Pile
IP
Pointeur d’instructions
FLAGS
Registre d’Etats
CS
Segment de Code
DS
Segment de Données
ES
Segment « Extra »
SS
Segment de Pile
Registres adressage
8 AH
Registres de segmentation
15
Fig. 2 : Les Registres Internes du 8086
SI : DI : BP : SP :
Les 4 autres registres sont des registres d’adressages à l’intèrieur d’un segment : (Source Index) sert comme pointeur pour les opérations sur les chaînes et aux calculs d’adresses. (Destination Index) sert comme pointeur pour les opérations sur les chaînes et aux calculs d’adresses. (Base pointer) il a la même fonction que BX. Il sert comme pointeur de base. (Stack Pointer) pointe le sommet de la PILE de sauvegarde des données de l’utilisateur.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
19
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
Les registres SP et BP pointent vers une adresse à l’intèrieur de la PILE. Les registres d’Index contiennent une adresse d’une position à l’intèrieur du segment des données. Les registres de données et d’adressages à l’intèrieur d’un segment forment ensemble les REGISTRES GENERAUX. b) Le registre d’états C’est un registre de 16 bits. Neuf (9) de ces bits (Flags i.e. indicateurs) sont utilisés et ont un nom particulier (Fig. 3).
O D I T S Z A P Fig. 3 : Registre d’Etat du 8086
C
C CF (Carry Flag) Indicateur de Retenue : il prend la valeur 1 si le bit de haut niveau a été perdu, sinon il sera mis à zéro. Exemple 1 : MOV AL, 82H soit 1000 0010 ADD AL,92 H + 1001 0010 1 0001 0100 soit : 14 H dans AL CF et (CF) = 1 retenue. Exemple 1 :
MOV AX, 9A00H ADD AX, 2 H
soit 1001 1010 0000 0000 + 0000 0000 0000 0010 1001 1010 0000 0010 CF
soit : 9A02 H dans AL et (CF) = 0 retenue.
P PF (Parity Flag) Indicateur de parité : lorsque nous effectuons la somme modulo 2 des 8 bits de poids faibles ; si le résultat de la somme est nul alors la parité est paire PF =1, sinon la parité est impaire et PF = 0. A AF (Auxiliary Flag) Indicateur de retenue auxiliaire : la retenue auxiliaire est celle générée après une opération arithmétique sur 1 octet par les 4 bits de poids faibles et par les 8 bits de poids faibles pour une opération sur 2 octets. Z ZF (Zero Flag) Indicateur de zéro : ZF sera mis à 1 si le résultat de l’opération est zéro et sera mis à 0 dans tous les autres cas. S SF (Signe Flag) Indicateur de signe : SF=1 si le résultat est négatif est SF=0 si il est positif. T TF (Trap Flag) Indicateur de mode pas à pas (Trace) : TF fait effectuer au microprocesseur les instructions pas à pas. Quant TF est positionné à 1, le 8086 génère une interruption après l’exécution de chaque instruction. TF est mis à 0 lorsque le registre d’état est envoyé dans la pile. I IF (Interrupt Flag) Indicateur d’autorisation d’interruption : IF autorise ou interdit les interruptions masquables. D DF (Direction Flag) Indicateur de direction : il indique que la manipulation d’une chaîne de caractères s’effectue dans le sens croissant ou décroissant. O OF (Overflow Flag) Indicateur de dépassement : OF est positionné chaque fois qu’il y’a dépassement avec un nombre signé. OF = 1 dans le cas où une retenue sera placée dans le bit de haut niveau, mais ne sera pas perdue ; dans les autres cas OF =0. Remarque : DF, IF, TF sont des bits de contrôles et non d’états. c) L’Unité Arithmétique et Logique : l’UAL réalise le opérations suivantes : Arithmétiques, Logiques, Incrémentations, Décrémentations, etc. En plus l’UAL effectue les comparaisons et gère les indicateurs (Flags) qui donnent une idée sur les résultats des opérations. d) L’Unité de Commande. Prend les instructions à partir de la liste d’attente est les transmet à l’unité d’exécution ; pendant ce temps l’Unité d’Interface Bus continue à remplir la file d’attente de telle façon que la file d’attente soit toujours alimenté et contient toujours des instructions à exécuter. Pendant que l’Unté d’Exécution exécute une instruction, l’Interface Bus cherche en mémoire les instructions suivantes et les place dans la file d’attente de 6 octets de profondeur. II.2
L’Unité d’Interface Bus. Cette unité se compose de :
a) La logique d’interface avec le bus du 8086 ; b) La file d’attente ; c) Les registres de calcul d’adresses (IP et Segments). a) La logique d’interface avec le bus du 8086.
Les données circulent entre la mémoire centrale (MC) et l’Unité d’Exécution à travers l’interface de mémoire. Le 8086 a un Bus de données de 16 bits. La lecture des mots d’instructions se fait dès qu’il y’a deux places libres dans la file d’attente, et la lecture des octets se fait dès qu’il y’a une place vide dans la file d’attente. Quand la file d’attente est vide, l’EU attend que l’Interface de Bus place des instructions dans la file d’attente. Quand l’Unité d’Exécution effectue un saut dans le programme, le contenu de la file d’attente est alors effacé et les instructions s’y trouvant ne sont plus à exécuter.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
20
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
Les Bus d’Adresses et de Données sont multiplexés dans le temps. Un Cycle d’Accès à la mémoire ou à un Port d’E/S utilise au moins quatre périodes d’horloge (CLK). Les instructions sont lues et placées avant exécution deux octets par deux octets dans la file d’attente. A ce moment le bus est inoccupé. L’exécution d’une instruction peut être plus rapide que le remplissage de la file d’attente. b) La file d’attente. Le 8086 dispose d’une file d’attente de 6 (six) octets permettent de stocker les instructions en attente d’exécution. Cette technique, dite du QUEUE, permet d’augmenter les performances du système. C’est une structure « parallèle », permettant une vitesse de traitement appréciable. c) Les registres de calcul d’adresses (IP et Segments). Ces quatre registres permettent au microprocesseur d’adresser 256 ko de mémoire. Le 8086 accède aux autres parties de la mémoire par le changement des contenus des registres segments. Ces registres sont chargés au travers de AX, parce qu’il n’existe pas d’instructions qui permet de transférer directement les données immédiates dans ces registres. Les registres de segments sont des registres à usages spéciaux. Le microprocesseur utilise un ou plusieurs registres de segment pour accéder à la mémoire. Ces registres permettent au programmeur d’accéder simultanément à quatre zones d’adresses différentes. Chaque zone d’adresse peut contenir jusqu’à 64 ko de données. Ces registres peuvent être lus et modifiés par programmation. Ces registres sont :
CS (Code Segment) Segment de Code : Le contenu de ce registre définit le début du segment de la mémoire contenant du code. Lorsque le processeur extrait les instructions, il combine l’adresse contenue dans le registre IP avec l’adresse de début de segment placée dans CS. Les adresses des différentes instructions d’un programme sont relatives au contenu de CS. CS est chargé avec FFFFH à l’initialisation. A cette adresse (IP = 0000H) une instruction de saut permet le chargement de CS et IP avec l’adresse de début de programme.
IP (Instruction Pointer) Compteur Ordinal ou Pointeur d’instruction : Indique la prochaine instruction à exécuter, relativement à CS. DS (Data Segment) Segment de Données : Indique le début du segment de données. Il est utilisé pour indiquer l’emplacement des données ou comme opérande source pour les instructions de manipulation de caractères. SS (Stack Segments) Segment de Pile : Utilisé pour toutes les opérations sur la pile. Il définit le début de segment de la pile. ES (Extra Segment) Segment de Données « Supplémentaire » : Définit le segment « extra », qui peut être utilisé comme zone secondaire de données à usage général. Il est également utilisé comme opérande de destination avec les instructions de manipulation de caractères. Lorsque les besoins de stockage sont minimes, le segment Extra n’est pas nécessaire.
III. III.1
Structure Externe du Microprocesseur 8086. Brochage du microprocesseur 8086
GND
1
AD14 AD13
23
AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
8086
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
VCC AD15 A16 A17 A18 A19 BHE
/S3 /S4 /S5 /S6 /S7
NM/MX
RD HOLD HOLDA WR M/IO /S2 DT/R /S1 DEN /SO ALE INTA TEST READY RESET
Fig. 4 : Brochage du 8086
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
21
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
AD0 – AD15 : (bidirectionnel), Bus multiplexé d’Adresses et de Données ; Bus de Données de 16 bits et les 16 bits de poids faible du Bus d’Adresses. A16/S3 – A19/S6 : (sortie), Partie haute du Bus d’Adresses (4 bits de poids forts) et 4 bits d’Etats multiplexés du processeur. CLK : (Clock) Entrée horloge.
RD : (Read) Sélection de lecture d’une donnée mémoire ou une donnée d’E/S. BHE /S7 : (Byte High Enable) Sélection de l’octet le plus haut sur le bus de données (D8 – D15) et le bit d’Etat S7. En mode lecture ou en mode écriture (que ce soit en configuration Minimum ou Maximum) du microprocesseur sur des octets, le signal BHE valide l’octet de poids fort. Si l’instruction porte sur un octet le microprocesseur indique s’il s’agit de l’octet de poids fort ; si l’instruction porte sur un mot de 16 bits le microprocesseur lit deux octets. RESET : Remise à l’état initial, ou entrée d’initialisation du 8086. READY : Entrée/Sortie lente, indique aussi la fin de transfert et synchronise avec la périphérique. NMI : (No Maskable Interrupt) demande d’interruption non masquable. INTR : (Maskable Interrupt Request ) demande d’interruption masquable.
TEST : Broche de test utilisé par l’instruction WAIT pour la synchronisation avec les éléments externes. NM/ MX : Mode de fonctionnement du Bus de Contrôle : Minimum ou Maximum. - Si NM/ MX =1 alors mode de fonctionnement Minimum. o
Génère sur les broches 24 à 31 tous les signaux de contrôle nécessaire à ce mode :
INTA , ALE, DEN , DT/ R , M/ IO , WR , HOLD , HLDA. -
Si
NM/ MX =0 alors mode de fonctionnement Maximum. o
Le circuit de contrôle de Bus décode les signaux S0, S1, S2 élaborés sur les broches 26, 27 et 28, pour donner les signaux de contrôle destinés à un système de haut de gamme.
S0, S1, S2 : Bits d’Etats. Le décodage de ces trois bits par le circuit 8288, fournit les signaux sur le bus de contrôle (Tab. 1). S0 S1 S2 Type de transfert 0 0 0 0 1 1 1
0 0 Prise en compte d’une interruption. 0 1 Sélection du mode lecture d’Entrée/Sortie. 1 0 Sélection du mode d’écriture d’E/S. 1 1 HALT. 0 0 Recherche d’une instruction. 0 1 Sélection du mode de lecture de la mémoire 1 0 Sélection du mode d’écriture de la mémoire Tab. 1 : Signaux d’Etats caractérisant un type de transfert.
QS0, QS1 : (Queue Status) Etat de la file d’attente des instructions.
RQ/ GT0 , RQ/ GT1 : (Request / Grant) Demande d’accès au Bus et autorisation de fonctionnement en multiprocesseurs.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
22
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
LOCK : Interdiction d’accès au Bus en fonctionnement multiprocesseur. Cela se traduit par un verrouillage du Bus Commun d’un système multiprocesseurs pendant l’instruction préfixée par « LOCK ». GND : Masse (0 Volt). Vcc : Tension d’alimentation +5V.
DT/ R : (Data Transmit/Receive) Contrôle de la direction des transferts pendant les temps T2, T3 et T4 ; autrement dit : définit le sens de passage des buffers bidirectionnels placés sur le Bus de Données. DEN : (Data Enable) Validation du Latch des Données, et activation de ces buffers sur le Bus de Données. -
DEN = 0 les buffers sont actifs. DEN = 1 les buffers sont en haute impédance. Le sens de passage est fixé par les conditions suivantes :
DT/ R = 1 le transfert se fait du microprocesseur vers l’extérieur. o Si DT/ R = 0 le transfert se fait de l’extérieur vers microprocesseur.
o
Si
HOLD : Entrée de demande d’accès au Bus par un processeur. HLDA : Sortie d’autorisation d’accès au Bus à un autre processeur.
INTA : (Interrupt Acknowledgement) Validation d’interruption. Signal d’acquittement d’une interruption masquable. WR : (Write) Ecriture, signale d’écriture de données mémoires ou Entrées/Sorties. M/ IO : Demande d’opération avec les mémoires ou les E/S. ALE : (Adress Latch Enable) Validation du Latch d’Adresses , pendant le temps T1 du Cycle d’Horloge , il donne le signal de mémorisation de l’adresse dans le Latch. Remarque : Utilisation des broches en fonction du mode de fonctionnement. Broches 31 30 29 28 27 26 Mode Minimum HOLD HLDA WR M/ IO DT/ R DEN Maximum III.2
RQ/ GT0
RQ/ GT1
LOCK
S2
S1
S0
25
24
ALE
INTA
QS0
QS1
Les Entrées /Sorties du microprocesseur 8086
Le 8086 dispose d’un espace de 64 ko de Ports d’E/S distinctes de l’espace mémoire. Les entrées et les sorties s’effectuent par l’intermédiaire du registre Accumulateur à 16 bits (AX) ou à 8 bits (AL). Le signal M/ IO , situé sur la broche 28, est utilisé pour indiquer une opération d’E/S. Les lignes AD16 – AD19 sont mis à zéro lors de l’opération d’E/S. le 8086 envoie sur la broche ALE un signal de validation de l’adresse dans le registre « Tampon ». En mode Maximum ( NM/ MX = 0), le 8086 peut adresser 256 ko. Pour fonctionner en mode Maximum le 8086 a besoin d’un Système de Contrôle. Ce système reçoit du microprocesseur l’état des signaux S0, S1, S2 (Tab. 1). L’opération de transfert nécessite en général quatre (4) cycles.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
23
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
LECTURE : Si le microprocesseur désire lire le contenu de la mémoire à une adresse précise, il émettra cette adresse par les broches d’adressages. Des signaux de contrôle seront émis par d’autres broches pour indiquer que la fonction est une lecture de la mémoire. Ces signaux sont décodés et la demande est transférée à la puce appropriée en respectant une limite de temps (fig. 5). Pendant le cycle T1 : Le 8086 envoie une adresse sur 16 bits et active les signaux suivants : • •
M/ IO : pour sélectionner la mémoire d’E/S. DT/ R : pour sélectionner les sens de transfert de l’amplificateur bidirectionnel 8286/8287.
•
BHE : pour valider du Bus (poids fort).
Pendant ce cycle les poids d’adresses AD0 – AD15, ainsi que BHE seront stable ; ceci pour conserver l’information d’adresse et de sélection pendant le transfert. Cette adresse est sauvegardée dans les registres des puce 8282/8287 validées par le signal ALE. Pendant le cycle T2 : •
Au début de cycle les lignes d’adresses passent à l’état Haute Impédance et prend la valeur de 1 ;
• •
Au même moment RD passe à l’état bas. ; En ce moment le microprocesseur sera prêt à recevoir une donnée.
BHE
•
Le signal DEN (validation du 8286/8287) passe ensuite à l’état bas autorisant le chargement de la donnée qui apparaît sur le Bus au milieu du cycle T2, et reste stable pendant les cycles T3 et T4. Pendant le cycle T3 : • Les circuits d’adresses indiquent par l’intermédiaire de la broche (READY) du 8086 que la donnée est prête. Pendant le cycle T4 : •
Les lignes
DEN , RD , DT/ R reviennent à l’état haut indiquant la fin de la lecture.
ECRITURE : L’opération d’écriture suit les même étapes que la lecture, à la seule différence que c’est la ligne WR qui est utilisée à la place de la ligne Pendant le cycle T2 : •
RD .
WR passe à l’état bas et DT/ R reste à l’état haut, pour indiquer qu ‘à ce moment le microprocesseur 8086 transfère des données vers l’extérieur par l’intermédiaire des puce 8226 et 8287. T1
T2
T3
CLK
T4
T1 Du prochain cycle
M/IO
ALE AD15-AD0 WR
Fig. 5a : séquence d’écriture
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
24
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
Vcc MN/MX M/IO INTA
Pour le Contrôle du bus
RD WR
8086
DT/R DEN ALE
STB OE 8282
BHE AD0-AD15 A16-A19
STB STB 8286
Fig. 5b : Configuration d’un système en mode minimum autour du 8086 III.3
Les interruptions
Les interruptions du 8086 sont vectorisées , c’est à dire que les adresses des sous-programmes qui gèrent ces interruptions sont stockés à des emplacements mémoires organisés sous la forme d’une colonne de vecteurs d’interruptions situés entre 0000H et 03FFH (fig. 6). Le vecteur est formé de deux mots : - CS (Segment de Code) 2octets ; - IP (Compteur Ordinal) 2 octets. Le 8086 possède 256 vecteurs d’interruptions. Chaque vecteur occupe 4 octets. Ces 256 vecteurs occupent 1 ko et son connus par leur emplacement (Localisation). On dit vecteur de type 0, vecteur de type 1,…, vecteur de type 255. les vecteurs de type 0 à 31 sont réservés par le constructeur. Adresse mémoire 3FF 3FC …………………. …………………. 12 10 0E 0C 0A 08 06 04 02 00
Entrée de la Table CS 255 IP 255 …………………. …………………. CS 4 IP 4 CS 3 IP 3 CS 2 IP 2 CS 1 IP 1 CS 0 IP 0
Définition du vecteur Vecteur 255 ……………… ……………… Vecteur 4 (Overflow) Vecteur 3 (Logicielle) Vecteur 2 (NMI) Vecteur 1 (Pas à Pas) Vecteur 0 (ERREUR DIV / 0)
Fig. 6 : organisation de la table d’interruptions. Il y’a deux sources d’interruptions : - Interruptions internes ; - Interruptions externes. 1) les interruptions internes Ces interruptions apparaissent suite à : a) Division par zéro : ce qui provoque une interruption du microprocesseur et son branchement à l’interruption de type 0. b) En mode pas à pas : quand l’indicateur du mode pas à pas (TF) est positionné à 1, une interruption est généré e par le microprocesseur après chaque exécution de chaque instruction. Le microprocesseur 8086 ne dispose pas d’une broche de
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
25
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
demande d’interruption pas à pas. Le fonctionnement en mode pas à pas se fait par logiciel. c) Les instructions d’interruption : ces interruptions naissent suite d’appel d’un sous programme à une adresse située dans l’un des vecteurs d’interruptions. 2) les interruptions externes Ces interruptions sont définies par trois broches : a) NMI (No Maskable Interrupt) : ne peut être inhibée, elle intervient lors d’évènements externes (perte d’alimentation, détection d’erreur). La logique de détection d’erreurs a été incluse pour détecter les erreurs de parité dans la mémoire vive. Ces erreurs sont communiquées à l’unité centrale via la ligne d’interruption non masquable (NMI). NMI est le moins prioritaire des interruptions externes. Le vecteur d’interruption NMI est placé à l’adresse 0008H. b) INTR (Interrupt Request) : interruption masquable par l’indicateur d’interruption (IF), fournie par un gestionnaire d’interruptions spécialisé (le contrôleur d’interruption 8259A ). INTR est prioritaire par rapport à NMI. c) RESET : elle est la plus prioritaire de ces trois interruptions. Toute opération matérielle et logicielle sera abandonnée lors de l’activation de cette broche RESET. Quand RESET est activée le registre d’indicateurs d’état est mis à zéro ; les registres DS, ES, SS et IP sont mis à zéro ; le registre CS est forcé à FFFFH. A la demande d’une interruption : Le 8086 force à zéro IF et TF car : IF =0 interdit une nouvelle interruption par INTR. TF =0 supprime le mode Pas – à – Pas. Il empile le contenu du registre d’état et IP dans la pile après avoir invalidé les interruptions, Et effectue le branchement à l’adresse désirée. Après l’exécution d’un sous-programme d’interruption, l’instruction IRET restaure CS, IP et le registre d’états. Les indicateurs IF et TF retrouvent leurs états d’origines. III.4
Organisation de la mémoire
L’unité d’adressage de l’espace mémoire du 8086 est l’octet ; ce qui donne une taille d’espace adressable de 1 Mo (1048576 octets). La zone d’adresses est comprise entre l’adresse 00000H et l’adresse FFFFFH. L’espace mémoire est divisé en segments de 64 ko (1 page). Le segment est physiquement implanté à une adresse divisible par 16. L’adresse sur 20 bits avec des nombres de 16 bits est réalisée par : Définition d’un segment (de 64 ko une page). la position dans le segment peut être définie par un nombre de 16 bits. Le registre de segment fixe l’emplacement du Segment dans le Mega – octets. Chacun des registres suivants définit une position d’un segment de 64 ko. : o CS : référence à une instruction ; o DS : référence à une donnée ; o SS : référence à la pile ; o ES : référence à une zone supplémentaire. Cette position de segment peut être placée n’importe où dans la mémoire et les segments peuvent se recouvrir (chevaucher partiellement). - Les déplacements se font à partir du début du segment ; ce qui permet une relogeabilité totale des programmes et des données. Ces quatre segments sont adressables et donnent quatre segments courants ( CS, DS, SS, ES), dont les adresses d’emplacement sont calculées à partir des contenus des registres des segments. -
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
26
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
Calcul de l’adresse physique à partir de l’adresse logique : Adresse physique = Adresse du Segment + Déplacement
15
0 Déplacement dans le
Adresse Effective
segment
0
15 Registre SEGMENT
0000 +
15
0 Adresse Physique
Adresse envoyée sur le Bus
Exemple : CS = F2CA et IP = DA52 Adresse physique = F2CA0 + DA52 = 1006F2.
IV.
Assembleur du 8086 IV.1 IV.1.1
Présentation du langage l'assembleur Qu'est ce que le langage assembleur ?
L'assembleur est un langage de programmation (c'est-à-dire un moyen pour l'homme de communiquer avec la machine) de très bas niveau (entendez par là "très près de la machine"). En effet, la plupart des langages de programmation (C/C++, Pascal, Java, etc.) ont pour but de simplifier la tâche du programmeur en lui proposant des instructions "prêtes à l'emploi" pour les tâches habituelles d'un programme. Par exemple, pour afficher un texte à l'écran, en langage C, vous faites tout naturellement : printf ("Bonjour le Monde!\n"); Mais en assembleur, vous êtes obligé de comprendre comment ça ce passe au niveau du processeur (sauf si vous utilisez les interruptions du DOS...). De plus, en général, il faut beaucoup de lignes de code pour faire peu de chose... et le temps de programmation en est d'autant plus long. Mais alors, quels sont les avantages de l'assembleur ? En fait, étant donné que vous programmez directement le processeur, vous pouvez vous-même effectuer des optimisations sur votre code, suivant les cas ; ce que le compilateur ne fait pas. IV.1.2
Avantages et inconvénients du langage assembleur
Si on compare l'assembleur aux langages de haut niveau, on peut citer comme inconvénients : • beaucoup de code pour faire peu • temps de programmation plus long • bugs plus fréquents • débogage plus difficile Mais il n'y a pas que des points faibles : • • • • IV.2 IV.2.1
rapidité d'exécution code compact (peu d'octets) on peut absolument tout faire on peut optimiser les calculs
Programmation du microprocesseur 8086 Principes d’adressage
Le mode d’adressage caractérise la façon dont est obtenue l’adresse des opérandes d’une instruction. Plus un microprocesseur offre de mode d’adressage, plus le programme sera puissant. IV.2.2
Adressage registre ou (implicite, inhérent)
L’opération se fait entre registre et le registre concerné est contenu dans le code de l’instruction. Exemple : MOV AX, BX ; AXBX ADD AX, BX ; AXAX + BX MOV AX, 7 ; AX7
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
27
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
IV.2.3
Adressage immédiat
Dans ce cas l’information à utiliser est directement donnée dans le code et spécifiée comme une constante en fait partie. Exemple : MOV BX, 6 ; BX6 MOV BYTE PTR [SI], 5 ; [SI]05 (1 octet)( relativement à DS) MOV WORD PTR [SI], 6 ; [SI]0006 (2 octet)( relativement à DS) Les expressions « BYTE PTR » et « WORD PTR » indique la taille de l’emplacement mémoire considérée. IV.2.4
Adressage mémoire
IV.2.4.1
Adressage mémoire direct
L’adresse est donnée directement et se fait à l’intérieur du segment DS. L’adresse est ici un déplacement sur 1 octet. C’est un adressage direct mais il est relatif à l’adresse de début du segment. Exemple : MOV AX, Variable ; AX [Variable]. Le contenu de l’adressa mémoire représentée ‘symboliquement’ par Variable est placé dans AX.
IV.2.4.2
Exemple :
Adressage mémoire indirect
; AX[BX] Le contenu du registre est interprété comme étant une adresse en mémoire et le contenu de cette adresse mémoire est déplacé dans le registre AX. Chacun des registres BX, BP, SI et DI peuvent être utilisé pour l’adressage indirect. IV.2.4.2.1
MOV AX, [BX]
Adressage base
Le contenu de BX auquel est ajouté un déplacement dans le segment DS, nous permet d’obtenir l’adresse effective. Le contenu de BP auquel est ajouté un déplacement dans le segment SS, nous permet d’obtenir l’adresse effective (AX) (BX) + déplacement (sur 1 ou 2 octets) EA = (BX) : indirect base sur DS EA = (BP) : indirect base sur SS EA = (BX) + déplacement : indirect base et déplacement sur DS EA = (BP) + déplacement : indirect base et déplacement sur SS Exemple : MOV AX, [BX + 5] ; AX [BX+5] IV.2.4.2.2
Adressage indexe
On ajoute le déplacement au contenu de SI ou DI. Ce déplacement est sur 5 ou 16 bits et se passe dans DS. EA = (SI) : indirect indexé EA = (DI) : indirect indexé EA = (SI) + déplacement : indirect indexé et déplacement EA = (DI)+ déplacement : indirect indexé et déplacement IV.2.4.2.3
Adresse base – indexe
On ajoute au contenu de BX ou BP le contenu de SI ou DI, au résultat obtenu on ajoute un déplacement (dans DS) sur 8 ou 16 bits. EA = (BX) + (SI) EA = (BX) + (SI) + déplacement EA = (BX) + (DI) EA = (BX) + (DI) + déplacement EA = (BP) + (SI) EA = (BP) + (SI) + déplacement EA = (BP) + (DI) EA = (BP) + (DI) + déplacement
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
28
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
IV.2.5
Adressage de pile
Le STACK POINTER (SP) pointe le sommet de la pile. SP se trouve toujours dans le segment de pile (SS). La pile se remplie par adresses décroissantes et se vide par adresses croissantes. Les données à empiler ou à dépiler sont des mots (16 bits). La source et la donnée de ces mots peuvent être un registre ou un emplacement mémoire et adressés par un adressage : DIRECT, BASE, INDEXE – BASE, INDEXE. Exemple : PUSH AX ; effectue (SP) (SP)-2 puis [SP] (AX) POP BX ; BX [SP] puis effectue (SP) (SP) + 2 En résumé pour le 8086 : Exemple d’instruction MOV AX, 5 MOV AX, BX MOV AX, DATA1 MOV AX, [BX]
Mode d’adressage Immédiat Registre Direct mémoire Indirect base
MOV AX, [SI]
Indirect index
MOV AX, [BX + 5] MOV AX, [SI + 5] MOV AX, [BX][SI] MOV AX, [BX + DI] MOV AX, [BX][DI] 5 MOV AX, [BX + SI + 5]
Indirect base + déplacement Indirect index + déplacement Indirect base + index
IV.3 IV.3.1 IV.3.1.1
MOV AX, [BX] base sur DS MOV AX, [BP] base sur SS MOV AX, [SI] Indexé par SI sur DS MOV AX, [DI] Indexé par DI sur DS
Indirect base + index + déplacement
Quelques instructions du 8086 Instructions de transfert de données Instruction MOV, XCHG
déplace, échange
MOV destination, source Destination : registre / case mémoire Source : registre / case mémoire / valeur immédiate Exemple : MOV AX, CX ; charger dans AX le contenu de CX, le contenu de CX reste inchangé. XCHG opérande1, opérande2 Opérande1 : registre de donnée / case mémoire Opérande2 : registre de donnée Exemple : XCHG AX, somme ; échange des contenus de AX et somme. IV.3.1.2
Instructions PUSH, POP
Opérations sur les piles
PUSH source Source : registre ou case mémoire dont le contenu doit être placé sur la pile. POP destination Destination : registre ou case mémoire dont la valeur sera affectée par la valeur retirée de la pile. Exemple : PUSH SI ; empile le contenu de SI IV.3.1.3
Instructions IN, OUT
Transfert avec les ports d'E/S
IN accumulateur, source Lecture du port d'E/S source mis dans accumulateur OUT destination, accumulateur Ecriture port d'E/S source avec la donnée dans accumulateur Exemple : IN AL, 7F ; lecture d’un octet du port 7F OUT 3, AL ; écriture d’un octet sur le port 3
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
29
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
IV.3.1.4
Instructions LEA
Chargement registre ou pointeur
LEA registre, opérande Registre : registre 16 bits Opérande : « nom d’étiquette » (déplacement 16 bits) Chargement registre avec adresse effective Exemple : LEA BX, Tableau ; charge l’adresse effective de Tableau IV.3.2 IV.3.2.1
Instructions arithmétique Instructions ADD, ADC, INC, AAA, DAA
Additions
ADD Destination, source : Addition sans retenue (dest) (dest)+(src) ADC Destination, source : Addition avec retenue (dest) (dest)+(src)+(CF) Destination :registre / case mémoire Source : valeur immédiate / registre / case mémoire (à condition que destination ne soit pas une case mémoire) Exemple : ADD AX, BX ; (AX) (AX)+(BX) ADD AL, FA ; (AL) (AL)+FA ADD DX, 1200 ; (DX) (DX)+1200 ADC AX, 800 ; AL) (AL)+800+(CF) INC destination : incrémente destination (dest) (dest)+1 Destination : registre ou mémoire Exemple : INC AX ; (AX) (AX)+1 AAA (Pas d'opérande) Corrige le résultat de l’addition de 2 chiffres ASCII en un nombre BCD Exemple : ADD AL,37H ; avec AX=0034H donne AX=006BH AAA ; donne AX=0101H (soit 7+4=11 en décimal) DAA (Pas d'opérande) Ajuste en BCD le résultat AL d'une addition 2 nombres BCD IV.3.2.2
SUB, SBB, DEC, NEG, CMP, AAS, DAS
soustractions
SUB destination, source : Soustraction sans retenue (dest)(dest)-(src) SBB destination, source : Soustraction avec retenue (dest)=(dest)-(src)-(CF) Exemple : SUB AX, BX ; (AX)(AX)+(BX) SUB AL,4 ; (AL)(AL)+4 DEC destination : Décrémentation de 1 de l'opérande destination NEG destination : Complément a 2 de destination Exemple : NEG AL ; si (AL) = 13H (soit 00010011) après exécution on aura –13H (11101101) CMP opérande1, opérande2 : Comparaison des 2 opérandes (Opérande1) – (opérande2) et positionne les indicateurs Opérande1 : registre / Case mémoire Opérande2 : registre/ case mémoire / valeur AAS (Pas d'opérande) : Ajustement ASCII pour soustraction Corrige le résultat d'une soustraction de 2 nombres ASCII en un nombre binaire Exemple :
SUB AL,37H AAS
; avec AX=3334H donne AX=33FDH ; donne AX=3207H (soit 34-7=27 en décimal)
DAS (Pas d'opérande) : Ajuste en BCD le résultat AL d'une soustraction de 2 nombres BCD
IV.3.2.3
MUL, IMUL, AAM
multiplications
MUL Source : Multiplication non signée AX AL* (src) ou DX:AX AX*(src)
Exemple : MUL BH MUL CX MUL WORD PTR [ABCD]
; AX AL * BH ; DX:AX AX * CX
IMUL Source : Multiplication signée AX AL* (src) ou DX:AX AX*(src) AAM (Pas d'opérande.) Ajustement ASCII pour multiplication
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
30
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
Corrige le résultat binaire d'une multiplication en 2 nombres ASCII en un nombre décimal BCD Exemple : MUL AL, BL ;avec AL=37H et BL=39H donne AX=0C3FH AAM ;donne AX=0603H (soit 7x9=63 en décimal) IV.3.2.4
DIV, IDIV, AAD, CBW, CWD
divisions
DIV dénominateur : Division non signée AH:AL / dénominateur quotient AL et reste AH DX:AX / dénominateur quotient AX et reste DX Exemple : DIV BP ; DX :AX / BP avec quotient AX et reste DX IDIV dénominateur : Division signée AH:AL / dénominateur quotient AL et reste AH DX:AX / dénominateur quotient AX et reste DX AAD (Pas d'opérande.) : Ajustement ASCII pour division Convertit 1 nombre décimal ASCII contenu dans AX en 1 nombre binaire équivalent dans AX
Exemple : AL = 33H et AH = 35H donne AL = 23H et AH = 00H CBW (|Pas d'opérande) : Conversion d'un octet signe en un mot Exemple : CBW ; si AL = 4F (01001111) alors AH = 00 (00000000) CWD (Pas d'opérande) : Conversion mot signe dans AX en double mot étendu dans DX IV.3.3
Instructions logique
NOT, AND Complément, Et OR, XOR Ou inclusif, exclusif NOT destination : Opération logique NON (inverse tous les bits) AND destination, source : ET logique entre 2 opérandes : (dest)(dest) ET (src) OR Destination, source : Opération. logique OU inclusif (dest) (dest) OU (src) XOR Destination, source : OU exclusif : (dest)(dest)XOR(src) TEST
Comparaison logique
TEST Destination, source : ET logique entre destination et source et positionne les indicateurs SHL, SHR, SAL, SAR décalages Décalage logique du contenu d’un registre ou d’une mémoire SHL destination, (1 ou CL) : Décalage logique à gauche non signé de la donnée destination de n bits avec retenue 0
CF
SHR destination, (1 ou CL) : Décalage logique à droite non signé de la donnée destination de n bits avec retenue 0
CF
SAL destination, (1 ou CL) : Décalage arithmétique à gauche signé de la donnée destination de n bits avec retenue (utilisez SHL à sa place même fonction) SAR destination, (1 ou CL) : Décalage arithmétique à droite signé de la donnée destination de n bits avec retenue CF
ROL, ROR,.. Rotation ROL destination, 1 (ou CL) : Rotation gauche de donnée destination de n bits sans retenue CF
ROR destination, 1 (ou CL) : Rotation droite de donnée destination de n bits sans retenue CF
RCL destination, compteur (ou CL) : Rotation gauche de donnée destination de n bits avec retenue CF
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
31
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
RCR destination, compteur (ou CL) : Rotation droite de donnée destination de n bits avec retenu CF
IV.3.4 IV.3.4.1
Instructions de branchement
(Ruptures de séquence)
Sauts inconditionnels
JMP (JuMP) Cette instruction effectue un saut sans condition. Le saut peut être sur un label, une adresse mémoire, ou un registre (adressage direct ou basé). IV.3.4.2
Les branchements conditionnels
Ces instructions permettent de sauter "une partie d'un programme" si une condition est vérifiée. Toutefois si les conditions ne sont pas vérifiées, le programme saute cette instruction et suit son cours normal. Toutes ces instructions ont la forme générale suivante : J… indent, où « J… » est le mnémonique de l’instruction et « ident » est un label qui doit se trouver dans un intervalle de –127 à 128 autour de l’instruction. IV.3.4.2.1
Les tests d’indicateurs
Instruction JZ JE JNZ JNE JC JNC JS JNS JO JNO
IV.3.4.2.2
Condition ZF = 1
Définition Jump if Zero Jump if Equal Jump if Not Zero Jump if Not Equal Jump if Carry Jump if Not Carry Jump if Sign Jump if Not Sign Jump if Overflow Jump if Not Overflow
ZF = 0 CF = 1 CF = 0 SF = 1 SF = 0 OF = 1 OF = 0
Les tests de nombres non signés
Instruction JA JNBE JAE JNB JNC JBE JNA
Condition A>B
Indicateurs CF = 0 et ZF = 0
A >= B
CF = 0
A <= B
JB JC JNAE JE JZ JNE JNZ
A
(CF = 1 et ZF = 1) ou (CF <> ZF) CF = 1
A=B
ZF = 1
A <> B
ZF = 0
IV.3.4.2.3
Définition Jump if Above Jump if Not Below or Equal Jump if Above or Equal Jump if Not Below Jump if Not Carry Jump if Below or Equal Jump if Not Above Jump if Below Jump if Carry Jump if Not Above or Equal Jump if Equal Jump if Zero Jump if Not Equal Jump if Not Zero
Les tests de nombres signés
Instruction JG JNLE JGE JNL JNG JLE
Condition A>B
Indicateurs ZF = 0 et OF = SF
A >= B
SF = OF
A <= B
JNGE JL JE JZ JNE JNZ
A
(ZF = 1) ou (SF <> OF) SF <> OF
A=B
ZF = 1
A <> B
ZF = 0
Définition Jump if Greater Jump if Not Lower or Equal Jump if Greater or Equal Jump if Not Lower Jump if Not Greater Jump if Lower or Equal Jump if Not Greater or Equal Jump if Lower Jump if Equal Jump if Zero Jump if Not Equal Jump if Not Zero
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
32
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
IV.3.4.3
Les Boucles
LOOP déplacement : Saut inconditionnel a IP + déplacement tant que CX <>0 +CX=CX-1 Cette instruction effectue une répétition tant que CX n'est pas égal à zéro; celle ci décrémente CX de 1 à chaque saut. Elle est l'équivalent de : Label1: DEC CX CMP CX, 0 JNE Label1 LOOPx
déplacement Saut conditionnel a IP + déplacement tant que CX <>0 + CX=CX-1 LOOPE / LOOPZ
LOOPNE / LOOPNZ IV.3.4.4
et si ZF=1
et si ZF=0
Appel de sous programme
CALL opérande Appel d'un sous-programme direct ou indirect avec retour sur RET L’opérande est l’adresse qui indique où le contrôle doit être transférer. Le contexte (CS et IP ou IP) est empilé. RET
Retour d'un sous-programme
INT, INTO, Interruption Une interruption est un genre de sous programme contenu dans le BIOS ou dans le système d'exploitation.. INT Type d'interruption (0 a 255) Interruption logicielle INTO Pas d'opérande Validation d'interruption sur overflow OF=1 (correspondant a INT 04H) IRET Pas d'opérande Retour d'interruption avec restitution IP , CS et FLAGS
IV.3.5
Instructions de manipulation de chaînes
MOVS Chaîne destination, chaîne source : déplacement, transferts Transfert de donne et incrémentation de SI et DI(si DF=0) ou décrémentation de SI et DI(si DF=1) de 1 (si MOVSB) ou de 2 (MOVSW) CMPS Destination :
Comparaison, Compare 2 opérandes dans chaînes et incrémentation de SI et DI
SCAS Pas d'opérande : recherche Comparaison de la donnée dans l’accumulateur a une chaîne de données pointée par ES:DI puis (DI)=(DI)-1 si DF=1 ou (DI)=(DI)+1 si DF=0 de 1 (SCASB) ou 2 (SCASW) LODS, STOS
Chargement, rangement
LODS Source
Chargement d’une chaîne caractères dans AX ou AL et décrémentation de SI (si DF=1) ou incrémentation (si DF=0) de 1 (LODSB) ou 2 (LODSW) STOS Destination
Stockage d’une donnée de l’accumulateur dans une chaîne de données pointée par ES:DI et décrémentation de DI (si DF=1) ou incrémentation de DI (si DF=0) de 1 (STOSB) ou 2 (STOSW) REP, REPE, REPZ,....
Préfixe de répétition
REP Préfixe pour répéter l’instruction suivante tant que CX≠0 REP* Préfixe répétition conditionnel de l’instruction tant que CX≠0 REPNE / REPNZ et non zéro ou non égal (ZF=0) REPE / REPZ et zéro ou égal (ZF=1)
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
33
SYSTEMES MICROPROGRAMMES – Ch-02 –Le Microprocesseur 8086 d’INTEL
IV.3.6
INSTRUCTIONS DE CONTROLE DU MICROPROCESSEUR
CLC, STC,.. Positionnement indicateur CLC Pas d'opérande : Effacement de la retenue CF STC Pas d'opérande : Positionnement de la retenue CF=1 CLD Pas d'opérande : Incrémentation automatique des opérations de chaîne (DF mis a 0) STD Pas d'opérande : Positionnement de l'indicateur de direction DF=1 CLI Pas d'opérande : Suppression des interruptions externes (IF force a 0) STI Pas d'opérande : Positionnement indicateur autorisation d'interruption IF=1 NOP, HLT, LOCK, ESC,.. Arrêt, ver. bus, extensions NOP : No Opération : aucune opération. HLT Pas d'opérande : Arrêt du microprocesseur; réactivé par une interruption INT (non masquée),NMI. LOCK Pas d'opérande : Préfixe d'activation du signal LOCK pour verrouillage l’accès externe aux bus durant l'instruction suivante. ESC : Opérande externe, adresse : Transmission d'une instruction a un coprocesseur WAIT Pas d'opérande : Met le microprocesseur en attente tant qu'il est occupé. GND
1
40
VCC
AD14
2
39
AD15
AD13
3
38
A16
/S3
AD12
4
37
A17
/S4
AD11
5
36
A18
/S5
AD10
6
35
A19
/S6
AD9
7
34
BHE
/S7
AD8
8
33
AD7
9
32
AD6
10
8086
NM/MX
RD
31
HOLD HOLDA
AD5
11
30
AD4
12
29
WR
13
28
M/IO
/S2
AD2
14
27
DT/R
/S1
AD1
15
26
DEN
/SO
AD0
16
25
ALE
NMI
17
24
INTA
AD3
INTR
18
23
TEST
CLK
19
22
READY
GND
20
21
RESET
Brochage du 8086
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
34
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola
Chapitre 03 - Le Microprocesseur MC68000 de Motorola I. Présentation du 68000 de Motorola Le microprocesseur que nous étudions est le 68000 de Motorola, Bien que désuet aujourd’hui. L’architecture de ce composant et sa programmation reste une référence dans l’étude des microprocesseurs c’est un microprocesseur de 32 bits à prix réduit. Le 68000 est un composant électronique de 64 broches, qui possède un bus de données sur 16 bis et un bus d’adressage sur 23 bits, ce qui détermine une région mémoire maximum de 8 Mega-octets. La fréquence de l’horloge est de 10Mhz, ce qui correspond à un cycle d’horloge de 100 ns. Notons que la plus petite opération nécessite 4 cycles d’horloge.
Caractéristiques du MC68000 : • • • • • • • • •
II.
Registres de données et d’adresses de 32 Bits 8 Mo de mémoires adressable directement 56 Instructions Puissantes Entrées/ sorties par instructions mémoires 14 modes d’adressages 2 MIPS (million d’instructions par seconde) à 20MHz Existant dans les fréquences suivantes 8, 10, 12, 16 & 20 MHz (MC68HC000 et MC68EC000) Existant dans les fréquences suivantes 10, 16 & 20 MHz (MC68SEC000) Existant dans les fréquences suivantes 8, 10, 12 & 16 MHz (MC68HC001)
Architecture Interne du 68000
Le 68000 représente du point de vue interne les caractéristiques d’un processeur 32 bits. Il se compose de : • 8 registres de données, 32 bits : D0 - D7 Ces registres peuvent être manipulés soit comme des bytes (8 bits), soit comme des word(16 bits), soit comme des long (32 bit). Types de données Bits bytes 8 bits .B words 16 bits .W Long words 32 bits .L 31
16 15
8 7
0 Registre de données
D0 D1 D2 D3 D4 D5 D6 D7
8 registres d’adresses2, 32 bits : A0 … A7 et A7 bis On peut manipuler des adresses longues (long) ou des adresses courtes (word). Notons que les adresses réelles du 68000 sont codés sur 23 bits, par conséquent les 9 derniers bits d’une adresse longue ne sont pas significatifs ! 31
16 15
A0 A1 A2 A3 A4 A5 A6 A7 A’7
Registre d’Adresses
POINTEUR DE PILE UTILISATEUR POINTEUR DE PILE SYSTEME
0
Notons également le rôle particulier des deux registres d’adresse A7 et A7 bis, encore appelé USP (user stack pointer) et SSP (supervisor stack pointer). SP ou A7 contient l’adresse du pointeur de pile relatif au mode courant, c’est-à-dire utilisateur ou superviseur.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
35
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola •
Pointeur de pile utilisateur ( A7) (USP : User Stack Pointer). Le microprocesseur utilise le registre A7, comme pointeur de pile. Lorsque le bit S=0, le pointeur de pile est utilisé comme pointeur de pile superviseur.
•
Un registre de pile système (superviseur) de 32 bits (A7) (SSP : Supervisor Stack Pointer). Quand le bit S du registre d’état vaut 1, le pointeur de pile est utilisé comme pointeur de pile superviseur. Le rôle du pointeur de pile est de contenir l’adresse du début de la zone mémoire dans laquelle les informations sont rangées. Cette zone de mémoire peut être utilisée par le système comme par l’utilisateur.
• PC ou program counter Il contient l’adresse de la prochaine instruction à exécuter. 31
23
0
COMPTEUR ORDINAL
• SR ou status register, et CCR ou condition code register Un registre d’états se compose de deux octets. Le premier octet (poids faible) est l’octet utilisateur : (0–7) bits, et on l’appelle Registre des Codes Conditions (CCR : Code Conditions Register). Il renseigne l’utilisateur sur l’état du processeur, seuls les bits 0, 1, 2, 3, 4 sont significatifs. L’autre octet (8 – 15) permet le masquage des interruption, le fonctionnement en mode Trace et le choix du mode superviseur ou utilisateur. On l’appelle registre système, seul les bits 8, 9, 10, 13 et 15 sont significatifs. Registre 16 bits : SR au format word (16 bits) ou CCR au format byte (8 bits) 15
8 7 SR
15
T
0 CCR
8 7
S
I2
I1
I0
X N Z Fig. Registre d’Etats
0
V C
C’est le registre d’état (CCR), qui comporte des bits indicateurs ou flags. Seuls les cinq premiers bits de l’octet utilisateur sont significatifs pour le programmeur. Ces indicateurs (Flags) renseignent le programmeur sur l’état du processeur et par conséquent sur le résultat après traitement d’une instruction arithmétique ou logique. X, N, Z, V, C : indicateurs arithmétiques qui peuvent avoir des sens différents selon les opérations… Z N C X V
Zero negative Carry Extend pverflows
zéro bit de poids fort ou de signe retenue retenue non signée overflow signé
Exemple : pour un move, seul N et Z sont affectés mais pas C et V. Pour une opération arithmétique N, Z, C, V sont affectés. C : Carry (retenue) : ce bit est positionné lors d’une opération arithmétique. Les manipulations de données et opérations logiques n’affectent pas C. V : Overflow (débordement) : ce bit est l’indicateur de débordement. Il est positionné à 1 si le résultat (en complément à 2) d’une opération arithmétique déborde. Lors de manipulation d’instructions de chargement, stockage et opérations logiques, l’indicateur V sera positionné à 0. Z : Zero (Zéro: résultat nul) : Z est mis à 1, si le résultat de l’opération exécutée est nul. Si le résultat de l’opération n’est pas nul, Z est positionné à 0. N : Négatif : si N est positionné à 1, le résultat de l’opération exécutée est négative. X : Extension : cet indicateur est sollicité par le processeur lors d’opérations d’addition et soustraction en décimal. S : Status (état du processeur) : S = 1 (mode superviseur) autorise le programmeur à accéder à toutes les ressources logicielles et matérielles. Il peut utiliser toutes les instructions du 68000, adresser les mémoires de données et de programme et solliciter les pointeur de pile superviseur et utilisateur. S = 0 : fige le processeur en mode utilisateur.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
36
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola
T : mode Trace (ou Pas – à – Pas) : après chaque instruction, le microprocesseur teste de manière interne le bit T du registre d’états. Si T = 0, le microprocesseur passe à l’instruction suivante. Si T = 1, le microprocesseur exécute un programme dont le début est pointé par le vecteur TRACE, de plus par combinaison du mode TRACE et l’instruction HALT, l’exécution du programme peut se faire pas à pas (cycle par cycle). I0, I1, I2 : masque d’interruption : l’utilisateur peut masquer une demande d’interruption jusqu’à un certain niveau grâce aux 3 bits : I0, I1, I2. La priorité se fait dans le sens ascendant. Exemple : I0 =0, I1=0 et I2=1 soit I2I1I0 100 qui correspond à la valeur décimale 4. Une interruption de nivaux inférieur ou égal sera ignorée, par contre une interruption de niveau 5,6 et 7 sera prise en considération. Le mode de fonctionnement du processeur 68000 est déterminé par l’état logique du bit S. Si S = 1 , le processeur fonctionne en mode superviseur. Si S = 0 , le processeur fonctionne en mode utilisateur. Les privilèges réservés au mode superviseur sont plus importants que ceux du mode utilisateur. Remarque : il reste 6 bits non exploités dans le registre d’états.
III.
Brochage du MC68000
Le 68000 est présenté sous forme d’un boîtier à 64 broches. Dispose un bus d’adresse de 23 bits, ce qui lui permet d’adresser directement 8 Mo , et dispose d’un bus de données de 16 bits et d’un bus de contrôle complet. Les broches sont réparties dans les classes suivants suivantes, suivant leurs fonctions : a) Lignes d’adresses A1 – A23 b) Lignes des données D0 – D15 c)
Contrôle de bus asynchrone : AS , R/ W , UDS , LDS , DTACK
d) Contrôle d’arbitrage du bus : BR , BG , BGACK e)
Entrée de demande d’interruption : IPL0 , IPL1 , IPL2
f)
Contrôle du système : BERR , RESET , HALT
g) Contrôle de bus synchrone : E , VPA , VMA h) Sorties d’états du processeur : FC0, FC1, FC2 i) Alimentation et horloge : VCC, GND, Horloge Vcc GND Horloge Sortie d’état du µp Contrôle de bus synchrone
Contrôle Système
A1-A23 Bus d’Adresses D0-D15 Bus de Données
FC0 FC1 FC2 E VMA VPA
BERR RESET HALT
68000
AS R/W UDS LDS DTACK
Contrôle de bus Asynchrone
BR BG BGACK
Contrôle d’arbitrage du bus
IPL0 IPL1 IPL2
Entrée de demande d’interruption
Synoptique des différents types de contrôles et de bus
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
37
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola
• •
A1 – A23 : lignes d’adresses (sortie) : le bus d’adresses est non multiplexé, permet d’adresser 8 Mo de mémoire . D0 – D15 : lignes de données (bidirectionnelles, trois états) : 16 lignes bidirectionnelles non multiplexées, assurant le transfert des données de 16 ou de 8 bits ( D0-D7). D0-D7 étant utilisé aussi pour véhiculer le numéro du vecteur d’interruption.
•
AS : Adress Strobe (sortie , trois états) : indique la validation de l’adresse, informe la périphérie que l’adresse présente sur le bus d’adresse est électriquement stable.
•
R/ W : Read/ Write (sortie, 3 états) : lecture ou écriture, fixe la voie d’échange sur le bus de données.
•
UDS : Upper Data Strobe (sortie) : identifie l’octet haut de données de 16 bits.
•
LDS : Lower Data Strobe (sortie) : identifie l’octet bas de données de 16 bits. UDS Haut Bas Haut Bas Bas Haut Bas
LDS Haut Bas Bas Haut Bas Bas Haut
RW — Haut Haut Haut Bas Bas Bas
D15–D8 Pas données valides Données Bits 15–8 valides Pas données valides Données Bits 15–8 valides Données Bits 15–8 valides Données Bits 15–8 valides Données Bits 15–8 valides
D7–D0 Pas données valides Données Bits 7– 0 valides Données Bits 7– 0 valides Pas données valides Données Bits 7– 0 valides Données Bits 7– 0 valides Données Bits 7– 0 valides
Upper et Lower Data Strobe Control du Bus de Données •
DTACK : Data Transfer Acknowledge (sortie) : le processeur est informé qu’il y’a transfert de données sur le bus.
•
BR : Bus Request (entrée) : indique au processeur qu’un dispositif externe réclame le bus.
•
BG : Bus Grant (sortie) : fournie l’accord du 68000 pour q’un dispositif externe prenne possession du bus. Le 68000 prévient son environnement qu’il va céder le bus à la fin du cycle en cours.
•
BGACK : Bus Grant Acknowledge : confirme au 68000 que le dispositif externe est en possession du bus.
•
IPL0 , IPL1 , IPL2 : Interrupt Priority Level (entrées) : permettent au processeur de connaître le niveau de priorité d’une interruption. Niveau Etat de la ligne de Niveau d’interruption d’interruption contrôle masquée demandée demandée IPL2 IPL1 IPL2 0 Haut Haut Haut Pas d’interruption demandée 1 Haut Haut Bas 0–1 2 Haut Bas Haut 2–0 3 Haut Bas Bas 3–0 4 Bas Haut Haut 4–0 5 Bas Haut Bas 5–0 6 Bas Bas Haut 6–0 7 Bas Bas Bas 7–0 Niveaux d’interruptions et valeur du masque
•
BERR : Bus Error (entrée) : Bus erreur déclenche la Trap « BUS ERROR » dans le cas d’un anomalie matérielle. Ce signal est généré par un circuit MMU (Memory Management Unit) . Elle informe le processeur de l’anomalie lors de l’exécution du cycle en cours.
•
RESET : (bidirectionnelle) : o En entrée, il permet d’initialiser le processeur et son environnement. Le STACK système et le compteur de programme sont chargés o En sortie, initialise exclusivement l’environnement du processeur. Le traitement de ce signal n’affecte pas les registres internes du processeur
•
HALT : (bidirectionnelle ) o En entrée, indique l’arrêt du processeur et son initialisation. o En sortie, indique une anomalie qui provoque l’arrêt du processeur.
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
38
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola •
E : Enable (sortie) : permet la synchronisation de l’organe externe avec le processeur. Ce signal est généré à partir d’un horloge interne au 68000 et représente une référence temps pour synchronisation des circuits.
•
VPA : Valid Peripheral Adress : indique au processeur qu’il est en communication avec un périphérique synchrone.
•
VMA : Valid Memory Adress : en sortie, indique l’adresse sur le bus est valide en fonctionnement synchrone. FC0, FC1, FC2 : Function Code (sortie, 3 états) : l’état de fonctionnement du processeur superviseur ou utilisateur, et utilisateur, et si l’information est de type donnée ou programme. Ces sorties permettent de multiplier les capacités d’adressages. Code de la fonction sortie Temps du cycle FC2 FC1 FC0 Bas Bas Bas Réservé / Non défini Bas Bas Haut Donnée utilisateur Bas Haut Bas Programme utilisateur Bas Haut Haut Réservé / Non défini Haut Bas Bas Réservé / Non défini Haut Bas Haut Donnée superviseur Haut Haut Bas Programme superviseur Haut Haut Haut Confirmation d’interruption Sorties des Codes Fonctions
•
• • •
VCC : (2 broches) 5 Volts. GND : (2broches) 0 Volt. Horloge : 8 Mhz .
Vue du dessous
IV.
Programmation du microprocesseur 68000 IV.1 Le mode d’adressage du 68000 L’adressage peut être explicite, implicite, ou le résultat d’un calcul. Le 68000 utilise (comme le 8086) la notion d’adresse effective (EA). IV.1.1
Adressage direct de registre
IV.1.1.1 Registre de données EA = Dn ; Dn est l’un des registres du 68000 (D0 – D7) La taille peut être : - Long mot MOV.L (Adresse paire) - Mot MOV.W (Adresse paire) - Octet MOV.B (Adresse paire ou impaire)
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
39
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola
Exemple : MOV.W D1, $0020 * D1 : source et $0020 : destination . les 16 bits de poids faible du registre de donnée D1 sont transférés vers l’emplacement de destination dont l’adresse est $0020. NOT D1 * Complémente à 1 le contenu du registre D1 EXG D1, D2 * Echange les contenus de D1 et D2. IV.1.2
Registre d’adresse
EA = An ; An est l’un des registre d’adresses (A0 – A7, A’7) du 68000. Taille possible : Long mot, mot et octet. Exemple : MOV.W A1, $21FE * A1 : source et $21FE : destination (AE). Le mot de poids faible du registre d’adresse est transféré vers l’emplacement destination dont l’adresse est $21FE. Le registre d’adresse peut spécifier la destination ; dans ce cas la taille ne peut être que le mot ou le long mot, mais pas l’octet. Exemple : MOV.W $1000, A1 * transfert du contenu de l’emplacement dont l’adresse est $1000 vers l’emplacement destination. IV.1.3
Adressage indirect
IV.1.3.1 Registre d’adresse EA = (An) ; l’opérande à transférer vers la destination se trouve à l’adresse indiquée par le contenu du registre (An) La taille peut être : L, W, B Exemple : MOV.W (A3), D2 ; (A3) : adresse indiquée par le registre source A3 et D2 est la destination. IV.1.3.2 Registre d’adresse avec post – incrémentation EA = (An) puis An = An + k (k incrément ) Exemple : MOV.W (A3)+, $1600 * transfert du contenu de l’adresse spécifiée par le registre d’adresse vers l’emplacement destination dont l’adresse est $1600. Le registre est incrémenté de 1, 2 ou 4 suivant la taille octet , mot ou long mot. L’adresse est paire dans le cas d’un mot et long mot et est paire ou impaire dans le cas d’un octet. IV.1.3.3 Registre d’adresse avec pré – décrémentation An = An – k puis EA = (An) Exemple : MOV.W -(A3), $35A9 IV.1.3.4 Adressage indirect avec déplacement EA = (An) + déplacement (sur 16 bit signé) Exemple : MOV.L $2000(A3), D3 * D3 est chargé avec l’adresse effective dont la valeur est la somme du contenu de A3 et le déplacement sur 16 bit. IV.1.3.5 Adressage avec index et déplacement EA = An + INDEX + déplacement. Exemple : MOV.W $08(A1, A3), D1 (source) vers le registre D1. $08 est le déplacement. IV.1.4
* transfert du contenu de l’adresse effective
Adressage immédiat
Ce mode d’adressage concerne 3 instructions : ADDQ, SUBQ et MOVEQ. EA = Donnée. Exemple : MOVEQ #$2A, D1 * 2A est l’opérande immédiat et D1 est la destination ADDQ #6, D0 IV.1.5
Adressage relatif au compteur de programme
IV.1.5.1 Mode relatif avec déplacement EA = (PC) + déplacement (sur 16 bits) IV.1.5.2 Mode relatif avec index et déplacement (sur 16 bit) EA = (PC) + INDEX + déplacement (sur 16 bits)
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
40
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola
IV.1.6
Adressage mémoire absolu (ou direct)
IV.1.6.1 Absolu court EA = mot d’adresse IV.1.6.2 Absolu long EA = mot long d’adresse IV.1.7
Adressage implicite (ou inhérent)
Instructions JMP, BRA TRAPV, DIV MOVE RTE, RTR
EA = PC EA = SSP EA = USP EA = SR
Registres implicites Compteur programme Pointeur de pile superviseur Pointeur de pile utilisateur Registre d’état
Les instructions du 68000 Instructions Les instructions de référence à la mémoire LEA Source, An PEA Source MOVE Source , destination MOVEP Dn, destination MOVEP Destination, Dn MOVEM Registre, destination MOVEM Destination, registre BEST Numéro Bit, destination BCLR Numéro Bit, destination BCHG Numéro Bit, destination BTST Numéro Bit, destination CMPM Source, destination CMP Source, destination CMPI Source, destination CHK Source, Dn TAS Destination CLR Destination TST Destination Les instructions spéciales SWAP Dn EXT Dn EXG Xn, Xm Les instructions arithmétiques ADDI Immédiat, destination SUBI Immédiat, destination ADDQ Immédiat, destination SUBQ Immédiat, destination ADD Source, destination SUB Source, destination ADDA An, source SUBA An, source ADDX Source, destination SUBX Source, destination ABCD Source, destination NBCD Source, destination NEG Destination NEGX Destination NOT Destination MULU Source, Dn MULS Source, Dn DIVU Source, Dn DIVS Source, Dn Les instructions logiques AND Source, Dn ANDI Immédiat, Dn OR Source, Dn ORI Immédiat, Dn EOR Source, Dn EORI Immédiat, Dn
Commentaire Chargement de source dans An Sauvegarde source dans -(SP) Copie de source dans destination Chargement de Dn dans destination Chargement de destination dans Dn Chargement de registre dans destination Chargement de destination dans registre Test et mise à 1 du numéro du bit Test et mise à 0 du numéro du bit Test et chargement du numéro de bit Test du numéro de bit dans destination Destination – Source puis positionnement de CCR Destination – Source puis positionnement de CCR Destination – Source puis positionnement de CCR Si Dn <0 ou Dn > Source alors TRAP Si MSB de destination = 0 alors MSB = 1 Mise à zéro de destination Les indicateurs Z et N affectés suivant la valeur de destination Permutation mot MSB avec LMS Extension de signes Echange Xn avec Xm Destination + opérande destination Destination - opérande destination Destination + opérande destination Destination - opérande destination Destination + source destination Destination - source destination An + source An An - source An Destination + source + X destination Destination - source - X destination Destination + source + X destination Destination - source - X destination Complément à deux de destination Complément à deux avec X de destination Complément à 1 de destination Dn * source Dn (non signé) Dn * source Dn (signé) Dn (32 bits) / source (16 bits) Dn (32 bits) / source (16 bits) Source AND Dn Dn Immédiat AND Dn Dn Source AND Dn Dn Immédiat AND Dn Dn Source AND Dn Dn Immédiat AND Dn Dn
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
41
SYSTEMES MICROPROGRAMMES – Ch-03 –Le Microprocesseur MC68000 de Motorola
Les instructions de décalages et rotations ASL Compteur ASR Compteur LSL Compteur LSR Compteur ROL Compteur ROR Compteur ROXL Compteur ROXR Compteur Les instructions de contrôle de programme Rupture de séquence NOP JMP Adresse BRA Déplacement Sous programme et allocation JSR Adresse BSR Déplacement RTS RTR LINK An, DPL UNLK An Traitement conditionnel Bcc Déplacement DBcc Dn, déplacement Scc Destination Traitement de registre CCR et SR MOVE Source, CCR ORI Immédiat , CCR ANDI Immédiat , CCR EORI Immédiat , CCR MOVE SR, destination ORI Immédiat , SR ANDI Immédiat , SR EORI Immédiat , SR MOVE An, USP MOVE USP, An RTE RESET STOP Immédiat Trappes logicielles TRAP N° vecteur TRAPV Les conditions ‘’cc’’ MNEMONIQUE CONDITION ‘’CC’’ T Toujours vrai F Jamais vrai HI Supérieur LS Inférieur ou égal CC Retenue à zéro CS Retenue à un NE Différent EQ Egal VC Pas dépassement VS Dépassement PL Positif ou nul MI Négatif GE Supérieur ou égal LT Inférieur GT Supérieur LE Inférieur ou égal
Décalage arithmétique à gauche Décalage arithmétique à droite Décalage logique à gauche Décalage logique à droite Rotation à gauche Rotation à droite Rotation à gauche avec X Rotation à droite avec X
Pas d’opération Saut inconditionnel à l’adresse Branchement inconditionnel Saut à un sous programme Branchement à un sous programme Retour de sous programme Retour avec restitution de CCR Lien avec la pile Déconnexion avec la pile Branchement conditionnel Décrémentation et Débranchement conditionnel Mise à 1 d’une opérande suivit une condition Copie source dans CCR OU inclusif entre CCR et immédiat ET logique entre CCR et immédiat OU exclusif entre CCR et immédiat Copie de SR dans destination OU inclusif entre SR et immédiat ET logique entre SR et immédiat OU exclusif entre SR et immédiat Copie de An dans USP Copie de USP dans An Retour d’exception Mise à l’état bas de la ligne RESET Chargement de SR avec immédiat puis arrêt Exception logicielle Exception si V = 1 (débordement) EQUATION LOGIQUE 1 0 C+Z=0 C+Z=1 C=0 C=1 Z=0 Z=1 V=0 V=1 N=0 N=1 N XOR V = 0 (XOR OU exclusif) N XOR V = 1 Z + (N XOR V) = 0 Z + (N XOR V) = 1
V.0.3 -
[email protected] © 10/2004 - Support de Cours «SYSTEMES MICROPROGRAMME»
42