You are on page 1of 108

Architecture des ordinateurs

GTR 1999-2000

Emmanuel Viennet
IUT de Villetaneuse Dpartement GTR viennet@lipn.univ-paris13.fr

Licence
Copyright c 1995-2001 par Emmanuel Viennet.
Ce document peut tre librement lu, stock, reproduit, diffus, traduit et cit par tous moyens et sur tous supports aux conditions suivantes : Tout lecteur ou utilisateur de ce document reconnat avoir pris connaissance de ce quaucune garantie nest donne quant son contenu, tous points de vue, notamment vracit, prcision et adquation pour toute utilisation ; il nest procd aucune modication autre que cosmtique, changement de format de reprsentation, traduction, correction dune erreur de syntaxe vidente, ou en accord avec les clauses ci-dessous ; le nom, le logo et les coordonnes de lauteur devront tre prservs sur toutes les versions drives du document tous les endroits o ils apparaissent dans loriginal, les noms et logos dautres contributeurs ne pourront pas apparatre dans une taille suprieure celle des auteurs prcdents, des commentaires ou additions peuvent tres insrs condition dapparatre clairement comme tels ; les traductions ou fragments doivent faire clairement rfrence une copie originale complte, si possible une copie facilement accessible ; les traductions et les commentaires ou ajouts insrs doivent tre dats et leur(s) auteur(s) doi(ven)t tre identiable(s) (ventuellement au travers dun alias) ; cette licence est prserve et sapplique lensemble du document et des modications et ajouts ventuels (sauf en cas de citation courte), quelquen soit le format de reprsentation ; quel que soit le mode de stockage, reproduction ou diffusion, toute version imprime doit contenir une rfrence une version numrique librement accessible au moment de la premire diffusion de la version imprime, toute personne ayant accs une version numrise de ce document doit pouvoir en faire une copie numrise dans un format directement utilisable et si possible ditable, suivant les standards publics, et publiquement documents en usage ; La transmission de ce document un tiers se fait avec transmission de cette licence, sans modication, et en particulier sans addition de clause ou contrainte nouvelle, explicite ou implicite, lie ou non cette transmission. En particulier, en cas dinclusion dans une base de donnes ou une collection, le propritaire ou lexploitant de la base ou de la collection sinterdit tout droit de regard li ce stockage et concernant lutilisation qui pourrait tre faite du document aprs extraction de la base ou de la collection, seul ou en relation avec dautres documents. Toute incompatibilit des clauses ci-dessus avec des dispositions ou contraintes lE. Viennet - GTR - v1.2d

4
gales, contractuelles ou judiciaires implique une limitation correspondante : droit de lecture, utilisation ou redistribution verbatim ou modie du document. Adapt de la licence Licence LLDD v1, octobre 1997, Libre reproduction Copyright c Bernard Lang [F1450324322014] http://pauillac.inria.fr/~lang/licence/lldd.html

E. Viennet - GTR - v1.2d

Table des matires


Licence 1 Introduction larchitecture 1.1 Prsentation du sujet . . . . . . . . . . . . . . . . . . . 1.2 Reprsentation des donnes . . . . . . . . . . . . . . . . 1.2.1 Introduction . . . . . . . . . . . . . . . . . . . . 1.2.2 Changements de bases . . . . . . . . . . . . . . 1.2.3 Codication des nombres entiers . . . . . . . . . 1.2.4 Reprsentation des caractres . . . . . . . . . . 1.2.5 Reprsentation des nombres rels (norme IEEE) 1.3 Architecture de base dun ordinateur . . . . . . . . . . . 1.3.1 Principes de fonctionnement . . . . . . . . . . . 1.3.2 La mmoire principale (MP) . . . . . . . . . . . 1.3.3 Le processeur central . . . . . . . . . . . . . . . 1.3.4 Liaisons Processeur-Mmoire : les bus . . . . . . Introduction au langage machine 2.1 Caractristiques du processeur tudi . . . . . . . . . . 2.2 Jeu dinstruction . . . . . . . . . . . . . . . . . . . . . 2.2.1 Types dinstructions . . . . . . . . . . . . . . 2.2.2 Codage des instructions et mode dadressage . 2.2.3 Temps dexcution . . . . . . . . . . . . . . . 2.2.4 Ecriture des instructions en langage symbolique 2.2.5 Utilisation du programme debug . . . . . . . . 2.3 Branchements . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Saut inconditionnel . . . . . . . . . . . . . . . 2.3.2 Indicateurs . . . . . . . . . . . . . . . . . . . 2.3.3 Sauts conditionnels . . . . . . . . . . . . . . . 2.4 Instructions Arithmtiques et logiques . . . . . . . . . 2.4.1 Instructions de dcalage et de rotation . . . . . 2.4.2 Instructions logiques . . . . . . . . . . . . . . 2.4.3 Correspondance avec le langage C . . . . . . . 3 9 9 9 9 10 12 13 14 17 17 18 20 23 25 25 26 26 27 28 28 30 30 32 32 34 34 35 36 37

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

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

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

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

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

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

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

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

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

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

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

E. Viennet - GTR - v1.2d

6 3

TABLE DES MATIRES Lassembleur 80x86 3.1 Lassembleur . . . . . . . . . . . . . . . . . . . . 3.1.1 Pourquoi lassembleur ? . . . . . . . . . . 3.1.2 De lcriture du programme son excution 3.1.3 Structure du programme source . . . . . . 3.1.4 Dclaration de variables . . . . . . . . . . 3.2 Segmentation de la mmoire . . . . . . . . . . . . 3.2.1 Segment de code et de donnes . . . . . . 3.2.2 Dclaration dun segment en assembleur . 3.3 Adressage indirect . . . . . . . . . . . . . . . . . 3.3.1 Exemple : parcours dun tableau . . . . . . 3.3.2 Spcication de la taille des donnes . . . . 3.4 La pile . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Notion de pile . . . . . . . . . . . . . . . . 3.4.2 Instructions PUSH et POP . . . . . . . . . 3.4.3 Registres SS et SP . . . . . . . . . . . . . 3.4.4 Dclaration dune pile . . . . . . . . . . . 3.5 Procdures . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Notion de procdure . . . . . . . . . . . . 3.5.2 Instructions CALL et RET . . . . . . . . . 3.5.3 Dclaration dune procdure . . . . . . . . 3.5.4 Passage de paramtres . . . . . . . . . . . 39 39 39 40 40 40 43 43 44 44 46 47 47 47 47 48 48 51 51 51 52 52 55 55 55 56 56 57 59 61 63 63 64 64 65 65 66 66 66 66 67

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

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

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

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

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

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

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

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

Notions de compilation 4.1 Langages informatiques . . . . . . . . . . . . . . . . . 4.1.1 Interprteurs et compilateurs . . . . . . . . . . 4.1.2 Principaux langages . . . . . . . . . . . . . . 4.2 Compilation du langage C sur PC . . . . . . . . . . . 4.2.1 Traduction dun programme simple . . . . . . 4.2.2 Fonctions C et procdures . . . . . . . . . . . 4.3 Utilisation dassembleur dans les programmes C sur PC Le systme dexploitation 5.1 Notions gnrales . . . . . . . . . . . . . . . . . . . . 5.2 Prsentation du BIOS . . . . . . . . . . . . . . . . . . 5.2.1 Les fonctions du BIOS . . . . . . . . . . . . . 5.2.2 Vecteurs dinterruptions . . . . . . . . . . . . 5.2.3 Appel systme : instruction INT n . . . . . . . 5.2.4 Traitants dinterruptions . . . . . . . . . . . . 5.2.5 Quelques fonctions du BIOS . . . . . . . . . . 5.3 Prsentation du DOS . . . . . . . . . . . . . . . . . . 5.3.1 Description de quelques fonctions du DOS . . 5.4 Modication dun vecteur dinterruption en langage C .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

E. Viennet - GTR - v1.2d

TABLE DES MATIRES 5.4.1 5.4.2 6 Ecriture dun traitant dinterruption en C . . . . . . . . . Installation dun traitant . . . . . . . . . . . . . . . . . .

7 67 68 69 69 70 70 70 71 71 72 73 73 75 75 76 76 77 78 78 78 78 78 79 79 79 80 81 85 87 89 89 89 90 92 93 94 95 97 98 98

Les interruptions 6.1 Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Interruption matrielle sur PC . . . . . . . . . . . . . . . 6.2.1 Signaux dinterruption . . . . . . . . . . . . . . . 6.2.2 Indicateur IF . . . . . . . . . . . . . . . . . . . . 6.2.3 Contrleur dinterruptions . . . . . . . . . . . . . 6.2.4 Droulement dune interruption externe masquable 6.3 Exemple : gestion de lheure sur PC . . . . . . . . . . . . 6.4 Entres/Sorties par interruption . . . . . . . . . . . . . . . 6.4.1 Un exemple . . . . . . . . . . . . . . . . . . . . . Les entres/sorties 7.1 Les bus du PC . . . . . . . . . . . . . . . . . . . . . 7.1.1 Bus local . . . . . . . . . . . . . . . . . . . 7.1.2 Bus dextension du PC . . . . . . . . . . . . 7.1.3 Bus local PCI . . . . . . . . . . . . . . . . . 7.2 Bus de priphriques . . . . . . . . . . . . . . . . . 7.2.1 Bus SCSI . . . . . . . . . . . . . . . . . . . 7.2.2 Bus PCMCIA . . . . . . . . . . . . . . . . . 7.3 Les entres/sorties sur PC . . . . . . . . . . . . . . . 7.3.1 Gnralits . . . . . . . . . . . . . . . . . . 7.3.2 Modes de transfert . . . . . . . . . . . . . . 7.4 Linterface dentres/sorties sries asynchrones . . . 7.4.1 Pourquoi une transmission srie ? . . . . . . 7.4.2 Principe de la transmission srie asynchrone . 7.4.3 Linterface dE/S sries 8250 . . . . . . . . . 7.4.4 Programmation de linterface en langage C . 7.4.5 Normes RS-232 et V24 . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

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

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

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

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

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

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

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

Les priphriques 8.1 Terminaux interactifs . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Claviers . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.2 Ecrans et afchage . . . . . . . . . . . . . . . . . . . 8.1.3 Mode alphanumrique et mode graphique . . . . . . . 8.2 Mmoires secondaires . . . . . . . . . . . . . . . . . . . . . 8.2.1 Lenregistrement magntique . . . . . . . . . . . . . . 8.2.2 Les disques durs . . . . . . . . . . . . . . . . . . . . 8.2.3 Lecteurs de CD-ROM . . . . . . . . . . . . . . . . . 8.2.4 Autres supports optiques : WORM, magnto-optiques 8.2.5 Bandes magntiques . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

E. Viennet - GTR - v1.2d

8 9

TABLE DES MATIRES La mmoire 9.1 Mmoire vive . . . . . . . . . . . . . . . . . . . 9.1.1 Technologie des mmoires vives . . . . . 9.1.2 Modules de mmoire SIMM . . . . . . . 9.2 Les Mmoires mortes . . . . . . . . . . . . . . . 9.3 Mmoires caches . . . . . . . . . . . . . . . . . 9.3.1 Hierarchie mmoire . . . . . . . . . . . 9.3.2 Principe gnral des mmoires caches . . 9.3.3 Mmoires associatives . . . . . . . . . . 9.3.4 Efcacit dun cache : principe de localit 9.3.5 Autres aspects . . . . . . . . . . . . . . 101 101 101 102 102 103 103 104 104 105 105 107 107 107 107 108 108

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

10 Architectures actuelles 10.0.1 Microprocesseurs . 10.0.2 Micro-ordinateurs 10.0.3 Stations de travail . 10.0.4 Superordinateurs . Index

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

E. Viennet - GTR - v1.2d

Partie 1 Introduction larchitecture


1.1 Prsentation du sujet

Le cours dArchitecture des Ordinateurs expose les principes de fonctionnement des ordinateurs. Il ne sagit pas ici dapprendre programmer, mais de comprendre, bas niveau, lorganisation de ces machines. Nous nous appuierons sur ltude dtaille de larchitecture du PC, dont nous tudierons le processeur et son langage machine, les fonctions de base de son systme dexploitation (BIOS), et ses mcanismes de communication avec lextrieur (entres/sorties). Nous aborderons aussi le fonctionnement de diffrents priphriques de lordinateur (cran, clavier, disques durs, CD-ROMs...), an dapprendre les mettre en uvre bon escient, puis nous conclurons ce cours par un panorama des diffrentes architectures actuelles (processeurs CISC et RISC, stations de travail etc.).

1.2

Reprsentation des donnes

1.2.1 Introduction
Les informations traites par un ordinateur peuvent tre de diffrents types (texte, nombres, etc.) mais elles sont toujours reprsentes et manipules par lordinateur sous forme binaire. Toute information sera traite comme une suite de 0 et de 1. Lunit dinformation est le chiffre binaire (0 ou 1), que lon appelle bit (pour binary digit, chiffre binaire). Le codage dune information consiste tablir une correspondance entre la reprsentation externe (habituelle) de linformation (le caractre A ou le nombre 36 par exemple), et sa reprsentation interne dans la machine, qui est une suite de bits. On utilise la reprsentation binaire car elle est simple, facile raliser techniquement laide de bistables (systme deux tats raliss laide de transistors,
E. Viennet - GTR - v1.2d

10

Partie 1. Introduction larchitecture

voir le cours dlectronique). Enn, les oprations arithmtiques de base (addition, multiplication etc.) sont faciles exprimer en base 2 (noter que la table de multiplication se rsume 0x0 = 0, 1x0 = 0 et 1x1 = 1).

1.2.2

Changements de bases

Avant daborder la reprsentation des diffrents types de donnes (caractres, nombres naturels, nombres rels), il convient de se familiariser avec la reprsentation dun nombre dans une base quelconque (par la suite, nous utiliserons souvent les bases 2, 8, 10 et 16). Habituellement, on utilise la base 10 pour reprsenter les nombres, cest dire que lon crit laide de 10 symboles distincts, les chiffres. En base b, on utilise b chiffres. Notons ai la suite des chiffres utiliss pour crire un nombre x = an an1 ...a1 a0 a0 est le chiffre des units. En dcimal, b = 10, ai {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ; En binaire, b = 2, ai {0, 1} : 2 chiffres binaires, ou bits ; En hexadcimal, b = 16, ai {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } (on utilise les 6 premires lettres comme des chiffres). Reprsentation des nombres entiers En base 10, on crit par exemple 1996 pour reprsenter le nombre 1996 = 1 103 + 9 102 + 9 101 + 6 100 Dans le cas gnral, en base b, le nombre reprsent par une suite de chiffres an an1 ...a1 a0 est donn par :
n

an an1 ...a1 a0 =
i=0

ai b i

a0 est le chiffre de poids faible, et an le chiffre de poids fort. Exemple en base 2 : (101)2 = 1 22 + 0 21 + 1 20 = 4 + 0 + 1 = 5 La notation ( )b indique que le nombre est crit en base b. Reprsentation des nombres fractionnaires Les nombres fractionnaires sont ceux qui comportent des chiffres aprs la virgule.
E. Viennet - GTR - v1.2d

1.2

Reprsentation des donnes Dans le systme dcimal, on crit par exemple : 12, 346 = 1 101 + 2 100 + 3 101 + 4 102 + 6 103 En gnral, en base b, on crit :

11

an an1 ...a1 a0 , a1 a2 ...ap = an bn +an1 bn1 +...+a0 b0 +a1 b1 +...+ap bp Passage dune base quelconque la base 10 Il suft dcrire le nombre comme ci-dessus et deffectuer les oprations en dcimal. Exemple en hexadcimal : (AB)16 = 10 161 + 11 160 = 160 + 11 = (171)10 (en base 16, A reprsente 10, B 11, et F 15). Passage de la base 10 vers une base quelconque Nombres entiers On procde par divisions successives. On divise le nombre par la base, puis le quotient obtenu par la base, et ainsi de suite jusqua obtention dun quotient nul. La suite des restes obtenus correspond aux chiffres dans la base vise, a0 a1 ...an . Exemple : soit convertir (44)10 vers la base 2. 44 = 22 x 2 + 0 22 = 11 x 2 + 0 11 = 2 x 5 + 1 5=2x2+1 2=1x2+0 1=0x2+1 Donc (44)10 = (101100)2 . Nombres fractionnaires On multiplie la partie fractionnaire par la base en rptant lopration sur la partie fractionnaire du produit jusqua ce quelle soit nulle (ou que la prcision voulue soit atteinte). Pour la partie entire, on procde par divisions comme pour un entier. Exemple : conversion de (54, 25)10 en base 2 Partie entire : (54)10 = (110110)2 par divisions. Partie fractionnaire : 0,25 x 2 = 0,50 = a1 = 0 0,50 x 2 = 1,00 = a2 = 1 0,00 x 2 = 0,00 = a3 = 0
E. Viennet - GTR - v1.2d

= = = = = =

a0 a1 a2 a3 a4 a5

=0 =0 =1 =1 =0 =1

12 Cas des bases 2, 8 et 16

Partie 1. Introduction larchitecture

Ces bases correspondent des puissances de 2 (21 , 23 et 24 ), do des passages de lune lautre trs simples. Les bases 8 et 16 sont pour cela trs utilises en informatique, elles permettent de reprsenter rapidement et de manire compacte des congurations binaires. La base 8 est appele notation octale, et la base 16 notation hexadcimale. Chaque chiffre en base 16 (24 ) reprsente un paquet de 4 bits conscutifs. Par exemple : (10011011)2 = (1001 1011)2 = (9B)16 De mme, chaque chiffre octal reprsente 3 bits. On manipule souvent des nombres forms de 8 bits, nomms octets, qui sont donc nots sur 2 chiffres hexadcimaux. Oprations arithmtiques Les oprations arithmtiques seffectuent en base quelconque b avec les mmes mthodes quen base 10. Une retenue ou un report apparait lorsque lon atteint ou dpasse la valeur b de la base.

1.2.3

Codication des nombres entiers

La reprsentation (ou codication) des nombres est ncessaire an de les stocker et manipuler par un ordinateur. Le principal problme est la limitation de la taille du codage : un nombre mathmatique peut prendre des valeurs arbitrairement grandes, tandis que le codage dans lordinateur doit seffectuer sur un nombre de bits x. Entiers naturels Les entiers naturels (positifs ou nuls) sont cods sur un nombre doctets x (un octet est un groupe de 8 bits). On rencontre habituellement des codages sur 1, 2 ou 4 octets, plus rarement sur 64 bits (8 octets, par exemple sur les processeurs DEC Alpha). Un codage sur n bits permet de reprsenter tous les nombres naturels compris entre 0 et 2n 1. Par exemple sur 1 octet, on pourra coder les nombres de 0 255 = 28 1. On reprsente le nombre en base 2 et on range les bits dans les cellules binaires correspondant leur poids binaire, de la droite vers la gauche. Si ncessaire, on complte gauche par des zros (bits de poids fort).
E. Viennet - GTR - v1.2d

1.2

Reprsentation des donnes

13

Entiers relatifs Il faut ici coder le signe du nombre. On utilise le codage en complment deux, qui permet deffectuer ensuite les oprations arithmtiques entre nombres relatifs de la mme faon quentre nombres naturels. 1. Entiers positifs ou nuls : On reprsente le nombre en base 2 et on range les bits comme pour les entiers naturels. Cependant, la cellule de poids fort est toujours 0 : on utilise donc n 1 bits. Le plus grand entier positif reprsentable sur n bits en relatif est donc 2n1 1. 2. Entiers ngatifs : Soit x un entier positif ou nul reprsent en base 2 sur n 1 bits
n2 i=0

x= et soit y=

i 2i , avec i {0, 1}
n2

(1 i ) 2i + 1
i=0

On constate facilement que x + y = 2n1 , i Or sur n bits, 2n1 est reprsent par n 1 zros, donc on x + y = 0 modulo 2n1 , ou encore y = x. y peut tre considr comme loppos de x. La reprsentation de x est obtenue par complmentation 2n1 de x. On dit complment deux. Pour obtenir le codage dun nombre x ngatif, on code en binaire sa valeur absolue sur n 1 bits, puis on complmente (ou inverse) tous les bits et on ajoute 1. Exemple : soit coder la valeur -2 sur 8 bits. On exprime 2 en binaire, soit 00000010. Le complment 1 est 11111101. On ajoute 1 et on obtient le rsultat : 1111 1110. Remarques : (a) le bit de poids fort dun nombre ngatif est toujours 1 ; (b) sur n bits, le plus grand entier positif est 2n1 1 = 011 . . . 1 ; (c) sur n bits, le plus petit entier ngatif est 2n1 .

1.2.4

Reprsentation des caractres

Les caractres sont des donnes non numriques : il ny a pas de sens additionner ou multiplier deux caractres. Par contre, il est souvent utile de comparer deux caractres, par exemple pour les trier dans lordre alphabtique.
E. Viennet - GTR - v1.2d

Les caractres, appels symboles alphanumriques, incluent les lettres majuscules et minuscules, les symboles de ponctuation (& ~ , . ; # " - etc...), et les chiffres. Un texte, ou chane de caractres, sera reprsent comme une suite de caractres. Le codage des caractres est fait par une table de correspondance indicant la conguration binaire reprsentant chaque caractre. Les deux codes les plus connus sont lEBCDIC (en voie de disparition) et le code ASCII (American Standard Code for Information Interchange). Le code ASCII reprsente chaque caractre sur 7 bits (on parle parfois de code ASCII tendu, utilisant 8 bits pour coder des caractres supplmentaires). Notons que le code ASCII original, dni pour les besoins de linformatique en langue anglaise) ne permet la reprsentation des caractre accentus (, , , , ...), et encore moins des caractres chinois ou arabes. Pour ces langues, dautres codages existent, utilisant 16 bits par caractres. La table page 16 donne le code ASCII. A chaque caractre est associ une conguration de 8 chiffres binaires (1 octet), le chiffre de poids fort (le plus gauche) tant toujours gal zero. La table indique aussi les valeurs en base 10 (dcimal) et 16 (hexadcimal) du nombre correspondant. Plusieurs points importants propos du code ASCII : Les codes compris entre 0 et 31 ne reprsentent pas des caractres, ils ne sont pas afchables. Ces codes, souvent nomms caractres de contrles sont utiliss pour indiquer des actions comme passer la ligne (CR, LF), mettre un bip sonore (BEL), etc. Les lettres se suivent dans lordre alphabtique (codes 65 90 pour les majuscules, 97 122 pour les minuscules), ce qui simplie les comparaisons. On passe des majuscules au minuscules en modiant le 5ime bit, ce qui revient ajouter 32 au code ASCII dcimal. Les chiffres sont rangs dans lordre croissant (codes 48 57), et les 4 bits de poids faibles dnissent la valeur en binaire du chiffre.

1.2.5

Reprsentation des nombres rels (norme IEEE)

Soit codier le nombre 3,25, qui scrit en base 2 (11, 01)2 . On va normaliser la reprsentation en base 2 de telle sorte quelle scrive sous la forme 1, ... x 2n Dans notre exemple 11, 01 = 1, 101 x 21 La reprsentation IEEE code sparment le signe du nombre (ici +), lexposant n (ici 1), et la mantisse (la suite de bits aprs la virgule), le tout sur 32 bits. Le codage a la forme : seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm.

1.2

Reprsentation des donnes

15

Le signe est reprsent sur le bit de poids fort s, + est reprsent par 0 et par 1. Lexposant est cod sur les 8 bits e. On code en binaire la valeur n + 127. La mantisse est code sur les 23 bits de poids faibles m. Remarques : 1. Les exposants 00000000 et 11111111 sont interdits : lexposant 00000000 signie que le nombre est dnormalis ; lexposant 11111111 indique que lon na pas affaire un nombre (on note cette conguration NaN, Not a Number, et on lutilise pour signaler des erreurs de calculs, comme par exemple une division par 0). 2. Les plus petit exposant est donc -126, et le plus grand +127. Annexe Ce petit programme en langage C peut tre utilis pour afcher le codage dun nombre ottant quelconque :
/* Affichage hexadecimal des 4 octets dun nombre flottant IEEE */ #include <stdio.h> main() { float x; unsigned char *p = (unsigned char *)&x; printf("Entrer un nombre flottant : \n"); scanf("%f", &x); printf(" %f -> %x %x %x %x\n", x, *p, *(p+1), *(p+2), *(p+3) ); }

E. Viennet - GTR - v1.2d

16
Dcimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Dcimal 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 Hexa 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F Hexa 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F Binaire 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 Binaire 01000000 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011000 01011001 01011010 01011011 01011100 01011101 01011110 01011111 Caractre NUL STX ETX EOT ACK BEL

Partie 1. Introduction larchitecture


Dcimal 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 Dcimal 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Hexa 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Hexa 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F Binaire 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 00111010 00111011 00111100 00111101 00111110 00111111 Binaire 01100000 01100001 01100010 01100011 01100100 01100101 01100110 01100111 01101000 01101001 01101010 01101011 01101100 01101101 01101110 01101111 01110000 01110001 01110010 01110011 01110100 01110101 01110110 01110111 01111000 01111001 01111010 01111011 01111100 01111101 01111110 01111111 Caractre ESPACE ! " # $ % & ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? Caractre a b c d e f g h i j k l m n o p q r s t u v w x y z | ~

LF

CR

NAK

Caractre @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _

E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur

17

1.3

Architecture de base dun ordinateur

Dans cette partie, nous dcrivons rapidement larchitecture de base dun ordinateur et les principes de son fonctionnement. Un ordinateur est une machine de traitement de linformation. Il est capable dacqurir de linformation, de la stocker, de la transformer en effectuant des traitements quelconques, puis de la restituer sous une autre forme. Le mot informatique vient de la contraction des mots information et automatique. Nous appelons information tout ensemble de donnes. On distingue gnralement diffrents types dinformations : textes, nombres, sons, images, etc., mais aussi les instructions composant un programme. Comme on la vu dans la premire partie, toute information est manipule sous forme binaire (ou numrique) par lordinateur.

1.3.1 Principes de fonctionnement


Les deux principaux constituants dun ordinateur sont la mmoire principale et le processeur. La mmoire principale (MP en abrg) permet de stocker de linformation (programmes et donnes), tandis que le processeur excute pas pas les instructions composant les programmes.

Notion de programme
Un programme est une suite dinstructions lmentaires, qui vont tre excutes dans lordre par le processeur. Ces instructions correspondent des actions trs simples, comme additionner deux nombres, lire ou crire une case mmoire, etc. Chaque instruction est codie en mmoire sur quelques octets. Le processeur est capable dexcuter des programmes en langage machine, cest dire composs dinstructions trs lmentaires suivant un codage prcis. Chaque type de processeur est capable dexcuter un certain ensemble dinstructions, son jeu dinstructions. Pour crire un programme en langage machine, il faut donc connatre les dtails du fonctionnement du processeur qui va tre utilis.

Le processeur
Le processeur est un circuit lctronique complexe qui excute chaque instruction trs rapidement, en quelques cycles dhorloges. Toute lactivit de lordinateur est cadence par une horloge unique, de faon ce que tous les circuits lectroniques travaillent ensembles. La frquence de cette horloge sexprime en MHz (millions de battements par seconde). Par exemple, un ordinateur PC Pentium 133 possde un processeur de type Pentium et une horloge 133 MHz. Pour chaque instruction, le processeur effectue schmatiquement les oprations suivantes : 1. lire en mmoire (MP) linstruction excuter ; 2. effectuer le traitement correspondant ;
E. Viennet - GTR - v1.2d

18

Partie 1. Introduction larchitecture

3. passer linstruction suivante. Le processeur est divis en deux parties (voir gure 1.1), lunit de commande et lunit de traitement : lunit de commande est responsable de la lecture en mmoire et du dcodage des instructions ; lunit de traitement, aussi appele Unit Arithmtique et Logique (U.A.L.), excute les instructions qui manipulent les donnes.

Processeur
codes instructions

Mmoire Principale (M.P.)


Programme

Unit de commande

Unit de traitement (U.A.L.)

donnes binaires

Donnes

informations codes en binaire

Unit dentres/sorties

CLAVIER

ECRAN

F IG . 1.1 Architecture schmatique dun ordinateur.

1.3.2

La mmoire principale (MP)

Structure de la MP
La mmoire est divise en emplacements de taille xe (par exemple 8 bits) utiliss pour stocker instructions et donnes. En principe, la taille dun emplacement mmoire pourrait tre quelconque ; en fait, la plupart des ordinateurs en service aujourdhui utilisent des emplacements mmoire dun octet (byte en anglais, soit 8 bits, unit pratique pour coder un caractre par exemple).
E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur


Emplacement
0 1 0 1 1 0 1 0

19
Adresse
0 1 2 3 4

N-2 N-1
7 6 5 4 3 2 1 0 numros des bits bit de poids fort bit de poids faible

F IG . 1.2 Structure de la mmoire principale.

Dans une mmoire de taille N , on a N emplacements mmoires, numrots de 0 N 1. Chaque emplacement est repr par son numro, appel adresse. Ladresse est le plus souvent crite en hexadcimal. La capacit (taille) de la mmoire est le nombre demplacements, exprim en gnral en kilo-octets ou en mga-octets, voire davantage. Rappelons que le kilo informatique vaut 1024 et non 1000 (210 = 1024 1000). Voici les multiples les plus utiliss : 1 K (Kilo) 1 M (Mga) 1 G (Giga) 1 T (Tra) 210 220 230 240 = 1024 = 1048 576 = 1 073 741 824 = 1 099 511 627 776

Oprations sur la mmoire


Seul le processeur peut modier ltat de la mmoire1 . Chaque emplacement mmoire conserve les informations que le processeur y crit jusqu coupure de lalimentation lectrique, o tout le contenu est perdu (contrairement au contenu des mmoires externes comme les disquettes et disques durs). Les seules oprations possibles sur la mmoire sont : criture dun emplacement : le processeur donne une valeur et une adresse, et la mmoire range la valeur lemplacement indiqu par ladresse ; lecture dun emplacement : le processeur demande la mmoire la valeur contenue lemplacement dont il indique ladresse. Le contenu de lemplacement lu reste inchang.
Sur certains ordinateurs, les controleurs dentres/sorties peuvent accder directement la mmoire (accs DMA), mais cela ne change pas le principe de fonctionnement.
E. Viennet - GTR - v1.2d
1

20 Unit de transfert

Partie 1. Introduction larchitecture

Notons que les oprations de lecture et dcriture portent en gnral sur plusieurs octets contigs en mmoire : un mot mmoire. La taille dun mot mmoire dpend du type de processeur ; elle est de 1 octet (8 bits) dans les processeurs 8 bits (par exemple Motorola 6502) ; 2 octets dans les processeurs 16 bits (par exemple Intel 8086) ; 4 octets dans les processeurs 32 bits (par ex. Intel 80486 ou Motorola 68030).

1.3.3

Le processeur central

Le processeur est parfois appel CPU (de langlais Central Processing Unit) ou encore MPU (Micro-Processing Unit) pour les microprocesseurs. Un microprocesseur nest rien dautre quun processeur dont tous les constituants sont runis sur la mme puce lectronique (pastille de silicium), an de rduire les cots de fabrication et daugmenter la vitesse de traitement. Les microordinateurs sont tous quips de microprocesseurs. Larchitecture de base des processeurs quipant les gros ordinateurs est la mme que celle des microprocesseurs.

Les registres et laccumulateur


Le processeur utilise toujours des registres, qui sont des petites mmoires internes trs rapides daccs utilises pour stocker temporairement une donne, une instruction ou une adresse. Chaque registre stocke 8, 16 ou 32 bits. Le nombre exact de registres dpend du type de processeur et varie typiquement entre une dizaine et une centaine. Parmi les registres, le plus important est le registre accumulateur, qui est utilis pour stocker les rsultats des oprations arithmtiques et logiques. Laccumulateur intervient dans une proportion importante des instructions. Par exemple, examinons ce quil se passe lorsque le processeur excute une instruction comme Ajouter 5 au contenu de la case memoire dadresse 180 : 1. Le processeur lit et dcode linstruction ; 2. le processeur demande la mmoire la contenu de lemplacement 180 ; 3. la valeur lue est range dans laccumulateur ; 4. lunit de traitement (UAL) ajoute 5 au contenu de laccumulateur ; 5. le contenu de laccumulateur est cris en mmoire ladresse 180. Cest lunit de commande (voir gure 1.1 page 18) qui dclenche chacune de ces actions dans lordre. Laddition proprement dite est effectue par lUAL.

Architecture dun processeur accumulateur


La gure 1.3 reprsente larchitecture interne simplie dun MPU accumulateur. On y distingue lunit de commande, lUAL, et le dcodeur dinstructions, qui, partir du code de linstruction lu en mmoire actionne la partie de lunit de commande ncessaire.
E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur


BUS DE DONNEES
Reg. mot

21

Bus de donnes interne

ACC

RTUAL

RI

UAL
Reg. dtat

RTA

Dcodeur

Unit de Commande Horloge

IP

Bus dadresses interne


Reg. Adr

Quartz

COMMANDES

BUS DADRESSES

F IG . 1.3 Schma simpli dun processeur. Le processeur est reli lextrieur par les bus de donnes et dadresses, le signal dhorloge et les signaux de commandes.
Les informations circulent lintrieur du processeur sur deux bus internes, lun pour les donnes, lautre pour les instructions. On distingue les registres suivants : ACC : Accumulateur ; RTUAL : Registre Tampon de lUAL, stocke temporairement lun des deux oprandes dune instructions arithmtiques (la valeur 5 dans lexemple donn plus haut) ; Reg. dtat : stocke les indicateurs, que nous tudierons plus tard ; RI : Registre Instruction, contient le code de linstruction en cours dexcution (lu en mmoire via le bus de donnes) ; IP : Instruction Pointer ou Compteur de Programme, contient ladresse de lemplacement mmoire o se situe la prochaine instruction excuter ;
E. Viennet - GTR - v1.2d

22

Partie 1. Introduction larchitecture

RTA : Registre Tampon dAdresse, utilis pour accder une donne en mmoire. Les signaux de commandes permettent au processeur de communiquer avec les autres circuits de lordinateur. On trouve en particulier le signal R/W (Read/Write), qui est utilis pour indiquer la mmoire principale si lon effectue un accs en lecture ou en criture.

E. Viennet - GTR - v1.2d

1.3

Architecture de base dun ordinateur

23

1.3.4 Liaisons Processeur-Mmoire : les bus

BUS DADRESSES

Mmoire Principale

Processeur
R/W
Signal Lecture/Ecriture

BUS DE DONNEES
F IG . 1.4 Connexions Processeur-Mmoire : bus de donnes, bus dadresse et signal lecture/criture.
Les informations changes entre la mmoire et le processeur circulent sur des bus. Un bus est simplement un ensemble de n ls conducteurs, utiliss pour transporter n signaux binaires. Le bus dadresse est un bus unidirectionnel : seul le processeur envoie des adresses. Il est compos de a ls ; on utilise donc des adresses de a bits. La mmoire peut possder au maximum 2a emplacements (adresses 0 2a 1). Le bus de donnes est un bus bidirectionnel. Lors dune lecture, cest la mmoire qui envoie un mot sur le bus (le contenu de lemplacement demand) ; lors dune criture, cest le processeur qui envoie la donne.

E. Viennet - GTR - v1.2d

24

Partie 1. Introduction larchitecture

E. Viennet - GTR - v1.2d

Partie 2 Introduction au langage machine


Dans cette partie du cours, nous allons tudier la programmation en langage machine et en assembleur dun microprocesseur. Ltude complte dun processeur rel, comme le 80486 ou le Pentium fabriqus par Intel, dpasse largement le cadre de ce cours : le nombre dinstructions et de registres est trs lev. Nous allons ici nous limiter un sousensemble du microprocesseur 80486 (seuls les registres et les instructions les plus simples seront tudis). De cette faon, nous pourrons tester sur un PC les programmes en langage machine que nous crirons.

2.1

Caractristiques du processeur tudi

La gamme de microprocesseurs 80x86 quipe les micro-ordinateurs de type PC et compatibles. Les premiers modles de PC, commercialiss au dbut des annes 1980, utilisaient le 8086, un microprocesseur 16 bits1 . Le modles suivants ont utilis successivement le 80286, 80386, 80486 et Pentium (ou 80586)2 . Chacun de ces processeurs est plus puissant que les prcdents : augmentation de la frquence dhorloge, de la largeur de bus (32 bits dadresse et de donnes), introduction de nouvelles instructions (par exemple calcul sur les rels) et ajout de registres. Chacun dentre eux est compatible avec les modles prcdents ; un programme crit dans le langage machine du 286 peut sexcuter sans modication sur un 486. Linverse nest pas vrai, puisque chaque gnration a ajout des instructions nouvelles. On parle donc de compatibilit ascendante. Du fait de cette compatibilit, il est possible de programmer le 486, utilis dans nos salles de Travaux Pratiques, comme un processeur 16 bits. Cest ce que nous ferons cette anne par souci de simplication. Ainsi, nous nutiliserons que des registres de 16 bits.
1 2

Avec un bus dadresses de 20 bits pour grer jusqua 1Mo de mmoire. Les PC actuels (1996) sont quips de Pentium, cadenc environ 100 MHz.

E. Viennet - GTR - v1.2d

26

Partie 2. Introduction au langage machine


Voici les caractristiques du processeur simpli que nous tudierons :

CPU 16 bits accumulateur : bus de donnes 16 bits ; bus dadresse 32 bits ; Registres : accumulateur AX (16 bits) ; registres auxiliaires BX et CX (16 bits) ; pointeur dinstruction IP (16 bits) ; registres segments CS, DS, SS (16 bits) ; pointeur de pile SP (16 bits), et pointeur BP (16 bits). Les registres IP et AX (accumulateur) ont dja t tudis. Les autres le seront progressivement dans ce chapitre. Nous verrons plus loin que les registres de donnes de 16 bits peuvent parfois tre utiliss comme deux registres indpendants de 8 bits (AX devient la paire (AH,AL)) : 8 bits AH 8 bits AL 8 bits BH 8 bits BL 8 bits CH 8 bits CL

AX (16 bits) BX (16 bits) CX (16 bits) Noter que nous voquons ici uniquement les registres qui apparaissent explicitement dans lcriture des instructions, et pas les registres intermdiaires tels que RI, RTUAL et RTA.

2.2
2.2.1

Jeu dinstruction
Types dinstructions

Instructions daffectation
Dclenchent un transfert de donnes entre lun des registres du processeur et la mmoire principale. transfert CPU Mmoire Principale (MP) (= lecture en MP) ; transfert CPU Mmoire Principale (MP) (= criture en MP) ;

Instructions arithmtiques et logiques


Oprations entre une donne et laccumulateur AX. Le rsultat est plac dans laccumulateur. La donne peut tre une constante ou une valeur contenue dans un emplacement mmoire. Exemples : addition : AX AX + donne ; soustraction : AX AX - donne ; incrmentation3 de AX : AX AX + 1 ;
3

Incrmenter un registre (ou une variable) signie lui ajouter 1, et le dcrmenter lui soustraire

1.
E. Viennet - GTR - v1.2d

2.2

Jeu dinstruction
dcrmentation : AX AX - 1 ; dcalages gauche et droite ;

27

Instructions de comparaison
Comparaison du registre AX une donne et positionnement des indicateurs.

Instructions de branchement
La prochaine instruction excuter est repre en mmoire par le registre IP. Les instructions de branchement permettent de modier la valeur de IP pour excuter une autre instruction (boucles, tests, etc.). On distingue deux types de branchements : branchements inconditionnels : IP adresse dune instruction ; branchements conditionnels : Si une condition est satisfaite, alors branchement, sinon passage simple linstruction suivante.

2.2.2

Codage des instructions et mode dadressage

Les instructions et leurs oprandes (paramtres) sont stocks en mmoire principale. La taille totale dune instruction (nombre de bits ncessaires pour la reprsenter en mmoire) dpend du type dinstruction et aussi du type doprande. Chaque instruction est toujours code sur un nombre entier doctets, an de faciliter son dcodage par le processeur. Une instruction est compose de deux champs : le code opration, qui indique au processeur quelle instruction raliser ; le champ oprande qui contient la donne, ou la rfrence une donne en mmoire (son adresse). champ code opration champ code oprande

Selon la manire dont la donne est spcie, cest dire selon le mode dadressage de la donne, une instruction sera code par 1, 2, 3 ou 4 octets. Nous distinguerons ici quatre modes dadressage : implicite, immdiat, direct et relatif (nous tudierons plus tard un autre mode, ladressage indirect).

Adressage implicite
Linstruction contient seulement le code opration, sur 1 ou 2 octets. code opration (1 ou 2 octets) Linstruction porte sur des registres ou spcie une opration sans oprande (exemple : incrmenter AX).
E. Viennet - GTR - v1.2d

28 Adressage immdiat

Partie 2. Introduction au langage machine

Le champ oprande contient la donne (une valeur constante sur 1 ou 2 octets). code opration (1 ou 2 octets) valeur (1 ou 2 octets)

Exemple : Ajouter la valeur 5 AX. Ici loprande 5 est code sur 2 octets puisque lopration porte sur un registre 16 bits (AX).

Adressage direct
Le champ oprande contient ladresse de la donne en mmoire principale sur 2 octets. code opration (1 ou 2 octets) adresse de la donne (2 octets)

Attention : dans le 80x86, les adresses sont toujours manipules sur 16 bits, quelle que soit la taille relle du bus. Nous verrons plus tard comment le processeur fabrique les adresses relles sur 32 bits. Exemple : Placer dans AX la valeur contenue ladresse 130H.

Adressage relatif
Ce mode dadressage est utilis pour certaines instructions de branchement. Le champ oprande contient un entier relatif cod sur 1 octet, nomm dplacement, qui sera ajout la valeur courante de IP. code opration (1 octet) dplacement (1 octet)

2.2.3

Temps dexcution

Chaque instruction ncessite un certain nombre de cycles dhorloges pour seffectuer. Le nombre de cycles dpend de la complexit de linstruction et aussi du mode dadressage : il est plus long daccder la mmoire principale qu un registre du processeur.

La dure dun cycle dpend bien sur de la frquence dhorloge de lordinateur. Plus lhorloge bat rapidement, plus un cycle est court et plus on excute un grand nombre dinstructions par seconde.

2.2.4

Ecriture des instructions en langage symbolique


A1 01 10 03 06 01 12 A3 01 14

Voici un programme en langage machine 80486, implant ladresse 0100H :

E. Viennet - GTR - v1.2d

2.2

Jeu dinstruction

29

Ce programme additionne le contenu de deux cases mmoire et range le rsultat dans une troisime. Nous avons simplement transcrit en hexadcimal le code du programme. Il est clair que ce type dcriture nest pas trs utilisable par un tre humain. A chaque instruction que peut excuter le processeur correspond une reprsentation binaire sur un ou plusieurs octets, comme on la vu plus haut. Cest le travail du processeur de dcoder cette reprsentation pour effectuer les oprations correspondantes. An de pouvoir crire (et relire) des programmes en langage machine, on utilise une notation symbolique, appele langage assembleur. Ainsi, la premire instruction du programme ci-dessus (code A1 01 10) sera note : MOV AX, [0110] elle indique que le mot mmoire dadresse 0110H est charg dans le registre AX du processeur. On utilise des programmes spciaux, appels assembleurs, pour traduire automatiquement le langage symbolique en code machine. Voici une transcription langage symbolique du programme complet. Ladresse de dbut de chaque instruction est indique gauche (en hexadcimal). Adresse 0100 0103 0107 Contenu MP A1 01 10 03 06 01 12 A3 01 14 Langage Symbolique MOV AX, [0110] ADD AX, [0112] MOV [0114], AX Explication en francais Charger AX avec le contenu de 0110. Ajouter le contenu de 0112 a AX (resultat dans AX). Ranger AX en 0114.

Sens des mouvements de donnes


La plupart des instructions spcient des mouvements de donnes entre la mmoire principale et le microprocesseur. En langage symbolique, on indique toujours la destination, puis la source. Ainsi linstruction MOV AX, [0110] transfre le contenu de lemplacement mmoire 0110H dans laccumulateur, tandis que MOV [0112], AX transfre le contenu de laccumulateur dans lemplacement mmoire 0112. Linstruction MOV (de langlais move, dplacer) scrit donc toujours : MOV destination, source

Modes dadressage
En adressage immdiat, on indique simplement la valeur de loprande en hexadcimal. Exemple : MOV AX, 12 En adressage direct, on indique ladresse dun emplacement en mmoire principale en hexadcimal entre crochets : MOV AX, [A340]
E. Viennet - GTR - v1.2d

30

Partie 2. Introduction au langage machine


En adressage relatif, on indique simplement ladresse (hexa). Lassembleur traduit automatiquement cette adresse en un dplacement (relatif sur un octet). Exemple : JNE 0108 (nous tudierons linstruction JNE plus loin).

Tableau des instructions


Le tableau 2.2.4 donne la liste de quelques instructions importantes du 80x86.

Retour au DOS
A la n dun programme en assembleur, on souhaite en gnral que linterprteur de commandes du DOS reprenne le contrle du PC. Pour cela, on utilisera la squence de deux instructions (voir tableauu 2.2.4) : MOV AH, 4C INT 21

2.2.5

Utilisation du programme debug

debug est un programme qui sexcute sur PC (sous DOS) et qui permet de manipuler des programmes en langage symbolique. Il est normalement distribu avec toutes les versions du systme MS/DOS. Nous lutiliserons en travaux pratiques. Les fonctionnalits principales de debug sont les suivantes : Afchage du contenu dune zone mmoire en hexadcimal ou en ASCII ; Modication du contenu dune case mmoire quelconque ; Afchage en langage symbolique dun programme ; Entre dun programme en langage symbolique ; debug traduit les instructions en langage machine et calcule automatiquement les dplacements en adressage relatif. Afchage et modication de la valeur des registres du processeur ;

2.3

Branchements

Normalement, le processeur excute une instruction puis passe celle qui suit en mmoire, et ainsi de suite squentiellement. Il arrive frquemment que lon veuille faire rpter au processeur une certaine suite dinstructions, comme dans le programme : Repeter 3 fois: ajouter 5 au registre BX En dautres occasions, il est utile de dclencher une action qui dpend du rsultat dun test : Si x < 0: y = - x sinon y = x
E. Viennet - GTR - v1.2d

2.3

Branchements

31

Symbole MOV AX, valeur MOV AX, [ adr ] MOV [ adr ], AX ADD AX, valeur ADD AX, [ adr ] SUB AX, valeur SUB AX, [ adr ] SHR AX, 1 SHL AX, 1 INC AX DEC AX CMP AX, valeur CMP AX, [ adr ] JMP adr JE adr JNE adr JG adr JLE adr JA adr JB adr

Code Op. B8 A1 A3 05 03 06 2D 2B 06 D1 E8 D1 E0 40 48 3D 3B 06 EB 74 75 7F 7E

Octets 3 3 3 3 4 3 4 2 2 1 1 3 4 2 2 2 2 2 AX valeur AX contenu de ladresse adr. range AX ladresse adr. AX AX + valeur AX AX + contenu de adr. AX AX - valeur AX AX - contenu de adr. dcale AX droite. dcale AX gauche. AX AX + 1 AX AX - 1 compare AX et valeur. compare AX et contenu de adr. saut inconditionnel (adr. relatif). saut si = saut si = saut si > saut si saut si CF = 0 saut si CF = 1

Fin du programme (retour au DOS) : MOV AH, 4C INT 21 B4 4C CD 21 2 2

TAB . 2.1 Quelques instructions du 80x86. Le code de linstruction est donn en hexadcimal dans la deuxime colonne. La colonne suivante prcise le nombre doctets ncessaires pour coder linstruction complte (oprande inclus). On note valeur une valeur sur 16 bits, et adr une adresse sur 16 bits galement.

E. Viennet - GTR - v1.2d

32

Partie 2. Introduction au langage machine

Dans ces situations, on doit utiliser une instruction de branchement, ou saut, qui indique au processeur ladresse de la prochaine instruction excuter. Rappelons que le registre IP du processeur conserve ladresse de la prochaine instruction excuter. Lors dun droulement normal, le processeur effectue les actions suivantes pour chaque instruction : 1. lire et dcoder linstruction ladresse IP ; 2. IP IP + taille de linstruction ; 3. excuter linstruction. Pour modier le droulement normal dun programme, il suft que lexcution de linstruction modie la valeur de IP. Cest ce que font les instructions de branchement. On distingue deux catgories de branchements, selon que le saut est toujours effectu (sauts inconditionnels) ou quil est effectu seulement si une condition est vrie (sauts conditionnels).

2.3.1

Saut inconditionnel

La principale instruction de saut inconditionnel est JMP. En adressage relatif, loprande de JMP est un dplacement, cest dire une valeur qui va tre ajoute IP. Laction effectue par JMP est : IP = IP + dplacement Le dplacement est un entier relatif sur code 8 bits. La valeur du dplacement utiliser pour atteindre une certaine instruction est : dplacement = adr. instruction vise - adr. instruction suivante Exemple : le programme suivant crit indniment la valeur 0 ladresse 0140H. La premire instruction est implante ladresse 100H. Adresse 0100 0103 0106 0107 Contenu MP B8 00 00 A3 01 40 EB FC Langage Symbolique MOV MOV JMP xxx Explication en francais

AX, 0 met AX a zero [140], AX ecrit a ladresse 140 0103 branche en 103 -> instruction jamais executee

Le dplacement est ici gal FCH, cest dire -4 (=103H-107H).

2.3.2

Indicateurs

Les instructions de branchement conditionnels utilisent les indicateurs, qui sont des bits spciaux positionns par lUAL aprs certaines oprations. Les indicateurs sont regroups dans le registre dtat du processeur. Ce registre nest pas accessible globalement par des instructions ; chaque indicateur est manipul individuellement par des instructions spciques. Nous tudierons ici les indicateurs nomms ZF, CF, SF et OF.
E. Viennet - GTR - v1.2d

2.3

Branchements

33

ZF Zero Flag Cet indicateur est mis 1 lorsque le rsultat de la dernire opration est zro. Lorsque lon vient deffectuer une soustraction (ou une comparaison), ZF=1 indique que les deux oprandes taient gaux. Sinon, ZF est positionn 0. CF Carry Flag Cest lindicateur de report (retenue), qui intervient dans les oprations daddition et de soustractions sur des entiers naturels. Il est positionn en particulier par les instructions ADD, SUB et CMP. CF = 1 sil y a une retenue aprs laddition ou la soustraction du bit de poids fort des oprandes. Exemples (sur 4 bits pour simplier) : 0 1 0 0 + 0 1 1 0 --------CF=0 1 0 1 0 1 1 0 0 + 0 1 1 0 --------CF=1 0 0 1 0 1 1 1 1 + 0 0 0 1 --------CF=1 0 0 0 0

SF Sign Flag SF est positionn 1 si le bit de poids fort du rsultat dune addition ou soustraction est 1 ; sinon SF=0. SF est utile lorsque lon manipule des entiers relatifs, car le bit de poids fort donne alors le signe du rsultat. Exemples (sur 4 bits) : 0 1 0 0 + 0 1 1 0 --------SF=1 1 0 1 0 1 1 0 0 + 0 1 1 0 --------SF=0 0 0 1 0 1 1 1 1 + 0 0 0 1 --------SF=0 0 0 0 0

OF Overow Flag Indicateur de dbordement4 OF=1 si le rsultat dune addition ou soustraction donne un nombre qui nest pas codable en relatif dans laccumulateur (par exemple si laddition de 2 nombres positifs donne un codage ngatif). 0 1 0 0 + 0 1 1 0 --------OF=1 1 0 1 0 1 1 0 0 + 0 1 1 0 --------OF=0 0 0 1 0 1 1 1 1 + 0 0 0 1 --------OF=1 0 0 0 0

Lorsque lUAL effectue une addition, une soustraction ou une comparaison, les quatre indicateurs sont positionns. Certaines autres instructions que nous tudierons plus loin peuvent modier les indicateurs.

Instruction CMP
Il est souvent utile de tester la valeur du registre AX sans modier celui-ci. Linstruction CMP effectue exactement les mme opration que SUB, mais ne stocke pas le rsultat de la soustraction. Son seul effet est donc de positionner les indicateurs. Exemple : aprs linstruction CMP AX, 5 on aura ZF = 1 si AX contient la valeur 5, et ZF = 0 si AX est diffrent de 5.
4

Dbordement, ou dpassement de capacit, overow en anglais.

E. Viennet - GTR - v1.2d

34 Instructions STC et CLC

Partie 2. Introduction au langage machine

Ces deux instructions permettent de modier la valeur de lindicateur CF. Symbole STC CLC CF 1 (SeT Carry) CF 0 (CLear Carry)

2.3.3

Sauts conditionnels

Les instructions de branchements conditionnels effectuent un saut (comme JMP) si une certaine condition est vrie. Si ce nest pas le cas, le processeur passe linstruction suivante (linstruction ne fait rien). Les conditions sexpriment en fonction des valeurs des indicateurs. Les instructions de branchement conditionnel sutilisent en gnral immdiatement aprs une instruction de comparaison CMP. Voici la liste des instructions de branchement les plus utiles : JE Jump if Equal saut si ZF = 1 ; JNE Jump if Not Equal saut si ZF = 0 ; JG Jump if Greater saut si ZF = 0 et SF = OF ; JLE Jump if Lower or Equal saut si ZF=1 ou SF=OF ; JA Jump if Above saut si CF=0 et ZF=0 ; JBE Jump if Below or Equal saut si CF=1 ou ZF=1. JB Jump if Below saut si CF=1. Note : les instructions JE et JNE sont parfois crites JZ et JNZ (mme code opration).

2.4

Instructions Arithmtiques et logiques

Les instructions arithmtiques et logiques sont effectues par lUAL. Nous avons dja vu les instructions daddition et de soustraction (ADD, SUB). Nous abordons ici les instructions qui travaillent sur la reprsentation binaire des donnes : dcalages de bits, oprations logiques bit bit. Notons que toutes ces oprations modient ltat des indicateurs.
E. Viennet - GTR - v1.2d

2.4

Instructions Arithmtiques et logiques

35

2.4.1 Instructions de dcalage et de rotation


Ces oprations dcalent vers la gauche ou vers la droite les bits de laccumulateur. Elles sont utilises pour dcoder bit bit des donnes, ou simplement pour diviser ou multiplier rapidement par une puissance de 2. En effet, dcaler AX de n bits vers la gauche revient le multiplier par 2n (sous rserve quil reprsente un nombre naturel et quil ny ait pas de dpassement de capacit). De mme, un dcalage vers la droite revient diviser par 2n . Voici les variantes les plus utiles de ces instructions. Elles peuvent oprer sur les registres AX ou BX (16 bits) ou sur les registres de 8 bits AH, AL, BH et BL. SHL registre, 1 (Shift Left) Dcale les bits du registre dune position vers la gauche. Le bit de gauche est transfr dans lindicateur CF. Les bits introduits droite sont zro. 0 CF SHR registre, 1 (Shift Right) Comme SHL mais vers la droite. Le bit de droite est transfr dans CF. 0 CF SHL et SHR peuvent tre utilis pour multiplier/diviser des entiers naturels (et non des relatifs car le bit de signe est perdu5 ). ROL registre, 1 (Rotate Left) Rotation vers la gauche : le bit de poids fort passe droite, et est aussi copi dans CF. Les autres bits sont dcals dune position.
CF

ROR registre, 1 (Rotate Right) Comme ROL, mais droite.


CF

RCL registre, 1 (Rotate Carry Left) Rotation vers la gauche en passant par lindicateur CF. CF prend la place du bit de poids faible ; le bit de poids fort part dans CF.
CF

RCR registre, 1 (Rotate Carry Right) Comme RCL, mais vers la droite.
5

Il existe dautres instructions pour les relatifs, que nous ne dcrirons pas ici.

E. Viennet - GTR - v1.2d

36
CF

Partie 2. Introduction au langage machine

RCL et RCR sont utiles pour lire bit bit le contenu dun registre6 .

2.4.2

Instructions logiques

Les instructions logiques effectuent des oprations logiques bit bit. On dispose de trois oprateurs logiques : ET, OU et OU exclusif. Il ny a jamais propagation de retenue lors de ces oprations (chaque bit du rsultat est calcul indpendamment des autres). 0 0 1 1 OU 0 1 0 1 ----------0 1 1 1 0 0 1 1 ET 0 1 0 1 ----------0 0 0 1 0 0 1 1 OU EX 0 1 0 1 ----------0 1 1 0

Les trois instructions OR, AND et XOR sont de la forme OR destination, source. destination dsigne le registre ou lemplacement mmoire (adresse) o doit tre plac le rsultat. source dsigne une constante (adressage immdiat), un registre (adressage implicite), ou une adresse (adressage direct). Exemples : OR OR OR AX, FF00 ; AX <AX, BX ; AX <AX, [1492] ; AX <AX ou FFOO AX ou BX AX ou [1492]

OR destination, source (OU) OU logique. Chaque bit du rsultat est gal 1 si au moins lun des deux bits oprande est 1. OR est souvent utilis pour forcer certains bits 1. Par exemple aprs OR AX, FF00, loctet de poids fort de AX vaut FF, tandis que loctet de poids faible est inchang. AND destination, source (ET) ET logique. Chaque bit du rsultat est gal 1 si les deux bits oprandes sont 1. AND est souvent utilis pour forcer certains bits 0. Aprs AND AX, FF00, loctet de poids faible de AX vaut 00, tandis que loctet de poids fort est inchang. XOR destination, source (OU EXCLUSIF) OU exclusif. Chaque bit du rsultat est gal 1 si lun ou lautre des bits oprandes (mais pas les deux) vaut 1. XOR est souvent utilis pour inverser certains bits. Aprs XOR AX, FFFF, tous les bits de AX sont inverss.
6

On pourra utiliser linstruction JB pour brancher si CF=1 aprs RCL ou RCR.

E. Viennet - GTR - v1.2d

2.4

Instructions Arithmtiques et logiques

37

2.4.3 Correspondance avec le langage C


Nous tudierons plus loin dans ce cours comment un compilateur traduit les programmes crits en langage C en langage machine. La table suivante tabli un parallle entre les instructions arithmtiques et logiques du 80x86 et les oprateurs du langage C (lorsque ces derniers agissent sur des variables non signes). Oprateur C + << >> | & ^ Instruction 80x86 ADD SUB SHL SHR OR AND XOR addition ; soustraction ; dcalage gauche ; dcalage droite ; ou bit bit ; et bit bit ; ou exclusif bit bit.

E. Viennet - GTR - v1.2d

38

Partie 2. Introduction au langage machine

E. Viennet - GTR - v1.2d

Partie 3 Lassembleur 80x86


3.1 Lassembleur

3.1.1 Pourquoi lassembleur ?


Lorsque lon doit lire ou crire un programme en langage machine, il est difcile dutiliser la notation hexadcimale (voir lexemple page 28). On crit les programmes laide de symboles1 comme MOV, ADD, etc. Les concepteurs de processeur, comme Intel, fournissent toujours une documentation avec les codes des instructions de leur processeur, et les symboles correspondant. Nous avons dja utilis un programme, debug, trs utile pour traduire automatiquement les symboles des instructions en code machine. Cependant, debug nest utilisable que pour mettre au point de petits programmes. En effet, le programmeur doit spcier lui mme les adresses des donnes et des instructions. Soit par exemple le programme suivant, qui multiplie une donne en mmoire par 8 : 0100 0103 0106 0108 0109 010B 010E 0110 0112 MOV BX, [0112] ; MOV AX, 3 SHL BX ; DEC AX JNE 0106 ; MOV [0111], BX ; MOV AH, 4C INT 21H ; on range ici la charge la donnee decale a gauche recommence 3 fois range le resultat

donnee

Nous avons spci que la donne tait range ladresse 0111H, et que linstruction de branchement JE allait en 0106H. Si lon dsire modier lgrement ce programme, par exemple ajouter une instruction avant MOV BX, [0111], il va falloir modier ces deux adresses. On conoit aisment que ce travail devienne trs difcile si le programme manipule beaucoup de variables.
1

Les symboles associs aux instructions sont parfois appels mnmoniques.

E. Viennet - GTR - v1.2d

40

Partie 3. Lassembleur 80x86

Lutilisation dun assembleur rsout ces problmes. Lassembleur permet en particulier de nommer les variables (un peu comme en langage C) et de reprer par des tiquettes certaines instructions sur lesquelles on va effectuer des branchements.

3.1.2

De lcriture du programme son excution

Lassembleur est un utilitaire qui nest pas interactif, contrairement lutilitaire debug. Le programme que lon dsire traduire en langage machine (on dit assembler) doit tre plac dans un chier texte (avec lextension .ASM sous DOS). La saisie du programme source au clavier ncessite un programme appel diteur de texte. Lopration dassemblage traduit chaque instruction du programme source en une instruction machine. Le rsultat de lassemblage est enregistr dans un chier avec lextension .OBJ (chier objet). Le chier .OBJ nest pas directement excutable. En effet, il arrive frquemment que lon construise un programme excutable partir de plusieurs chiers sources. Il faut relier les chiers objets laide dun utilitaire nomm diteur de lien (mme si lon en a quun seul). Lditeur de liens fabrique un chier excutable, avec lextension .EXE. Le chier .EXE est directement excutable. Un utilitaire spcial du systme dexploitation (DOS ici), le chargeur est responsable de la lecture du chier excutable, de son implantation en mmoire principale, puis du lancement du programme.

3.1.3

Structure du programme source

La structure gnrale dun programme assembleur est reprsente gure 3.1. Comme tout programme, un programme crit en assembleur comprend des dnitions de donnes et des instructions, qui scrivent chacune sur une ligne de texte. Les donnes sont dclares par des directives, mots clef spciaux que comprend lassembleur. Les directives qui dclarent des donnes sont regroupes dans le segment de donnes, qui est dlimit par les directives SEGMENT et ENDS. Les instructions sont places dans un autre segment, le segment de code. La directive ASSUME est toujours prsente et sera explique plus loin (section 3.2.2). La premire instruction du programme (dans le segment dinstruction) doit toujours tre repre par une tiquette. Le chier doit se terminer par la directive END avec le nom de ltiquette de la premire instruction (ceci permet dindiquer lditeur de liens quelle est la premire instruction excuter lorsque lon lance le programme). Les points-virgules indiquent des commentaires.

3.1.4

Dclaration de variables

On dclare les variables laide de directives. Lassembleur attribue a chaque variable une adresse. Dans le programme, on repre les variables grce leur nom. Les noms des variables (comme les tiquettes) sont composs dune suite de 31 caractres au maximum, commenant obligatoirement par une lettre. Le nom peut comporter des majuscules, des minuscules, des chiffres, plus les caractres @, ? et _.
E. Viennet - GTR - v1.2d

3.1

Lassembleur
SEGMENT

41
; data est le nom du segment de donnees

data

; directives de declaration de donnees data ENDS ; fin du segment de donnees

ASSUME DS:data, CS:code code debut: SEGMENT ; code est le nom du segment dinstructions ; 1ere instruction, avec letiquette debut

; suite dinstructions code ENDS END debut ; fin du programme, avec letiquette ; de la premiere instruction.

F IG . 3.1 Structure dun programme en assembleur (chier .ASM).


Lors de la dclaration dune variable, on peut lui affecter une valeur initiale.

Variables de 8 ou 16 bits
Les directives DB (Dene Byte) et DW (Dene Word) permettent de dclarer des variables de respectivement 1 ou 2 octets. Exemple dutilisation : data entree sortie cle nega data SEGMENT DW 15 DW ? DB ? DB -1 ENDS ; ; ; ; 2 2 1 1 octets initialises a 15 octets non initialises octet non initialise octet initialise a -1

Les valeurs initiales peuvent tre donnes en hexadcimal (constante termine par H) ou en binaire (termine par b) : data truc masque data SEGMENT DW 0F0AH ; en hexa DB 01110000b ; en binaire ENDS

Les variables sutilisent dans le programme en les dsignant par leur nom. Aprs la dclaration prcdente, on peut crire par exemple :
E. Viennet - GTR - v1.2d

42
MOV AND MOV AX, truc AL, masque truc, AX

Partie 3. Lassembleur 80x86

Lassembleur se charge de remplacer les noms de variable par les adresses correspondantes.

Tableaux
Il est aussi possible de dclarer des tableaux, cest dire des suite doctets ou de mots conscutifs. Pour cela, utiliser plusieurs valeurs initiales : data machin chose data SEGMENT db 10, 0FH ; 2 fois 1 octet db -2, ALORS ENDS

Remarquez la dclaration de la variable chose : un octet -2 (=FEH), suivi dune suite de caractres. Lassembleur nimpose aucune convention pour la reprsentation des chanes de caractres : cest lutilisateur dajouter si ncessaire un octet nul pour marquer la n de la chane. Aprs chargement de ce programme, la mmoire aura le contenu suivant : Dbut du segment data 0AH OFH FEH 41H 4CH 4FH 52H 53H machin machin + 1 chose chose + 1 chose + 2 chose + 3 chose + 4 chose + 5

Si lon veut crire un caractre X la place du O de ALORS, on pourra crire : MOV MOV AL, X chose+1, AL

Notons que chose+1 est une constante (valeur connue au moment de lassemblage) : linstruction gnre par lassembleur pour MOV chose+1, AL est MOV [adr], AL .

Directive dup
Lorsque lon veut dclarer un tableau de n cases, toutes initialises la mme valeur, on utilise la directive dup : tab zzz DB DW 100 dup (15) ; 100 octets valant 15 10 dup (?) ; 10 mots de 16 bits non initialises

E. Viennet - GTR - v1.2d

3.2

Segmentation de la mmoire

43

3.2

Segmentation de la mmoire

Nous abordons ici le problme de la segmentation de la mmoire. Nous venons de voir quen assembleur, les donnes taient normalement regroupes dans une zone mmoire nomme segment de donnes, tandis que les instructions taient places dans un segment dinstructions. Ce partage se fonde sur la notion plus gnrale de segment de mmoire, qui est la base du mcanisme de gestion des adresses par les processeurs 80x86. Nous avons vu plus haut (section 2.2.2) que les instructions utilisaient normalement des adresses codes sur 16 bits. Nous savons aussi que le registre IP, qui stocke ladresse dune instruction, fait lui aussi 16 bits. Or, avec 16 bits il nest possible dadresser que 216 = 64 Kilo octets. Le bus dadresse du 80486 possde 32 bits. Cette adresse de 32 bits est forme par la juxtaposition dun registre segment (16 bits de poids fort) et dun dplacement (offset, 16 bits de poids faible). Les adresses que nous avons manipul jusquici sont des dplacements2 . Le schma suivant illustre la formation dune adresse 32 bits partir du segment et du dplacement sur 16 bits : 16 bits segment 16 bits dplacement

adresse 32 bits On appellera segment de mmoire une zone mmoire adressable avec une valeur xe du segment (les 16 bits de poids fort). Un segment a donc une taille maximale de 64 Ko.

3.2.1

Segment de code et de donnes

La valeur du segment est stocke dans des registres spciaux de 16 bits. Le registre DS (Data Segment) est utilis pour le segment de donnes, et le registre CS (Code Segment) pour le segment dinstructions.

Registre CS
Lorsque le processeur lit le code dune instruction, ladresse 32 bits est forme laide du registre segment CS et du registre dplacement IP. La paire de ces deux registres est note CS:IP.

Registre DS
Le registre DS est utilis pour accder aux donnes manipules par le programme. Ainsi, linstruction MOV AX, [0145] donnera lieu la lecture du mot mmoire dadresse DS:0145H.
En ralit, les mcanismes de calculs des adresses sont bien plus complexes que ce que nous dcrirons dans ce cours, et dpendent du type de processeur (8086, 286 ou 486), ainsi que du mode de travail slectionn (rel ou protg). Nous ignorerons ici ces aspects.
E. Viennet - GTR - v1.2d
2

44 Initialisation des registres segment

Partie 3. Lassembleur 80x86

Dans ce cours, nous ncrirons pas de programmes utilisant plus de 64 Ko de code et 64 Ko de donnes, ce qui nous permetra de nutiliser quun seul segment de chaque type. Par consquent, la valeur des registres CS et de DS sera xe une fois pour toute au dbut du programme. Le programmeur en assembleur doit se charger de linitialisation de DS, cest dire de lui affecter ladresse du segment de donnes utiliser. Par contre, le registre CS sera automatiquement initialis sur le segment contenant la premire instruction au moment du chargement en mmoire du programme (par le chargeur du systme dexploitation).

3.2.2

Dclaration dun segment en assembleur

Comme nous lavons vu (voir gure 3.1), les directives SEGMENT et ENDS permettent de dnir les segments de code et de donnes. La directive ASSUME permet dindiquer lassembleur quel est le segment de donnes et celui de code, an quil gnre des adresses correctes. Enn, le programme doit commencer, avant toute rfrence au segment de donnes, par initialiser le registre segment DS, de la faon suivante : MOV AX, nom_segment_de_donnees MOV CS, AX (Il serait plus simple de faire MOV CS, nom_segment_de_donnees mais il se trouve que cette instruction nexiste pas.) La gure 3.2 donne un exemple complet de programme assembleur.

3.3

Adressage indirect

Nous introduisons ici un nouveau mode dadressage, ladressage indirect, qui est trs utile par exemple pour traiter des tableaux3 . Ladressage indirect utilise le registre BX pour stocker ladresse dune donne. En adressage direct, on note ladresse de la donne entre crochets : MOV AX, [130] ; adressage direct

De faon similaire, on notera en adressage indirect : MOV AX, [BX] ; adressage direct

Ici, BX contient ladressage de la donne. Lavantage de cette technique est que lon peut modier ladresse en BX, par exemple pour accder la case suivante dun tableau. Avant dutiliser un adressage indirect, il faut charger BX avec ladresse dune donne. Pour cela, on utilise une nouvelle directive de lassembleur, offset.
Il existe encore dautres modes dadressage, comme ladressage index, que nous naborderons pas dans ce cours.
E. Viennet - GTR - v1.2d
3

3.3

Adressage indirect

45

; Programme calculant la somme de deux entiers de 16 bits data A B Result data code SEGMENT DW 10 DW 1789 DW ? ENDS SEGMENT ASSUME DS:data, CS:code debut: MOV MOV ; Le MOV ADD MOV AX, data ; etiquette car 1ere instruction DS, AX ; initialise DS programme: AX, A AX, B result, AX ; range resultat

; A = 10 ; B = 1789 ; resultat

code

; Retour au DOS: MOV AH, 4CH INT 21H ENDS END debut ; etiquette de la 1ere inst.

F IG . 3.2 Exemple de programme en assembleur. On calcule la somme de deux variables A et B et on range le rsultat dans la variable nomme Result.

E. Viennet - GTR - v1.2d

46
data truc data SEGMENT DW 1996 ENDS ... MOV ...

Partie 3. Lassembleur 80x86

BX, offset truc

Si lon avait employ la forme MOV BX, truc on aurait charg dans BX la valeur stocke en truc (ici 1996), et non son adresse4 .

3.3.1

Exemple : parcours dun tableau

Voici un exemple plus complet utilisant ladressage indirect. Ce programme passe un chane de caractres en majuscules. La n de la chane est repre par un caractre $. On utilise un ET logique pour masquer le bit 5 du caractre et le passer en majuscule (voir le code ASCII). data tab data code SEGMENT DB Un boeuf Bourguignon, $ ENDS SEGMENT ASSUME DS:data, CS:code MOV MOV MOV repet: MOV AND MOV INC CMP JNE AX, data DS, AX BX, offset tab ; adresse debut tableau AL, [BX] AL, 11011111b [BX], AL BX AL, $ repet ; ; ; ; ; ; lis 1 caractere force bit 5 a zero range le caractere passe au suivant arrive au $ final ? sinon recommencer

debut:

code

MOV AH, 4CH INT 21H ENDS END debut

; Retour au DOS

Lassembleur gnre une instruction MOV AX, [adr] lorsquil rencontre un MOV AX, etiquette.
E. Viennet - GTR - v1.2d

3.4

La pile

47

3.3.2 Spcication de la taille des donnes


Dans certains cas, ladressage indirect est ambigu. Par exemple, si lon crit MOV [BX], 0 ; range 0 a ladresse specifiee par BX lassembleur ne sait pas si linstruction concerne 1, 2 ou 4 octets conscutifs. An de lever lambigut, on doit utiliser une directive spciant la taille de la donne transfrer : MOV MOV byte ptr [BX], val word ptr [BX], val ; concerne 1 octet ; concerne 1 mot de 2 octets

3.4

La pile

3.4.1 Notion de pile


Les piles offrent un nouveau moyen daccder des donnes en mmoire principale, qui est trs utilis pour stocker temporairement des valeurs. Une pile est une zone de mmoire et un pointeur qui conserve ladresse du sommet de la pile.

3.4.2 Instructions PUSH et POP


Deux nouvelles instructions, PUSH et POP, permettent de manipuler la pile. PUSH registre empile le contenu du registre sur la pile. POP registre retire la valeur en haut de la pile et la place dans le regsitres spci. Exemple : transfert de AX vers BX en passant par la pile. PUSH AX POP BX ; Pile <- AX ; BX <- Pile

(Note : cet exemple nest pas trs utile, il vaut mieux employer MOV AX, BX.) La pile est souvent utilise pour sauvegarder temporairement le contenu des registres : ; AX et BX contiennent des donnees a conserver PUSH AX PUSH BX MOV ADD MOV POP POP BX, truc AX, BX truc, BX BX AX ; on utilise AX ; et BX

; recupere lancien BX ; et lancien AX

On voit que la pile peut conserver plusieurs valeurs. La valeur dpile par POP est la dernire valeur empile ; cest pourquoi on parle ici de pile LIFO (Last In First Out, Premier Entr Dernier Sorti).
E. Viennet - GTR - v1.2d

48

Partie 3. Lassembleur 80x86

3.4.3

Registres SS et SP

La pile est stocke dans un segment spar de la mmoire principale. Le processeur possde deux registres ddis la gestion de la pile, SS et SP. Le registre SS (Stack Segment5 ) est un registre segment qui contient ladresse du segment de pile courant (16 bits de poids fort de ladresse). Il est normalement initialis au dbut du programme et reste x par la suite. Le registre SP (Stack Pointer) contient le dplacement du sommet de la pile (16 bits de poids faible de son adresse).
16 bits

Adresses Croissantes

SP-2 SP

emplacement libre

PUSH

POP

F IG . 3.3 La pile. Les adresses croissent vers le bas. SP pointe sur le sommet (dernier emplacement occup).
La gure 3.3 donne une reprsentation schmatique de la pile. Linstruction PUSH effectue les oprations suivantes : SP SP - 2 [SP] valeur du registre 16 bits. Notons quau dbut (pile vide), SP pointe sous la pile. Linstruction POP effectue le travail inverse : registre destination [SP] SP SP + 2 Si la pile est vide, POP va lire une valeur en dehors de lespace pile, donc imprvisible.

3.4.4

Dclaration dune pile

Pour utiliser une pile en assembleur, il faut dclarer un segment de pile, et y rserver un espace sufsant. Ensuite, il est ncessaire dinitialiser les registres SS et SP pour pointer sous le sommet de la pile. Voici la dclaration dune pile de 200 octets : seg_pile base_pile
5

SEGMENT stack DW 100 dup (?) EQU this word

; mot clef stack car pile ; reserve espace ; etiquette base de la pile

stack = pile en anglais.

E. Viennet - GTR - v1.2d

3.4

La pile
ENDS

49

seg_pile

Noter le mot clef stack aprs la directive SEGMENT, qui indique lassembleur quil sagit dun segment de pile. An dinitialiser SP, il faut reprer ladresse du bas de la pile ; cest le rle de la ligne base_pile (voir gure 3.4). EQU this word

PUSH base_pile

POP

F IG . 3.4 Une pile vide. Ltiquette base-pile repre la base de la pile, valeur initiale de SP.
Aprs les dclarations ci-dessus, on utilisera la squence dinitialisation : ASSUME SS:seg_pile MOV MOV MOV AX, seg_pile SS, AX

; init Stack Segment

SP, base_pile ; pile vide

Noter que le registre SS sinitialise de faon similaire au registre DS ; par contre, on peut accder directement au registre SP.

E. Viennet - GTR - v1.2d

50

Partie 3. Lassembleur 80x86

E. Viennet - GTR - v1.2d

3.5

Procdures

51

3.5

Procdures

3.5.1 Notion de procdure


La notion de procdure en assembleur correspond celle de fonction en langage C, ou de sous-programme dans dautres langages.

instruction A instruction B CALL Calcul instruction D RET Calcul instruction C

F IG . 3.5 Appel dune procdure. La procdure est nomme calcul. Aprs linstruction B, le processeur passe linstruction C de la procdure, puis continue jusqu rencontrer RET et revient linstruction D.
Une procdure est une suite dinstructions effectuant une action prcise, qui sont regroupes par commodit et pour viter davoir les crire plusieurs reprises dans le programme. Les procdures sont repres par ladresse de leur premire instruction, laquelle on associe une tiquette en assembleur. Lexcution dune procdure est dclenche par un programme appelant. Une procdure peut elle-mme appeler une autre procdure, et ainsi de suite.

3.5.2 Instructions CALL et RET


Lappel dune procdure est effectu par linstruction CALL. CALL adresse_debut_procedure Ladresse est sur 16 bits, la procdure est donc dans le mme segment dinstructions6 . CALL est une nouvelle instrcution de branchement inconditionnel. La n dune procdure est marque par linstruction RET : RET RET ne prend pas dargument ; le processeur passe linstruction place immdiatement aprs le CALL. RET est aussi une instruction de branchement : le registre IP est modi pour revenir la valeur quil avait avant lappel par CALL. Comment le processeur retrouve-t-il cette
Il existe aussi des appels de procdure dans des segments diffrents, que nous ntudierons pas dans ce cours.
E. Viennet - GTR - v1.2d
6

52

Partie 3. Lassembleur 80x86

valeur ? Le problme est compliqu par le fait que lon peut avoir un nombre quelconque dappels imbriqus, comme sur la gure 3.6. Ladresse de retour, utilise par RET, est en fait sauvegarde sur la pile par linstruction CALL. Lorsque le processeur excute linstruction RET, il dpile ladresse sur la pile (comme POP), et la range dans IP.

Proc 1

Proc 2

CALL Proc 1

CALL Proc 2 RET RET

F IG . 3.6 Plusieurs appels de procdures imbriqus.


Linstruction CALL effectue donc les oprations : Empiler la valeur de IP. A ce moment, IP pointe sur linstruction qui suit le CALL. Placer dans IP ladresse de la premire instruction de la procdure (donne en argument). Et linstruction RET : Dpiler une valeur et la ranger dans IP.

3.5.3

Dclaration dune procdure

Lassembleur possde quelques directives facilitant la dclaration de procdures. On dclare une procdure dans le segment dinstruction comme suit : Calcul PROC near ; procedure nommee Calcul ... ; instructions

RET ; derniere instruction Calcul ENDP ; fin de la procedure Le mot clef PROC commence la dnition dune procdure, near indiquant quil sagit dune procdure situe dans le mme segment dinstructions que le programme appelant. Lappel scrit simplement : CALL Calcul

3.5.4

Passage de paramtres

En gnral, une procdure effectue un traitement sur des donnes (paramtres) qui sont fournies par le programme appelant, et produit un rsultat qui est transmis ce programme.
E. Viennet - GTR - v1.2d

3.5

Procdures
Plusieurs stratgies peuvent tre employes :

53

1. Passage par registre : les valeurs des paramtres sont contenues dans des registres du processeur. Cest une mthode simple, mais qui ne convient que si le nombre de paramtres est petit (il y a peu de registres). 2. Passage par la pile : les valeurs des paramtres sont empiles. La procdure lit la pile.

Exemple avec passage par registre


On va crire une procdure SOMME qui calcule la somme de 2 nombres naturels de 16 bits. Convenons que les entiers sont passs par les registres AX et BX, et que le rsultat sera plac dans le registre AX. La procdure scrit alors trs simplement : SOMME PROC near ADD AX, BX RET ENDP MOV MOV CALL MOV AX, 6 BX, Truc SOMME Truc, AX ; AX <- AX + BX

SOMME

et son appel, par exemple pour ajouter 6 la variable Truc :

Exemple avec passage par la pile


Cette technique met en uvre un nouveau registre, BP (Base Pointer), qui permet de lire des valeurs sur la pile sans les dpiler ni modier SP. Le registre BP permet un mode dadressage indirect spcial, de la forme : MOV AX, [BP+6] cette instruction charge le contenu du mot mmoire dadresse BP+6 dans AX. Ainsi, on lira le sommet de la pile avec : MOV MOV et le mot suivant avec : MOV PUSH PUSH CALL AX, [BP+2] 6 Truc SOMME2 ; 2 car 2 octets par mot de pile. Lappel de la procdure SOMME2 avec passage par la pile est : BP, SP AX, [BP] ; BP pointe sur le sommet ; lit sans depiler

La procdure SOMME2 va lire la pile pour obtenir la valeur des paramtres. Pour cela, il faut bien comprendre quel est le contenu de la pile aprs le CALL :
E. Viennet - GTR - v1.2d

54

Partie 3. Lassembleur 80x86

SP SP+2 SP+4

IP Truc 6

(adresse de retour) (premier paramtre) (deuxime paramtre)

Le sommet de la pile contient ladresse de retour (ancienne valeur de IP empile par CALL). Chaque lment de la pile occupe deux octets. La procdure SOMME2 scrit donc : SOMME2 PROC MOV MOV ADD RET ENDP near BP, SP AX, [BP+2] AX, [BP+4] ; ; ; ; AX <- arg1 + arg2 adresse sommet pile charge argument 1 ajoute argument 2

SOMME2

La valeur de retour est laisse dans AX. La solution avec passage par la pile parait plus lourde sur cet exemple simple. Cependant, elle est beaucoup plus souple dans le cas gnral que le passage par registre. Il est trs facile par exemple dajouter deux paramtres supplmentaires sur la pile. Une procdure bien crite modie le moins de registres possible. En gnral, laccumulateur est utilis pour transmettre le rsultat et est donc modi. Les autres registres utiliss par la procdure seront normalement sauvegards sur la pile. Voici une autre version de SOMME2 qui ne modie pas la valeur contenue par BP avant lappel : SOMME2 PROC PUSH MOV MOV ADD POP RET ENDP near BP BP, SP AX, [BP+4] AX, [BP+6] BP ; ; ; ; ; ; AX <- arg1 + arg2 sauvegarde BP adresse sommet pile charge argument 1 ajoute argument 2 restaure ancien BP

SOMME2

Noter que les index des arguments (BP+4 et BP+6) sont modis car on a ajout une valeur au sommet de la pile.

E. Viennet - GTR - v1.2d

Partie 4 Notions de compilation


Aprs avoir tudi dans les chapitres prcdents le langage machine et lassembleur, nous abordons ici les langages plus sophistiqus, qui permettent de programmer plus facilement des tches complexes. Aprs une introduction aux notions de langage informatique et de compilation, nous tudierons plus prcisement le cas du langage C sur PC.

4.1

Langages informatiques

Un langage informatique, par opposition aux langages naturels comme le franais ou langlais, est un langage structur utilis pour dcrire des actions (ou algorithmes) excutables par un ordinateur. La principale diffrence entre les langages informatiques et les langues naturelles rside dans labsence dambiguit : alors que certaines phrases du franais peuvent tre interprtes diffremment par diffrents auditeurs, tous seront daccord pour dire ce que fait un programme donn. Historiquement, le premier langage informatique a t lassembleur. Or, la programmation en assembleur est souvent fastidieuse, surtout pour des programmes importants. Plus grave, un programme crit en assembleur dpend troitement du type de machine pour lequel il a t crit. Si lon dsire ladapter une autre machine (porter le programme), il faut le rcrire entirement. Cest pour rpondre ces problmes quont t dvelopps ds les annes 50 des langages de plus haut niveau. Dans ces langages, le programmeur crit selon des rgles strictes mais dispose dinstructions et de structures de donnes plus expressives quen assembleur. Par exemple, dans certains langage comme MATLAB, on pourra crire en une ligne que lon dsire multiplier deux matrices, alors que le programme correspondant en assembleur prendrait quelques centaines de lignes.

4.1.1 Interprteurs et compilateurs


On distingue grossirement deux familles de langages informatique, les langages interprts et les langages compils.
E. Viennet - GTR - v1.2d

56

Partie 4. Notions de compilation

Un programme en langage interprt va tre traduit au fur et mesure de son excution par un interprteur. Un interprteur est un programme charg de dcoder chaque instruction du langage et de dexcuter les actions correspondantes. Dans le cas de programmes compils, la traduction en langage machine a lieu une fois pour toute. Le compilateur (traducteur) traduit chaque instruction du langage en une suite plus ou moins complexe dinstructions en langage machine. Les programmes compils sexcutent ainsi plus rapidement que les programmes interprts, car la traduction est dja faite. On perd cependant en souplesse de programmation, car les types de donnes doivent tre connus au moment de la compilation. Un compilateur traduit un programme source crit dans un langage de haut niveau (par exemple C) en un autre programme dans un langage de bas niveau (par exemple lassembleur). Cette opration de traduction est assez complexe ; les compilateurs sont des programmes sophistiqus, qui ont beaucoup progress ces dernires annes.

4.1.2

Principaux langages
C/C++ ADA Cobol Fortran Pascal programmation systme et scientique ; logiciels embarqus ; gestion ; calcul scientique ; enseignement.

Les principaux langages compils sont :

Quelques langages interprts : BASIC LISP Prolog Perl Python Java MATLAB Mathematica bricolage ; Intelligence Articielle ; idem ; traitement de chier textes ; programmation systme, internet ; applets internet ; calcul scientique ; idem.

Notons que la distinction compil/interprt est parfois oue. Certains langages, comme LISP, Java ou Python, peuvent subir une premire phase de compilation vers un langage intermdiaire (bytecode), qui sera lui mme interprt.

4.2

Compilation du langage C sur PC

Nous nous intressons dans cette section la traduction en assembleur des programmes en langage C sur PC (processeurs de la famille 80x86 que nous avons tudi dans les chapitres prcdents). Le dtail de cette traduction (ou compilation) dpend bien entendu du compilateur utilis et du systme dexploitation (DOS, Windows, UNIX,...). Il dpend aussi de divers rglages modiables par le programmeur : taille du type int (16 ou 32 bits), modle de
E. Viennet - GTR - v1.2d

4.2

Compilation du langage C sur PC

57

mmoire utilis (pointeurs sur 16 ou 32 bits, donnes et code dans des segments diffrents ou non, etc.). Nous naborderons pas ces problmes dans ce cours (voir la documentation dtaille du compilateur utilis si besoin), mais nous tudierons quelques exemples de programmes C et leur traduction. Le compilateur utilis est Turbo C++ version 3 (en mode ANSI C) sous DOS, avec des entiers de 16 bits et le modle de mmoire small. Normalement, ce compilateur gnre directement du code objet (chier .OBJ) partir dun chier source en langage C (chier .C ou .CPP). Il est cependant possible de demander larrt de la compilation pour obtenir du langage assembleur (chier .ASM). Pour cela, utiliser sous DOS la commande : tcc -S exemple.c Un chier exemple.asm est alors cr.

4.2.1

Traduction dun programme simple

Considrons le programme en langage C suivant : /* Programme EXEMPLE_1.c en langage C */ void main(void) { char X = 11; char C = A; int Res; if (X < 0) Res = -1; else Res = 1; } Trois variables, X, C et Res sont dnies avec ou sans valeur initiale. Ensuite, on teste le signe de X et range 1 ou -1 dans la vaiable Res. La gure 14 montre la traduction en assembleur effectue par Turbo C1 . Remarquons les points suivants : 1. La fonction main() est considre ce stade comme une procdure ordinaire (PROC near). Cest plus tard, lors de la phase ddition de lien, quil sera indiqu que la fonction main() correspond au point dentre du programme (=premire instruction excuter). La fonction est termine par linstruction RET. 2. On nutilise pas ici de segment de donnes : toutes les variables sont alloues sur la pile. 3. Lallocation des variables sur la pile seffectue simplement en soustrayant au pointeur SP le nombre doctets que lon va utiliser (ici 4, car 2 variables X et C dun octet, plus une variable (Res) de 2 octets). 4. La ligne X = 11 est traduite par MOV byte ptr [bp-1], 11
1

Nous avons lgrement simpli le rsultat obtenu par tcc -S pour le rendre plus lisible.

E. Viennet - GTR - v1.2d

58
_TEXT ; ; ; _main SEGMENT byte public CODE void main(void) { ASSUME PROC PUSH MOV SUB cs:_TEXT near bp bp,sp sp, 4 char X = 11; MOV ; ; ; MOV ; ; ; ; CMP JGE ; ; ; MOV JMP @1@86: ; ; ; ; MOV @1@114: ; ; } ; MOV POP RET _main ENDP _TEXT ENDS END

Partie 4. Notions de compilation

; ; ;

byte ptr [bp-1], 11 char C = A; byte ptr [bp-2], 65 int Res; if (X < 0) byte ptr [bp-1], 0 @1@86 Res = -1; word ptr [bp-4], 65535 @1@114

else Res = 1; word ptr [bp-4], 1

sp,bp bp

F IG . 4.1 Traduction de EXEMPLE_1.C effectue par Turbo C.


E. Viennet - GTR - v1.2d

4.2

Compilation du langage C sur PC

59

Noter lutilisation de byte ptr pour indiquer que BP contient ici ladresse dune donne de taille octet.

5. Le test if (X <0) est traduit par une instruction CMP suivie dun branchement conditionnel, utilisant une tiquette place par le compilateur (do son nom trange : @1@114).

4.2.2

Fonctions C et procdures

Chaque langage de programmation doit dnir une convention de passage des paramtres lors des appels de procdures ou de fonctions. Cette convention permet de prvoir ltat de la pile avant, pendant et aprs un appel de fonction (dans quel ordre sont empils les paramtres ? Qui est responsable de leur dpilement ? Comment est passe la valeur de retour ?) Etudions partir dun exemple simple comment sont passs les paramtres lors des appels de fonctions en langage C.

/* Programme EXEMPLE_2.C */ int ma_fonction( int x, int y ) { return x + y; } void main(void) { int X = 11; int Y = 22; int Res; Res = ma_fonction(X, Y); }

La traduction en assembleur de ce programme (effectue par Turbo C) est donne dans lencadr suivant.
E. Viennet - GTR - v1.2d

60

Partie 4. Notions de compilation

_TEXT SEGMENT byte public CODE ; ; int ma_fonction( int x, int y ) { ASSUME cs:_TEXT _ma_fonction PROC near PUSH bp MOV bp,sp ; ; return x + y; ; MOV ax, [bp+4] ADD ax, [bp+6] ; } POP bp RET _ma_fonction ENDP ; ; void main(void) { ; ASSUME cs:_TEXT _main PROC near PUSH bp MOV bp,sp SUB sp,6 ; int X = 11; MOV [bp-2], 11 ; int Y = 22; MOV [bp-4], 22 ; ; int Res; ; Res = ma_fonction(X, Y); PUSH word ptr [bp-4] PUSH word ptr [bp-2] CALL _ma_fonction ADD sp, 4 MOV [bp-6],ax ; } MOV sp,bp POP bp RET _main ENDP _TEXT ENDS En tudiant cet exemple, on constate que : 1. la fonction C ma_fonction() a t traduite par une procdure assembleur nomE. Viennet - GTR - v1.2d

4.3

Utilisation dassembleur dans les programmes C sur PC

61

me _ma_fonction, qui lit ces arguments sur la pile laide de la technique que nous avons vue en section 3.5.4 (page 53) ; 2. la fonction ne modie pas ltat de la pile ; 3. Avant lappel de la fonction (CALL), les arguments sont empils (PUSH). Aprs le retour de la fonction, le pointeur SP est incrment pour remettre la pile dans son tat prcdent (ADD sp, 4 est quivalent deux instructions POP 2 octets). 4. La valeur retourne par la fonction2 est passe dans AX (do linstruction MOV [bp-6], ax). Le respect des conventions dappel de procdures est bien entendu trs important si lon dsire mlanger des fonctions C et des procdures en assembleur3 .

4.3 Utilisation dassembleur dans les programmes C sur PC


Il est possible dintroduire explicitement des instructions assembleur dans des programmes en langage C (ou C++). Evidemment, cette pratique conduit un programme non portable, car le langage assembleur diffre dun type dordinateur lautre (on a vu que la portabilit tait lune des raisons conduisant crire en langage C). Cependant, lorsque lon crit un programme utilisant les ressources matrielles dune machine donne (par exemple un PC), il est souvent plus confortable dcrire un programme C contenant quelques lignes dassembleur que de tout crire en assembleur. La faon de procder diffre suivant le type de compilateur. Nous ne mentionnerons que lapproche retenue par Turbo C++/TASM4 Voici un exemple en langage C : void main(void) { int A = 20; asm { MOV AX, A SHL AX, 1 } printf( "AX =%d\n", _AX ); } Ce programme afche 40. Le mot cl asm permet dintroduire des instructions assembleur. Ces instructions peuvent accder aux variables dclares en C (ici la variable entire A). Dautre part, les instructions en C peuvent accder aux registres du processeur, par lintermdiaire de pseudo-variables _AX, _BX,_CX, etc. (nom du registre prcd dun caractre soulign.) Pour plus dinformation, on se rfrera la documentation de Turbo C (aide en ligne).
2 3

Les fonctions C retournent toujours une seule valeur. Attention, dans dautres langages comme Pascal, les conventions sont diffrentes. 4 Le logiciel TASM est distribu sparment de Turbo C, et nest donc pas toujours disponible.
E. Viennet - GTR - v1.2d

62

Partie 4. Notions de compilation

E. Viennet - GTR - v1.2d

Partie 5 Le systme dexploitation


5.1 Notions gnrales

Le systme dexploitation dun ordinateur est le programme qui permet daccder aux ressources matrielles de cet ordinateur. Ces ressources matrielles sont essentiellement les organes dentres/sorties : clavier, cran, liaisons rseau, imprimante, disque dur, etc. Les priphriques dentres/sorties varient dun modle dordinateur lautre. Mme au sein de la famille des compatibles PC, on trouve difcilement deux modles dots dexactement les mmes priphriques (cartes dextension par exemple). De ce fait, les instructions excuter pour piloter tel priphrique (par exemple pour afcher un rectangle rouge lcran) diffrent dun ordinateur lautre. Le rle principal du systme dexploitation est disoler les programmes des dtails du matriel. Un programme dsirant afcher un rectangle ne va pas envoyer des instructions la carte graphique de lordinateur, mais plutt demander au systme dexploitation de le faire. Cest le systme dexploitation qui doit connaitre les dtails du matriel (dans ce cas le type de carte graphique et les instructions quelle comprend). Cette rpartition des rles simplie grandement lcriture des programmes dapplication1 Le systme dexploitation est donc un programme complexe, li la conguration matrielle de la machine. Nous tudierons en deuxime anne les principes de fonctionnement des systmes dexploitation. Notons simplement que tout systme dexploitation est divis en plusieurs couches. La couche basse est responsable de la gestion du matriel, et change par exemple suivant le type de priphrique install. Les couches plus hautes sont charges de fonctions plus volues (gestion des chiers sur disque par exemple), plus ou moins indpendantes du matriel.

On appelle programme dapplication, ou simplement application, un programme qui effectue des traitements directement utile pour lutilisateur de lordinateur (traitement de texte, base de donnes, etc.), par opposition aux programmes qui ne sont pas directement visibles par lutilisateur (comme le systme dexploitation ou les divers utilitaires grant lordinateur).
E. Viennet - GTR - v1.2d

64

Partie 5. Le systme dexploitation


Les systmes dexploitation les plus rpandus sont les suivants : Systme DOS Windows Window NT VMS UNIX Type de machine PC PC PC, qq stations Vax Tous Caractristiques simple, rpandu, peu puissant. interface graphique, trs rpandu, peu able. multi-tche. multi-tche, able, ancien. multi-tche, able, exible.

Dans ce cours, nous nous concentrerons sur les ordinateurs PC fonctionnant avec le systme DOS. Cest un systme trs peu puissant, qui noffre que le strict minimum de fonctionnalits. De ce fait, il est relativement simple.

5.2

Prsentation du BIOS

Le BIOS (Basic Input Output System, systme dentres/sorties de base) constitue la couche basse de tous les systmes dexploitations sur PC. Il est donc responsable de la gestion du matriel : clavier, cran, disques durs, liaisons sries et parallles. Le programme du BIOS se trouve en mmoire morte (ROM), cest dire dans une mmoire gardant son contenu lorsque lon interrompt son alimentation lectrique2 . Chaque modle de PC est vendu avec une version du BIOS adapt sa conguration matrielle.

5.2.1

Les fonctions du BIOS

Du point de vue de lutilisation, on peut considrer le BIOS comme une librairie de fonctions. Chaque fonction effectue une tche bien prcise, comme par exemple afcher un caractre donn sur lcran. Lappel de lune de ces fonctions constitue un appel systme. On pourrait envisager que les fonctions du BIOS soient simplement des procdures, que lon appellerait avec linstruction CALL en passant les paramtres ncessaires. Ce nest pas le cas, le mcanisme dappel est diffrent. En effet, il a t prvu de pouvoir modier le comportement du BIOS en cours dutilisation, par exemple pour grer un nouveau priphrique ou pour modier la gestion dun priphrique existant. Le code du BIOS tant en mmoire morte, il nest pas modiable. De plus, le BIOS tant diffrent dun ordinateur lautre, les adresses des fonctions changent... Prenons un exemple : soit la fonction du BIOS afchant un caractre (donn par son code ASCII) sur lcran. Supposons que sur notre PC, la premire instruction de cette fonction soit ladresse F1234560H. Sur le modle dune autre marque de notre voisin, cette mme fonction pourrait tre implante ladresse F1234550H.
En fait, le BIOS est souvent en mmoire EEPROM ou FLASH, an de pouvoir le remplacer plus facilement.
E. Viennet - GTR - v1.2d
2

5.2

Prsentation du BIOS

65

5.2.2 Vecteurs dinterruptions


Le problme est rsolu par lutilisation dune table dindirection, la table des vecteurs dinterruptions3 . Cette table est place en mmoire principale (RAM), et contient les adresses (en ROM ou en RAM) des fonctions du BIOS. Elle est implante partie de ladresse 00000000H (premire case mmoire) et est initialis par le BIOS lui mme au moment du dmarrage du PC (boot). Adresse 0000 0004 ... contenu adresse de la premire fonction du BIOS adresse de la deuxime fonction du BIOS ...

Chaque lment de la table occupe 4 octets (adresse 32 bits). La table a 256 lments (et occupe donc 1Ko). Dans lexemple voqu plus haut, si lon sait que la fonction du BIOS qui afche un caractre est la 33ime, on va lappeler en lisant la 33ime ligne de la table, puis en allant excuter les instructions ladresse trouve. Sur notre PC, la table contiendrait : Adresse contenu ... ... 0084H F1234560H (car 4x33 = 84H). ... ... La table des vecteurs dinterruptions contient des valeurs diffrentes pour chaque version de BIOS, et peut tre modie pour pointer sur du code en mmoire principale, modiant alors le BIOS existant.

5.2.3

Appel systme : instruction INT n

Linstruction INT n permet dappeler la n-ime fonction de la table des vecteurs dinterruptions. n est un entier compris entre 0 et 255 (1 octet), car il y a 256 vecteurs dinterruptions dans la table. Linstruction INT n est semblable linstruction CALL, sauf que ladresse de destination est donne par la table des vecteurs dinterruptions, et que les indicateurs sont automatiquement sauvegards sur la pile. De plus, ladresse de retour complte (32 bits) est empile, car le traitant dinterruption nest pas ncessairement dans le mme segment de code que le programme appelant. Le droulement de INT n se passe comme suit : 1. sauvegarde les indicateurs du registre dtat sur la pile (les indicateurs sont regroups dans un mot de 16 bits) ; 2. sauvegarde CS et IP sur la pile ; 3. CS et IP sont chargs avec la valeur lue ladresse 4n, n tant le paramtre de INT. Lexcution continue donc au dbut du traitant dinterruption.
On emploie abusivement le terme dinterruption car le mme mcanisme est utilis pour les interruptions matrielles que nous tudierons plus loin.
E. Viennet - GTR - v1.2d
3

66

Partie 5. Le systme dexploitation

5.2.4

Traitants dinterruptions

Un traitant dinterruption est une routine4 appele via la table des vecteurs dinterruption par linstruction INT n. Les traitants dinterruptions sont trs similaires des procdures ordinaires, sauf quils doivent se terminer par linstruction IRET au lieu de RET. linstruction IRET est trs similaire RET, sauf que CS et IP sont dpils, et que tous les indicateurs sont restaurs leur anciennes valeurs, sauvegardes sur la pile par INT n. Notons que les ventuels paramtres du traitant dinterruption sont toujours passs par registre.

5.2.5

Quelques fonctions du BIOS


INT 0 5 10H 12H 13H 14H 16H Fonction Division par 0 Copie dcran Ecran Taille mmoire Gestion disque dur Interface srie Clavier appel automatiquement lors de div. par 0 gestion des modes vido (initialiser, lire/crire secteurs) (lire caractre, tat du clavier)

5.3

Prsentation du DOS

Le systme DOS (Disk Operating System, systme dexploitation de disque) repose sur le BIOS, dont il appelle les fonctions pour interagir avec le matriel. Les fonctions du DOS sutilisent comme celles du BIOS, via des vecteurs dinterruptions. Elles offrent des fonctionnalits de plus haut niveau que le BIOS (entres/sorties, ouverture de chiers sur disque, etc.). Les fonctions du DOS sappellent toutes laide du vecteur 21H. La valeur du registre AH permet dindiquer quelle est la fonction que lon appelle : MOV AH, numero_fonction INT 21H Nous avons dja mentionn la fonction 4CH du DOS, qui permet de terminer un programme et de revenir linterprteur de commandes DOS : MOV AH, 4CH INT 21H

5.3.1
4

Description de quelques fonctions du DOS

Voici titre dexemple quelques fonctions du DOS :


les mots routines, fonctions et procdures sont synonymes dans ce cours.

E. Viennet - GTR - v1.2d

5.4

Modication dun vecteur dinterruption en langage C


Fonction Lecture caractre Afche caractre Afche chane de caractres Lit tat clavier 01H ; ; 11011111b ; AL ; 02H ; ;

67

Numro 01H 02H 09H 0BH MOV INT AND MOV MOV INT

met le code ascii lu dans AL code ascii dans registre DL DX=adresse dbut chane, termine par $ met AL=1 si caractre, 0 sinon.

Ce programme lit un caractre au clavier et lafche en majuscule : AH, 21H AL, DL, AH, 21H code fonction DOS attente et lecture dun caract\ere passe en majuscule code fonction affichage affiche le caractere

Dans la suite du cours, nous aurons loccasion de dcrire dautres fonctions du BIOS et du DOS.

5.4

Modication dun vecteur dinterruption en langage C

Nous allons maintenant voir comment lon peut modier la table des vecteurs dinterruptions. On modie un vecteur dinterruption pour installer un traitant dinterruption, fonction appele par linstruction INT n. Linstallation de traitants permet de modier le comportement du systme dexploitation, ou de communiquer avec des priphriques dentres sorties, comme nous ltudierons dans le chapitre suivant. En gnral, le systme a install un traitant pour chaque vecteur dinterruption. Linstallation dun nouveau traitant doit donc se faire avec prcautions : on va sauvegarder lancienne adresse, de faon pouvoir remettre le vecteur dans son tat initial la n de notre programme. Les vecteurs dinterruptions peuvent tre modis en assembleur ou en langage C. Nous travaillerons ici en langage C : le principe est le mme quen assembleur, mais les programmes sont plus intelligibles.

5.4.1 Ecriture dun traitant dinterruption en C


Nous avons vu que le compilateur gnrait pour chaque fonction C un prcdure en assembleur, termine par linstruction RET. Un traitant dinterruption est similaire une procdure, mais termine par IRET. En Turbo C sur PC, on peut signaler au compilateur quune fonction est un traitant dinterruption grce au mot cl interrupt. La dclaration void interrupt un_traitant(); indique que la fonction nomme un_traitant est un traitant dinterruption. Les traitants ne retournent pas de valeur et ne prennent pas darguments.
E. Viennet - GTR - v1.2d

68

Partie 5. Le systme dexploitation

5.4.2

Installation dun traitant

En Turbo C, on dispose de deux fonctions qui permettent de manipuler facilement la table des vecteurs dinterruption : setvect() et getvect()5 . setvect() modie un vecteur, et getvect() lis la valeur dun vecteur. La valeur dun vecteur dinterruption est ladresse de la fonction traitante. Une variable TRAITANT de ce type se dclare comme suit : void interrupt (*TRAITANT) (); (littralement : old_handler est un pointeur sur une fonction de type traitant dinterruption).

Exemple
#include <dos.h> void interrupt ( *ancien_traitant)(...); void interrupt un_traitant() { /* code C de notre traitant .... */ /* Appelle le traitant qui etait installe */ ancien_traitant(); } void main(void) { /* Sauve lancien vecteur 1BH */ ancien_traitant = getvect( 0x1B ); /* Installe nouveau traitant pour INT 1BH */ setvect( 0x1B, un_traitant ); /* ... programme ... */

/* Restaure ancien vecteur */ setvect( 0x1B, ancien_traitant ); }

Ces fonctions sont dclares dans DOS.H.

E. Viennet - GTR - v1.2d

Partie 6 Les interruptions


Nous tudions dans ce chapitre les interruptions matrielles (ou externes), cest dire dclenches par le matriel (hardware) extrieur u processeur. Nous nous appuyons ici aussi sur lexemple du PC.

6.1

Prsentation

Les interruptions permettent au matriel de communiquer avec le processeur. Les changes entre le processeur et lextrieur que nous avons tudis jusquici se faisait toujours linitiative du processeur : par exemple, le processeur demande lire ou crire une case mmoire. Dans certains cas, on dsire que le processeur ragisse rapidement un vnement extrieur : arriv dun paquet de donnes sur une connexion rseau, frappe dun caractre au clavier, modication de lheure1 . Les interruptions sont surtout utilises pour la gestion des priphriques de lordinateurs. Une interruption est signale au processeur par un signal lctrique sur une borne spciale. Lors de la rception de ce signal, le processeur traite linterruption ds la n de linstruction quil tait en train dexcuter2 . Le traitement de linterruption consiste soit : lignorer et passer normalement linstruction suivante : cest possible uniquement pour certaines interruptions, nommes interruptions masquables. Il est en effet parfois ncessaire de pouvoir ignorer les interruptions pendant un certain temps, pour effectuer des traitements trs urgents par exemple. Lorsque le traitement est termin, le processeur dmasque les interruptions et les prend alors en compte. excuter un traitant dinterruption (interrupt handler). Un traitant dinterruption est un programme qui est appel automatiquement lorsquune interruption survient. Ladresse de dbut du traitant est donne par la table des vecteurs dinterruptions, que nous avons dja rencontr dans le chapitre prcdent. Lorsque le traitant
Lheure change en permanence... nous verrons que le circuit dhorloge, extrieur au processeur, envoie un signal dinterruption intervalles rguliers (quelques ms). 2 Le processeur ne peut pas ragir plus vite ; imaginez les consquences dune instruction abandonne la moiti de son excution...
E. Viennet - GTR - v1.2d
1

70

Partie 6. Les interruptions


effectuer son travail, il excute linstruction spciale IRET qui permet de reprendre lexcution lendroit o elle avait t interrompue.

6.2
6.2.1

Interruption matrielle sur PC


Signaux dinterruption

Les processeurs de la famille 80x86 possdent trois bornes pour grer les interruptions : NMI, INTR, et INTA (voir gure 6.1).

MPU

INTA INTR

NMI

F IG . 6.1 Bornes dinterruptions.

NMI est utilise pour envoyer au processeur une interruption non masquable (NMI, Non Maskable Interrupt). Le processeur ne peut pas ignorer ce signal, et va excuter le traitant donn par le vecteur 02H. Ce signal est normalement utilis pour dtecter des erreurs matrielles (mmoire principale dfaillante par exemple). INTR (Interrupt Request), demande dinterruption masquable. Utilise pour indiquer au MPU larrive dune interruption. INTA (Interrupt Acknowledge) Cette borne est mise 0 lorsque le processeur traite effectivement linterruption signale par INTR (cest dire quelle nest plus masque)3 .

6.2.2

Indicateur IF

A un instant donn, les interruptions sont soit masques soit autorises, suivant ltat dun indicateur spcial du registre dtat, IF (Interrupt Flag). si IF = 1, le processeur accepte les demandes dinterruptions masquables, cest dire quil les traite immdiatement ; si IF = 0, le processeur ignore ces interruptions. Ltat de lindicateur IF peut tre modi laide de deux instructions, CLI (CLear IF, mettre IF 0), et STI (SeT IF, mettre IF 1).
3

On note INTA, pour indiquer que ltat normal de cette borne est 1 et non 0 (invers).

E. Viennet - GTR - v1.2d

6.2

Interruption matrielle sur PC

71

6.2.3 Contrleur dinterruptions


Lordinateur est reli a plusieurs priphriques, mais nous venons de voir quil ny avait quun seul signal de demande dinterruption, INTR. Le contrleur dinterruptions est un circuit spcial, extrieur au processeur, dont le rle est de distribuer et de mettre en attente les demandes dinterruptions provenant des diffrents priphriques.

MPU
INTA INTR

BUS DE DONNEES
INTA INT IRQ 0 IRQ i IRQ 7

Priphriques

PIC
NMI

F IG . 6.2 Le contrleur dinterruptions (PIC, pour Programmable Interruption Controler).


La gure 6.2 indique les connexions entre le MPU et le contrleur dinterruptions. Le contrleur est rli aux interfaces grant les priphriques par les bornes IRQ (InteRrupt reQuest). Il gre les demandes dinterruption envoyes par les priphriques, de faon les envoyer une par une au processeur (via INTR). Il est possible de programmer le contrleur pour affecter des priorits diffrentes chaque priphrique, mais nous naborderons pas ce point dans ce cours. Avant denvoyer linterruption suivante, le contrleur attend davoir reu le signal INTA, indiquant que le processeur a bien trait linterruption en cours.

6.2.4

Droulement dune interruption externe masquable

Reprenons les diffrents vnements lis la rception dune interruption masquable : 1. Un signal INT est mis par un priphrique (ou plutt par linterface grant celuici). 2. Le contrleur dinterruptions reoit ce signal sur une de ses bornes IRQi . Ds que cela est possible (suivant les autres interruptions en attente de traitement), le contrleur envoie un signal sur sa borne INT. 3. Le MPU prend en compte le signal sur sa borne INTR aprs avoir achev lexcution de linstruction en cours (ce qui peut prendre quelques cycles dhorloge). Si lindicateur IF=0, le signal est ignor, sinon, la demande dinterruption est accepte. 4. Si la demande est accepte, le MPU met sa sortie INTA au niveau 0 pendant 2 cycles dhorloge, pour indiquer au contrleur quil prend en compte sa demande. 5. En rponse, le contrleur dinterruption place le numro de linterruption associ la borne IRQi sur le bus de donnes.
E. Viennet - GTR - v1.2d

72

Partie 6. Les interruptions


6. Le processeur lit le numro de linterruption sur le bus de donnes et lutilise pour trouver le vecteur dinterruption. Ensuite, tout se passe comme pour un appel systme (interruption logicielle, voir page 65), cest dire que le processeur : (a) sauvegarde les indicateurs du registre dtat sur la pile ; (b) met lindicateur IF 0 (masque les interruptions suivantes) ; (c) sauvegarde CS et IP sur la pile ; (d) cherche dans la table des vecteurs dinterruptions ladresse du traitant dinterruption, quil charge dans CS:IP. 7. La procdure traitant linterruption se droule. Pendant ce temps, les interruptions sont masques (IF=0). Si le traitement est long, on peut dans certains cas r-autoriser les interruptions avec linstruction STI. 8. La procdure se termine par linstruction IRET, qui restaure CS, IP et les indicateurs partir de la pile, ce qui permet de reprendre le programme qui avait t interrompu.

6.3

Exemple : gestion de lheure sur PC

Lhorloge dun PC peut tre considr comme un priphrique dun type particulier. Il sagit dun circuit lectronique cadenc par un oscillateur quartz (comme une montre ordinaire), qui est utilis entre autre pour grer lheure et la date, que de nombreux programmes utilisent. Lhorloge envoie une interruption matrielle au processeur toutes 0,055 secondes (soit 18,2 fois par secondes). Le vecteur correspondant est le numero 08H. Pour grer lheure, le BIOS installe un traitant pour linterruption 08H. Ce traitant incrmente simplement un compteur, nombre entier cod sur 32 bits et toujours rang ladresse 0040:006C en mmoire principale. Ainsi, si un programme dsire connaitre lheure, il lui suft de lire cet emplacement mmoire, qui change automatiquement 18,2 fois par secondes. Une simple division permet alors de convertir ce nombre en heures et minutes. Remarques : 1. Les programmes usuels utilisent des appels systmes du DOS plus pratiques, qui se basent sur la valeur de la mmoire 0040:006C et effectuent les conversions ncessaires. En langage C, on pourra utiliser la fonction time() qui appelle elle mme le DOS. 2. En modiant le vecteur dinterruption 08H, on peut faire en sorte que le PC excute nimporte quelle tche de faon rgulire. En pratique, il est dconseill de modier directement le vecteur 08H. Le traitant dhorloge standard du systme BIOS appelle une autre interruption (logicielle), qui est prvue pour tre droute par les utilisateurs.
E. Viennet - GTR - v1.2d

6.4

Entres/Sorties par interruption

73

6.4

Entres/Sorties par interruption

En gnral, les priphriques qui recoivent des donnes de lextrieur mettent en uvre un mcanisme dinterruption : clavier, liaisons sries (modem, souris...) et parallles (imprimantes), interfaces rseau, contrleurs de disques durs et CD-ROMS, etc. Nous tudierons dans le chapitre suivant le cas de la liaison srie.

6.4.1 Un exemple
Etudions ici trs schmatiquement le cas dune lecture sur disque dur, an de comprendre comment lutilisation dune interruption permet de construire un systme dexploitation plus efcace. Soit un programme lisant des donnes sur un disque dur, les traitant et les afchant sur lcran. Voici lalgorithme gnral sans utiliser dinterruption : Rpter : 1. envoyer au contrleur de disque une demande de lecture dun bloc de donnes. 2. attendre tant que le disque ne rpond pas (scrutation) ; 3. traiter les donnes ; 4. afcher les rsultats. Cette mthode simple est appele entre/sortie par scrutation. Ltape 2 est une boucle de scrutation, de la forme : Rpter : regarder si le transfert du disque est termin ; Tant quil nest pas termin. La scrutation est simple mais inefcace : lordinateur passe la majorit de son temps attendre que les donnes soit transfres depuis le disque dur. Pendant ce temps, il rpte la boucle de scrutation. Ce temps pourrait tre mis prot pour raliser une autre tche. Trs grossirement, les entres/sorties par interruption fonctionnent sur le modle suivant : 1. Installer un traitant dinterruption disque qui traite les donnes reues et les afche ; 2. envoyer au contrleur de disque une demande de lecture des donnes ; 3. faire autre chose (un autre calcul ou afchage par exemple). Dans ce cas, ds que des donnes arrivent, le contrleur de disque envoie une interruption (via le contrleur dinterrruptions) au processeur, qui arrte temporairement le traitement 3 pour soccuper des donnes qui arrivent. Lorsque les donnes sont traites, le traitement 3 reprend (IRET). Pendant lopration (lente) de lecture du disque dur, le processeur peut faire autre chose (par exemple jouer aux checs !). Dans la pratique, les choses sont un peu plus compliques : il faut avoir plusieurs tches faire en mme temps pour que lutilisation des interruptions permettent un gain intressant. Ce principe est surtout mis prot dans les systmes multi-tches comme UNIX ou Windows NT, que nous tudierons en deuxime anne.
E. Viennet - GTR - v1.2d

74

Partie 6. Les interruptions

E. Viennet - GTR - v1.2d

Partie 7 Les entres/sorties


Les ordinateurs sont utiliss pour traiter et stocker des informations. Nous avons jusquici dcrit le fonctionnement du processeur et la mmoire principale. Nous allons maintenant tudier comment un ordinateur peut changer de linformation avec son environnement ; ces changes dinformations sont nomms entres/sorties (ou IO, Input/Output en anglais). Il peut sagir dun ux dinformations de lextrieur vers lordinateur (acquisition via le clavier, une connexion rseau, un disque dur, etc.), ou dun ux de lordinateur vers lextrieur (cran, rseau, disque, etc.). Les techniques dentres/sorties sont trs importantes pour les performances de lordinateur. Rien ne sert davoir un un processeur calculant trs rapidement sil doit souvent perdre son temps pour lire des donnes ou crire ses rsultats. Durant une opration dentre/sortie, de linformation est change entre la mmoire principale et un priphrique reli lordinateur. Nous tudierons plus loin dans ce cours le fonctionnement de certains priphriques (disques durs, clavier, cran). Cet change ncessite une interface ou contrleur, circuit lectronique grant la connexion. Linterface ralise des fonctions plus ou moins complexes suivant le type de priphrique. Son but est surtout de dcharger le processeur pour amliorer les performances du systme. A la n de cette partie, nous dcrivons pour illustrer les concepts prsents le circuit dinterface srie asynchrone 8250, qui quipe tous les PC.

7.1

Les bus du PC

Nous avons dans les chapitres prcdents dcrit de faon simplie les bus reliant le processeur la mmoire principale. Nous avons distingu le bus dadresse, le bus de donnes et le bus de commandes (signaux de commandes type R/W). En fait, la plupart des changes dinformations dans lordinateur se font sur des bus : connexions processeur/mmoire, mais aussi connexions entre le processeur et les interfaces dentres sorties. Il existe une grande varit de bus ; chacun est caractris par sa largeur (nombre de bits) et sa frquence (nombre de cycles par secondes, en Mga-Hertz).
E. Viennet - GTR - v1.2d

76

Partie 7. Les entres/sorties

7.1.1

Bus local

Le bus local est le bus le plus rapide, sur lequel sont directement connects le processeur et la mmoire principale. Il regroupe un bus de donnes un bus dadresse et de signaux de commandes (voir le chapitre 1). Le bus local est aussi reli aux contrleurs des bus dextensions, et parfois des contrleurs de mmoire cache (voir le chapitre 9).

7.1.2

Bus dextension du PC

Les bus dextensions (ou bus dentrs/sorties) permettent de connecter au PC des contrleurs dextensions (cartes) grce des connecteurs spciaux (slots sur la carte mre). Les contrleurs dextensions sont utiliss pour relier le PC aux priphriques dentres/sorties. Depuis lapparition du PC au dbut des anns 80, plusieurs standards de bus dextension ont ts proposs : ISA, MCA, EISA...

MPU

MP

BUS LOCAL

Controleur bus dextension (ISA)

CARTE GRAPHIQUE

CARTE SON

F IG . 7.1 Bus local et bus dextension type ISA.

Le bus ISA
Le bus dextension ISA (Industry Standard Architecture) est le plus rpandu sur PC. De frquence relativement basse et de caractristiques peu puissantes, il est utilis pour connecter des cartes relativement lentes (modems, cartes sons, ...). Les principales caractristiques du bus ISA (PC-AT) sont : 16 bits de donnes, 24 bits dadresse, 16 lignes dinterruption, frquence 8 MHz.
E. Viennet - GTR - v1.2d

7.1

Les bus du PC

77

7.1.3 Bus local PCI


Les priphriques dentres/sorties modernes demandent des transferts dinformation trs importants entre la mmoire principale (MP) et le contrleur. Par exemple, une carte graphique SVGA rcente possde une mmoire vido de 1 8 Mo, et met en uvre des transferts entre cette mmoire et la MP 60 Mo/s. Pour permettre de tels dbits, il est ncessaire de connecter le contrleur de priphrique directement sur le bus local. Le contrleur bncie ainsi du haut dbit de ce bus ; de plus, il peut en prendre le contrle pour effectuer des transferts directement avec la MP sans passer par le processeur. Le premier bus PC bas sur ces principes a t le bus VLB (VESA Local Bus), qui est actuellement remplac par le bus PCI (Peripheral Component Interface). Le bus PCI quipe la grande majorit des PC rcents. Notons quil nest pas rserv au processeurs INTEL, puisquil est aussi utilis sur les Macintosh base de processeurs PowerPC. Le principe du bus PCI est justement de dissocier le processeur et les bus. Cette sparation permet dutiliser une frquence de bus diffrente de celle du processeur et facilite lvolution des machines. Les caractristiques du bus PCI sont : 32 ou 64 bits de donnes, 32 bits dadresse, frquence de 33 MHz. Il permet de dbits de 132 Mo/s en 32 bits, ou 264 Mo/s en 64 bits.

MPU

MP

BUS LOCAL

CONTROLEUR BUS PCI

BUS LOCAL PCI

PONT PCI/ISA

CARTE VIDEO

CARTE SCSI

CARTE MODEM

CARTE SON

F IG . 7.2 PC avec bus PCI.


La gure 7.2 reprsente larchitecture dun PC avec bus PCI.
E. Viennet - GTR - v1.2d

78

Partie 7. Les entres/sorties

Le contrleur PCI est la plupart du temps intgr sur la carte mre (il sagit dun circuit intgr complexe dont les performances sont cruciales pour celles du PC). Les connecteurs (slot) PCI sont rservs aux priphriques demandants de hauts dbits : cartes vido, contrleurs SCSI, cartes rseaux haut dbit.

7.2

Bus de priphriques

Ces bus permettent de relier une interface (contrleur) de lordinateur un ou plusieurs priphriques (gnralement lextrieur de lordinateur).

7.2.1

Bus SCSI

Le bus SCSI (Small Computer System Interface) est un bus dentres/sorties parallles qui nest pas limit aux ordinateurs PC, ni mme aux micro-ordinateurs. Il permet de connecter de 1 7 priphriques de toutes natures (Disques durs, lecteurs CD/ROM, digitaliseurs (scanners), lecteurs de bandes (streamers), ... ). La version SCSI 1 permet un taux de transfert de 4 Mo/s (largeur 8 bits). La version SCSI 2 permet dobtenir jusqua 40 Mo/s en 32 bits. Le bus SCSI quipe en standard tous les ordinateurs Apple Macintosh, et la grande majorit des stations de travail. Sur PC, il faut installer une carte dinterface, connecte soit au bus ISA soit au bus PCI suivant les performances dsires.

7.2.2

Bus PCMCIA

Le bus PCMCIA (Personal Computer Memory Card International Association) est un bus dextension utilis sur les ordinateurs portables. Il permet la connexion de priphriques de taille trs rduite (format carte bancaire, 3 10 mm dpaisseur, connecteur 68 broches).

7.3
7.3.1

Les entres/sorties sur PC


Gnralits

Les donnes changes entre un priphrique et le processeur transitent par linterface (ou contrleur) associ ce priphrique. Linterface possde de la mmoire tampon pour stocker les donnes changes (suivant le type dinterface, cette mmoire tampon fait de 1 seul octet quelques mga-octets). Linterface stocke aussi des informations pour grer la communication avec le priphrique : des informations de commande, pour dnir le mode de fonctionnement de linterface : sens de transfert (entre ou sortie), mode de transfert des donnes (par scrutation ou interruption), etc. Ces informations de commandes sont communiques linterface lors de la phase dinitialisation de celle-ci, avant le dbut du transfert.
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

79

des informations dtat, qui mmorisent la manire dont le transfert sest effectu (erreur de transmission, rception dinformations, etc). Ces informations sont destines au processeur. On accde aux donnes de chaque interface par le bias dun espace dadresses dentres/sorties, auquel on accde par les instructions IN et OUT du 80x86. IN AL, adresse E/S lit loctet dadresse spcie dans lespace dentres/sorties et le transfre dans le registre AL. OUT adresse E/S, AL crit le contenu de AL ladresse spcie de lespace dentres/sorties. Lors de lexcution des instructions IN et OUT, le processeur met 1 sa borne IO/M et prsente ladresse E/S sur le bus dadresse. Le signal IO/M indique aux circuits de dcodage dadresses quil ne sagit pas dune adresse en mmoire principale, mais de ladresse dune interface dentres/sorties.

7.3.2

Modes de transfert

Le transfert des donnes entre le processeur et linterface peut seffectuer de diffrentes manires. On distingue les transferts sans condition et les transferts avec condition au priphrique. Les transferts sans condition sont les plus simples ; ils concernent les priphriques trs simples (interrupteurs, voyants lumineux, ...) qui nont pas de registre dtat et sont toujours prts. Les transferts avec condition sont plus complexes : avant denvoyer ou de recevoir des informations, le processeur doit connaitre ltat du priphrique (par exemple, en rception sur une liaison rseau, on doit savoir si un octet est arriv avant de demander la lecture de cet octet). On distingue ici deux mthodes, les transferts par scrutation et les transferts par interruption, que nous avons dja tudi en section 6.4 (page 73).

7.4 Linterface dentres/sorties sries asynchrones


Linterface entres/sorties sries quippe tous les PC et permet lchange dinformations faible dbit avec un priphrique comme un modem, ou avec un autre PC, sur des distances infrieures quelques dizaines de mtres.

7.4.1

Pourquoi une transmission srie ?

Sur des distances suprieures quelques mtres, il est difcile de mettre en uvre une transmission en parallle : cot du cablage, mais surtout interfrences lectromagntiques entre les ls provoquant des erreurs importantes. On utilise alors une liaison srie, avec un seul l portant linformation dans chaque sens. Sur des distance suprieures quelques dizaines de mtres, on utilisera des modems aux extrmits de la liaison et on passera par un support de transmission public (rseau tlphonique ou lignes spcialises) (voir gure 7.3).
E. Viennet - GTR - v1.2d

80

Partie 7. Les entres/sorties

transmission parallele

PC

INTERFACE PARALLELE

INTERFACE PARALLELE

PC

distance < 2 m

transmission srie

PC

INTERFACE SERIE

INTERFACE SERIE

PC

distance < qq 10 m

PC

INTERFACE SERIE

MODEM

MODEM

jonction liaison srie normalise

jonction distance quelconque (tlphone)

INTERFACE SERIE

PC

F IG . 7.3 Diffrents types de transmissions pour relier simplement deux PC.

7.4.2

Principe de la transmission srie asynchrone

En labscence de transmission, le niveau de la liaison est 1 (niveau de repos). Les bits sont transmis les un aprs les autres, en commenant par le bit de poids faible b0 . Le premier bit est prcd dun bit start (niveau 0). Aprs le dernier bit, on peut transmetre un bit de parit (voir cours de rseaux), puis un ou deux bits stop (niveau 1). Chaque bit a une dure de , qui xe le dbit transmission. Le nombre de changements de niveaux par seconde est appel rapidit de modulation (RM), et sexprime en Bauds (du nom de Baudot, linventeur du code TELEX). On a RM = et aussi 1

1 bits/s Le rcepteur dtecte larrive dun octet par le changement de niveau correspondant au bit start. Il chantillonne ensuite chaque intervalle de temps au rythme de son horloge. Comme les dbits binaires de transmission srie de ce type sont faibles (< 19600 bits/s) et que les horloges de lmetteur et du rcepteurs sont sufsament stables (horloges quartz), il nest pas ncessaire de les synchroniser. Cest la raison pour laquelle ce type de transmission srie est quali dasynchrone. Lorsque les dbits sont plus importants, la drive des horloges entrainerait des erreurs, et on doit mettre en uvre une transmission synchrone (voir cours de rseaux). dbit binaire =
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

81

Niveau logique de la liaison

S T A R T

b0

b1

b2

b3

b4

b5

b6

b7

P A R I T E

S T O P

temps

Dbut transmission

Fin transmission

dure de transmission de loctet

F IG . 7.4 Transmission dun octet b7 b6 b5 b4 b3 b2 b1 b0 en srie.

7.4.3 Linterface dE/S sries 8250


Le composant lectronique charg de la gestion des transmissions sries asynchrones dans les PC est appel UART (Universal Asynchronous Receiver Transmitter). Nous dcrivons dans ce cours le circuit Intel 8250.

Bornes de linterface
HORLOGE

BUS DE DONNEES

D0 ... D7 A0 A1 A2 CS INTRPT

UART 8250

BUS DADRESSES

SOUT SIN DSR DTR RTS CTS CD RI

EMISSION (Serial OUTput) RECEPTION (Serial INput) Data Set Ready (Modem pret a communiquer) Data Terminal Ready (MPU pret a communiquer) Request To Send (Demande demission) Clear To Send (Modem pret a emettre) Carrier Detected (le modem recoit) Ring Indicator (appel dtect)

Controleur dinterruptions

F IG . 7.5 Bornes du circuit UART 8250.


Les bornes de linterface UART 8250 sont prsentes sur la gure 7.5. Seules les bornes essentielles la comprhension du fonctionnement de linterface sont reprsentes.

Les registres du 8250


Linterface 8250 possde un certain nombre de registres de 8 bits permettant de grer la communication. Ces registres sont lus et modis par le processeur par le biais des instructions IN et OUT vues plus haut.
E. Viennet - GTR - v1.2d

82

Partie 7. Les entres/sorties

Ladresse de chaque registre est donne par ladresse de base de linterface (xe une fois pour toute) laquelle on ajoute une adresse sur 3 bits A2 A1 A0 . Une complication supplmentaire est introduite par le fait quil y a plus de 8 registres diffrents et que lon ne dispose que de 3 bits dadresse. La solution est dutiliser un bit dun registre spcial, DLAB. Suivant ltat du bit DLAB, on va slectionner tel ou tel jeux de registres. La table suivante donne ladresse et le nom de chaque registre du 8250 : Adresse A2 A1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 REGISTRES A0 0 0 0 1 1 0 1 0 1 0 1 RBR : Receiver Buffer (registre de rception) THR : Transmitter Holding Register (registre dmission) DLL : Divisor Latch LSB (poids faible diviseur horloge) DLM : Divisor Latch MSB (poids fort diviseur horloge) IER : Interrupt Enable Register IIR : Interrupt Identication Register LCR : Line Control Register MCR : Modem Control Register LSR : Line Status Register MSR : Modem Status Register non utilis

DLAB 0 0 1 1 0 x x x x x x

Exemple : si ladresse de base de linterface est par exemple 3F8H, ladresse du registre RBR sera simplement 3F8H + 000 = 3F8H et celle de IIR 3F8H + 010b = 3F8H + 2H = 3FAH. On voit, comme nous lavons dit plus haut, que les registres DLM et IER (par exemple) possdent la mme adresse (001b). Si le bit DLAB est 0, cette adresse permet daccder DLM, et si DLAB=1 IER. Le bit DLAB est le bit de poids fort du registre LCR. Notons aussi que THR et RBR ont la mme adresse, ce qui nest pas gnant car on accde toujours en criture THR et en lecture RBR. Voyons maintenant comment utiliser ces diffrents registres pour programmer linterface de transmission srie.

Choix de la rapidit de modulation


Lhorloge de rfrence du 8250 est un signal 1,8432 MHz stabilis par un quartz. Une premire division de cette frquence par 16 est effectue dans linterface. La frquence obtenue est ensuite divise par un diviseur cod sur 16 bits et contenu dans la paire de registres DLM (poids fort), DLL (poids faible). On modie donc le dbit de transmission en changeant les valeurs de DLM et DLL.
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

83

Le tableau suivant donne rantes : Modulation (bauds) 50 75 110 300 600

les valeurs utiliser pour les rapidits de modulation couDiviseur (hexa) 0900H 0600H 0417H 0180H 00C0H Modulation (bauds) 1200 2400 4800 7200 9600 Diviseur (hexa) 0060H 0030H 0018H 0010H 000CH

Registre THR
Cest le registre dmission. Il est charg par le MPU en excutant linstruction OUT THR, AL (o THR est une constant initialise avec ladresse du registre THR). Le contenu de THR est automatiquement copi par linterface dans le registre dcalage dmission, qui permettra la sortie en srie des bits sur la sortie SOUT.

Registre RBR
Cest le registre de rception. Les bits qui arrivent en srie sur la borne SIN du circuit entrent dans un registre dcalage. Lorsque ce dernier est complet, il est transfr dans RBR. Le MPU peut lire le contenu de RBR avec linstruction IN AL, RBR Notons que si un deuxime octet arrive avant que RBR nait t lu par le MPU, il remplace RBR : on perd le premier arriv, cest lerreur dcrasement1 .

Registre LCR (Line Control Register)


Ce registre de commande permet de dnir certains paramtres de la transmission, en fonction de sa conguration binaire. Bits 0 et 1 : spcient le nombre de bits de la donne transmettre (caractres de 5, 6, 7 ou 8 bits) : Bit 1 Bit 0 Nb de bits/caractre 0 0 5 bits 0 1 6 bits 1 0 7 bits 1 1 8 bits Bit 2 : spcie le nombre de bits STOP (0 1 stop, 1 2 stops ). Bit 3 : spcie la prsence (si 1) ou labsence (si 0) dun bit de contrle derreur (type bit de parit).
Le mme type derreur peut se produire en mission si le processeur crit THR avant que le caractre prcdent ait t transfr.
E. Viennet - GTR - v1.2d
1

84

Partie 7. Les entres/sorties

Bit 4 : sil y a un bit de contrle derreur, le bit 4 spcie sil sagit dun bit de parit paire (si 1) ou impaire (si 0). Bit 5 : normalement 0. Bit 6 : normalement 0. Bit 7 : bit DLAB, permettant laccs aux registres DLL et DLM dans la phase dinitialisation de linterface.

Registre IER
Ce registre est utilis pour les entres/sorties par interruption. Bit 0 : interruption lorsque donne reue dans RBR ; Bit 1 : interruption lorsque registre THR vide ; Bit 2 : interruption lorsque lun des 4 bits de poids faible de LSR passe 1 ; Bit 3 : interruption sur tat du modem.

Registre LSR
Ce registre dtat rend compte du fonctionnement de la liaison en rception (bits 0 4) et en mission (bits 5 et 6). Bit 0 : passe 1 lorsquune donne a t reue et charge dans RBR. Bit 1 : signale erreur dcrasement. 1 si donne reue et charge dans RBR alors que la prcdente navait pas t lue. Remis automatiquement 0 par la lecture du registre LSR. Bit 2 : passe 1 la suite dune erreur de parit. Remis 0 par la lecture de LSR. Bit 3 : passe 1 lorsque le niveau du bit STOP nest pas valide (erreur de format). Remis 0 par la lecture de LSR. Bit 4 : passe 1 lorsque le niveau de la liaison est rest 0 pendant la dure dmission de la donne (problme de lemetteur). Remis 0 par la lecture de LSR. Bit 5 : passe 1 lorsquune donne est transfre de THR vers le registre dcalage dmission (THR est alors libre pour le caractre suivant). Bit 6 : passe 1 lorsque le registre dcalage dmission est vide.

Registre IIR
IIR est utilis pour les E/S par interruption. Son contenu permet didentier la cause de linterruption mise par linterface 8250.

Registre MCR
MCR est le registre de commande du modem. Bit 0 : commande le niveau de la borne DTR qui informe le modem que le MPU est prt communiquer ; Bit 1 : commande la borne RTS qui demande au modem dmettre.
E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

85

Registre MSR
MSR est le registre dtat du fonctionnement du modem.

7.4.4 Programmation de linterface en langage C


Nous avons vu que les deux instructions assembleur permettant au processeur de communiquer avec les interfaces dentres/sorties taient IN et OUT. Il est possible daccder simplement ces instructions en langage C, grce aux fonctions inportb( adr ) et outportb( adr ). unsigned char inportb( int address ) lit un octet ladresse (de lespace dentres/sorties) indique et le retourne. void outportb( int address, unsigned char *data ) crit loctet (argument data) ladresse (E/S) indique. Voici un exemple de conguration de linterface 8250 en langage C. On congure ici linterface pour un dbit de 300 bauds, en mode scrutation, parit paire, 1 bit stop, 8 bits de donnes : #include <dos.h> /* Quelques constantes pour ameliorer la lisibilite: */ #define PORT (0x3F8) /* adresse de linterface */ #define RBR PORT #define THR PORT #define LSR (PORT+5) #define IIR (PORT+2) #define LCR (PORT+3) /* DLAB ... */ #define DLL PORT /* DLAB = 1 */ #define DLM (PORT+1) /* DLAB = 1 */ #define IER (PORT+1) #define MCR (PORT+4) #define MSR (PORT+6) /* Initialise linterface 8250 */ void init_8250(void) { /* 1- Rapidite de modulation */ outportb( LCR, 0x80 ); /* DLAB = 1 */ outportb( DLM, 0x01 ); outportb( DLL, 0x80 ); /* 300 bauds */ /* 2- Format des donnees * DLAB = 0, parite paire, 1 stop, 8 bits * LCR = 00011011 = 1BH */ outportb( LCR, 0x1B );
E. Viennet - GTR - v1.2d

86

Partie 7. Les entres/sorties

/* 3- Mode de transfert: scrutation */ outportb( IER, 0 ); }

E. Viennet - GTR - v1.2d

7.4

Linterface dentres/sorties sries asynchrones

87

7.4.5 Normes RS-232 et V24


Ces normes spcient les caractristiques mcaniques (les connecteurs), fonctionnelles (nature des signaux) et lectriques (niveaux des signaux) dune liaison srie asynchrone avec un longueur maximale de 15m et une rapidit de modulation maximum de 20kbauds. LEIA (Electrical Industry Association) a t lorigine aux USA de la norme RS232, dont la dernire version est RS-232C. Le CCITT (Comit Consultatif International pour la Tlphonie et la Tlgraphie) a repris cette norme quil a baptis V24. Deux autres normes permettent des dbits plus levs et des distances plus importantes : RS-423 (666m, 300kbauds), et RS-422 (1333m, 10Mbauds). La norme V24 utilise le connecteur DB25, de forme trapzodale 25 broches, reprsent gure 7.6.

1 2 SOUT 3 SIN 4 RTS 5 CTS 6 DSR 7 14 15 16 17 18 19

DTR 20
8 CD 9 10 11 24 12 25 13 21

RI 22
23

F IG . 7.6 Connecteur DB25, avec les bornes correspondantes du circuit UART 8250.
Les niveaux lectriques des bornes 2 et 3 (signaux dinformation) sont compris entre +3V et +25V pour le niveau logique 0, et -3V et -25V pour le niveau logique 1 (niveau de repos).

Cable NULL-MODEM
On peut connecter deux PC par leur interface srie. Si la distance est courte (< quelques dizaines de mtres), il nest pas ncessaire dutiliser un modem. On utilise alors un cable Null-Modem, qui croise certains signaux comme le montre la gure 7.7. Lorsque les signaux de dialogues ne sont pas ncessaires, il suft de croiser les signaux SIN et SOUT, ce qui donne le cable Null Modem simpli (3 ls) reprsent sur la gure 7.8.

E. Viennet - GTR - v1.2d

88

Partie 7. Les entres/sorties

masse SOUT SIN RTS CTS DSR CD DTR

7 2 3 4 5 6 8 20

7 2 3 4 5 6 8 20

masse SOUT SIN RTS CTS DSR CD DTR

F IG . 7.7 Cable Null Modem complet.

masse SOUT SIN RTS CTS DSR CD DTR

7 2 3 4 5 6 8 20

7 2 3 4 5 6 8 20

masse SOUT SIN RTS CTS DSR CD DTR

F IG . 7.8 Cable Null Modem complet.

E. Viennet - GTR - v1.2d

Partie 8 Les priphriques


Nous tudions dans cette partie les priphriques dentres/sorties les plus couramment utiliss : clavier, cran et gestion des modes graphiques, disques durs et autres mmoires secondaires. Pour chaque type de priphrique, nous dcrivons le principe de fonctionnement et mentionnons les performances des modles actuellement en vente. Si les principes fondamentaux de fonctionnement restent les mmes, il faut noter que les performances (vitesse, capacit) de la plupart des priphriques informatiques voluent trs rapidement ; les chiffres donns ici sont donc prendre comme des ordres de grandeur typiques du matriel utilis la n des annes 90.

8.1

Terminaux interactifs

Les micro-ordinateurs possdent tous, sauf exception, un clavier et un cran uniques. Ce nest pas le cas des ordinateurs plus gros, qui sont habituellement relis plusieurs terminaux (quelques dizaines ou centaines). Un terminal interactif est un priphrique permettant un usager (humain) de communiquer avec un ordinateur. La communication se fait par lintermdiaire dun cran (ou moniteur), dun clavier et ventuellement dune souris. Le terme interactif indique que lchange utilisateur/ordinateur lieu en temps rel, de faon interactive (lordinateur rpond immdiatement aux commandes de lutilisateur). Dans le pass, on utilisait aussi des terminaux non interactif, par exemple base de cartes perfores, et lon devait attendre plusieurs minutes (ou heures) avant de prendre connaissance des rsultats dune commande par le bias dune imprimante.

8.1.1 Claviers
Le clavier est le priphrique le plus commode pour saisir du texte. La gure 8.1 reprsente le principe de fonctionnement dun clavier. Chaque touche est un interrupteur, normalement en position ouverte. Lorsque quune touche est appuye, un signal lectrique est envoye vers le codeur, circuit lectronique trs simple qui associe chaque signal un code (par exemple le code ASCII de la touche). Le code est associ chaque touche par le bias de connexions ouvertes ou fermes dans la matrice du codeur.
E. Viennet - GTR - v1.2d

90
0

Partie 8. Les priphriques

CODEUR
0 0 1 0

CLAVIER

Niveau 1 1 0 0 1

F IG . 8.1 Principe de fonctionnement dun clavier. La pression dun touche fait passer 1 le signal KeyDown, et le code ASCII correspondant est prsent sur le bus de sortie du codeur. Seules trois touches sont reprsentes.
Le codeur est reli un bus dentres/sorties. Il gnre aussi un signal KeyDown pour indiquer quune touche est appuye. Ce signal peut tre utilis pour envoyer une interruption au processeur an quil traite linformation. Les codeurs rellement utiliss assurent des fonction supplmentaires, comme la rptition automatique des touches appuyes longtemps, la gestion dune mmoire tampon de quelques dizaines de caractres, lallumage de voyants, le verrouillage des majuscules, etc.

8.1.2

Ecrans et afchage

Lcran de lordinateur, aussi appel moniteur, est le priphrique de sortie le plus rpandu. Suivant les cas, il est utilis pour afcher du texte ou des graphiques. Un cran est constitu dun tube cathodique1 , dont le principe est le mme que celui dun tube doscilloscope (voir gure 8.2). Le faisceau dlectron agit comme un pinceau, control par le signal vido mis par le contrleur dafchage de lordinateur. Chaque point de lcran ne reste allum quun
cest pourquoi les crans sont parfois nomms CRT, pour Cathodic Ray Tube, tube cathodique.
E. Viennet - GTR - v1.2d
1

CODE ASCII
KeyDown

8.1

Terminaux interactifs

91

Pixel allum

canon lectrons

Dflexion verticale

Dflexion Horizontale

ECRAN

TUBE
F IG . 8.2 Tube cathodique : un faisceau dlectrons acclrs est dchi verticalement puis horizontalement par des champs lectriques ; limpact de ces lectrons sur lcran, constitu dune ne couche de phosphore sur du verre, allume un petit point.
court instant ; le pinceau doit donc repeindre en permanence lcran, environ 50 fois par seconde. Ce processus, appel balayage, dmarre du coin en haut gauche de lcran, et descend ligne par ligne jusqu arriver en bas droite. Cest le contrleur dafchage (carte graphique) de lordinateur qui gnre le signal de balayage 2 . Le signal vido est donc dni par deux frquences importantes : la frquence de balayage horizontal, qui mesure combien de fois par seconde le faisceau revient en dbut de ligne, et la frquence de balayage vertical, qui indique combien de fois par seconde le faisceau revient en haut gauche de lcran. Les crans ont des caractristiques variables : taille : comme pour les tlvisions, on mesure la diagonale de lcran, dont la longueur est exprime en pouces3 . Les crans dentre de gamme mesurent 14 pouces ; les ordinateurs dits multimdia et les stations de travail utilisent des cran 17, et les graphistes des crans 21. nesse (ou pitch) : indique le nombre de points par unit de longueur de lcran, qui est donn par la nesse de la grille et la prcision des faisceaux dlectrons. Plus la nesse est grande, plus limage est prcise, et plus on pourra afcher de pixels. frquence maximale de balayage : plus lcran est rafraichi frquemment, plus
Remarque : il existe deux modes de balayage, dits entrelac et non-entrelac ; nous ne dcrivons que le mode non-entrelac. 3 un pouce (, inch) mesure 2,54 centimtres.
E. Viennet - GTR - v1.2d
2

92
1ere ligne

Partie 8. Les priphriques

F IG . 8.3 Balayage des points de lcran.


limage va apparaitre stable. Une frquence de rafraichissement de 50 Hz, utilis sur les crans bas de gamme, donne une image avec des battements presque imperceptibles, mais qui fatiguent les yeux de lutilisateur et sont trs gnant si lon visualise des images animes. Bien entendu, augmenter cette frquence suppose dutiliser une lectronique plus couteuse ; les crans haut de gamme arrivent une frquence de balayage verticale de 120 Hz.

8.1.3

Mode alphanumrique et mode graphique

Lafchage sur cran peut seffectuer en mode texte (alphanumrique), ou bien en mode graphique.

Afchage en mode texte


Le mode texte est le plus simple, tant dun point vue programmation que dun point de vue implmentation. Par contre, il donne des rsultats trs pauvres. Ce mode dafchage tait le seul en usage jusqu une poque rcente. En mode texte, on afche 24 lignes de 80 caractres. Chaque caractre est cod sur 8 bits, ce qui permet dafcher les caractres ASCII (7 bits), plus un certain nombre de caractres spciaux dont les codes ne sont pas normaliss (donc leffet va varier dun type dordinateur lautre). Ces caractres spciaux permettent dafcher des pseudographiques (barres horizontales, obliques, symboles divers).
1 2 3 4 5 6 7 8 9 10

F IG . 8.4 Afchage des caractres en mode texte.


Le contrleur graphique doit maintenir une mmoire de 24x80 octets, qui permet de gnrer le signal vido. Chaque caractre est afch sur un nombre xe de lignes (une
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires

93

dizaine), comme indiqu sur la gure 8.4. La mmoire vido est lue en squence par le contrleur pour gnrer le signal de chaque ligne. La gestion dattribus comme la couleur, linversion vido, le clignotement peut se faire en ajoutant des bits supplmentaires au codage des caractres en mmoire vido.

Afchage en mode graphique


Lafchage en mode graphique en apparu durant les annes 70 sur certaines stations de travail haut de gamme, mais ne sest gnralis quavec lapparition des ordinateurs Apple Macintosh en 1983, puis du systme Windows sur PC au dbut des annes 90. Le PC garde la trace de cette volution, puisque le DOS fonctionne en mode texte, ainsi que de nombreuses applications encore en usage en 1997 (par exemple Turbo C version 3). Dans ce mode, les logiciels dafchage ne manipulent plus des caractres mais des pixels. Chaque pixel correspondant un point sur lcran, et est caractris par sa couleur. Lafchage est dni par le nombre de lignes, le nombre de colonnes, et le nombre de couleurs diffrentes. Le nombre de lignes et colonnes varie de 640x480 (mode VGA sur PC) 1600x1200, voire davantage. Le nombre de couleurs est li au nombre de bits par pixels. En noir et blanc (2 couleurs), 1 bit par pixel suft. Pour afcher simultanment 65536 couleur, il faut 16 bits par pixel. Les modes les plus sophistiqus utilisent 32 bits par pixel, lintensit trois couleurs fondamentales (Rouge, Vert, Bleu) tant code chacune sur 8 bits, les 8 bits restant pouvant coder la transparence de la couleur. Le passage du codage dun pixel sur n bits au signal de couleur vido peut tre effectu de diffrentes manires. En 24 ou 32 bits/pixel, on travaille en couleur directe : chaque valeur code une couleur unique (spcie par les composantes RVB). Par contre, en 8 ou 16 bits, on utilise une table associant chaque valeur (entre 0 et 2n ) une couleur RVB. Cette table (nomme Look Up Table (LUT) ou palette) peut tre change en cours dutilisation ; chaque instant, on peut afcher 2n couleurs parmi 224 .

Mmoire vido La taille de la mmoire vido est ici beaucoup plus importante quen
mode texte : le mode 1600x1200 en 256 couleurs demande environ 1.8 Mo, contre moins de 2 Ko pour un afchage texte. De ce fait, le volume dinformation chang entre la mmoire principale et le contrleur graphique est trs important, et lon doit utiliser des bus dentres/sortie trs performants pour atteindre une vitesse dafchage satisfaisante (voir section 7.1.3).

8.2

Mmoires secondaires

Les mmoires secondaires (ou auciliaires) sont des priphriques permettant de stocker et de retrouver de linformation de manire durable : linformation est conserve mme en labsence dalimentation lectrique, contrairement ce qui se passe pour la mmoire principale (RAM). Les mmoires secondaires ont gnralement une capacit stockage plus importante que les mmoires principales.
E. Viennet - GTR - v1.2d

94

Partie 8. Les priphriques

Parmi les mmoires secondaires les plus courantes, citons les disquettes et les disques durs, bass sur un enregistrement magntique, les CD-ROM, utilisant une lecture optique, et divers types de bandes magntiques.

8.2.1

Lenregistrement magntique

Le principe de lenregistrement magntique est utilis pour les cassettes audio et vido, ainsi pour les disquettes et disques durs informatiques. Il consiste polariser un milieu magntique (couche doxyde de fer dpose sur la bande ou le disque) laide dun champ lectromagntique cr par une bobine.
Polarisation 0 0 Polarisation 1 Support magntique 1 0 0 1 1 0

F IG . 8.5 Chaque cellule magntique se comporte comme un aimant, et peut coder un bit.
Un matriau magntique (comme un aimant) possde la proprit intressante de conserver durablement sa polarisation (orientation des particules magntiques). La polarisation ne peut prendre que deux directions ; chaque aimant peut donc tre utilis pour stocker 1 bit dinformation. Lenregistrement consiste exploiter linformation rmanente (durable) cre par une tte de lecture/criture. Cette tte comporte une bobine qui cre un champ magntique dont lorientation dpend du sens de circulation du courant lectrique qui la parcourt. La surface du support (bande ou disque) est divise en petits emplacements qui vont se comporter individuellement comme des aimants (gure 8.5` Chaque emplacement code ). un bit. Pour lire linformation, on fait dler le support sous la tte de lecture, qui mesure lorientation du champ magntique (qui cre un courant induit dans une bobine), de laquelle on dduit linformation stocke sur chaque emplacement.

Densit denregistrement magntique


Le volume dinformation (nb de bits) que lon peut stocker sur une longueur donne de surface magntique dpend de la densit longitudinale denregistrement, que lon mesure en BPI (bits per inchs, bits par pouces). Cette densit est limite par le nombre maximum de renversements dorientation de la polarisation par unit de longueur, qui dpend du type de couche magntique, et par la taille de la tte de lecture. Les densits typiques sont de lordre de 10 000 BPI. la distance entre la tte de lecture/criture et le support est alors de lordre de 0,2 m, ce qui impose une trs grande propret de la surface (voir gure 8.6). Les disques durs, qui utilisent une densit denregistrement trs leve, sont scells an viter toute entre de poussire.
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires

95

CHEVEU Tete de lecture Fume Empreinte digitale Couche magntique Poussire

SUPPORT

F IG . 8.6 Les diverses particules de poussires sont trs gnantes pour lutilisation dun support magntique : sont ici reprsents la mme chelle la tte de lecture, une particule de fume, une trace dempreinte digitale, une poussire et un cheveu.

8.2.2 Les disques durs


Les premiers disques durs ont t dvelopps par IBM en 1957 et ont connu un grand succs jusqu maintenant. Ils permettent en effet de stocker de grands volumes dinformation tout en conservant un temps daccs assez faible, et un rapport prix/capacit avantageux. Les micro-ordinateurs sont tous quips de disques durs depuis la n des annes 80. La capacit dun disque dur typique de cot 4000 francs est pass de de 20 Mo en 1988 3 Go en 1996, soit une multiplication par 150 en dix ans !

Principe dun disque dur


Une unit de disque dur est en fait constitue de plusieurs disques, ou plateaux, empils et en rotation rapide autour du mme axe (gure 8.7). Chaque face dun plateau est lue ou crite par une tte de lecture. An de simplier le mcanisme, toutes les ttes se dplacent en mme temps, radialement (seule la distance tte-axe de rotation varie). Les disques sont structurs en pistes et en secteurs, comme indiqu sur la gure 8.8. Le nombre de pistes est x par la densit transversale (nombre de pistes par unit de longueur radiale). Cette densit dpend essentiellement de la prcision du positionnement de la tte sur le disque. Chaque piste ou secteur contient le mme nombre doctets (en fait, toutes les pistes nont pas la mme longueur, mais la densit est plus grande sur les pistes du centre, de faon obtenir le mme volume dinformation sur chaque piste). Lunit de lecture ou dcriture sur le disque est le secteur. Le systme complet est constitu dune ensemble de disques empils, comme reprsent sur la gure 8.7. Le contrleur du disque doit tre capable dcrire ou de lire
E. Viennet - GTR - v1.2d

96

Partie 8. Les priphriques

F IG . 8.7 Les plateaux dun disque dur et les ttes de lectures ( droite), qui se dplacent toutes en mme temps.
1 secteur

Le disque dur est divis en pistes (ici 7 pistes)

Chaque piste est divise en secteurs (ici 8 secteurs par piste)

F IG . 8.8 Division dun plateau de disque dur en pistes et en secteurs.


nimporte quel secteur. Pour reprer un secteur, il faut connaitre son plateau, le numro de sa piste, et le numro du secteur dans la piste. La plupart des systmes introduisent la notion de cylindre : un cylindre est form par lensemble des pistes de mme position sur tous les plateaux. Un secteur est alors repr par (gure 8.9) : numro de cylindre (donnant la distance tte-axe de rotation) ; numro de piste (en fait le numro de tte de lecture utiliser) ; numro du secteur (li langle).

Temps daccs
Le temps daccs pour lire ou crire un secteur du disque dur dpend de la vitesse de rotation du disque, de la vitesse de dplacement des ttes et de la dimension du disque. Chaque transfert (lecture ou criture dun secteur) demande les oprations suivantes : 1. si les ttes ne sont pas dj sur le bon cylindre, dplacement des ttes. On dnit le temps de positionnement minimum (passage dun cylindre au cylindre voisin), et le
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires
5 4
N cy um lin ro dr de e

97

5 3
45 6

4 3 2

tete de lecture

1 2

tete de lecture tete de lecture

7 1

1 0 Numro de piste
rotation

tete de lecture tete de lecture

Numeros de secteur VUE DE DESSUS

dplacement des tetes

VUE DE PROFIL

F IG . 8.9 Reprage dun secteur du disque dur.


temps de positionnement moyen (passage un cylindre quelconque, donc parcours en moyenne de la moiti du rayon). 2. attendre que le dbut du secteur vis arrive sous la tte de lecture : en moyenne, il faut que le disque tourne dun demi-tour. Ce temps est appel demi dlai rotationnel. 3. transfert des donnes, qui dure le temps ncessaire pour faire dler le secteur entier sous la tte de lecture. Le dbit dinformation maximal est dtermin par la vitesse de rotation du disque, la densit denregistrement longitudinale, et parfois limite par le dbit du bus dentres/sorties reliant le disque lordinateur. Les fabriquants de disques durs indiquent en gnral le temps daccs moyen et le taux de transfert maximum (dbit).

Cas des disquettes


Les lecteurs de disquettes fonctionnent sur les mmes principes que les disques durs, mais il ny a que deux faces, la vitesse de rotation est beaucoup plus faible et la densit dcriture moindre. Les disquettes actuelles ont une capacit de 1,4 Mo ; il est probable quelles soient remplaces dans les annes venir par des disques durs extractibles miniaturiss, pouvant stocker plusieurs centaines de Mo.

8.2.3

Lecteurs de CD-ROM

Les CD-ROM (Compact Disc Read Only Memory), se sont imposs ces dernires annes comme des mmoires secondaires en lecture seule. Leur capacit est de 650 Mo
E. Viennet - GTR - v1.2d

98

Partie 8. Les priphriques

(soit lquivalent de 450 disquettes). Le format de stockage est identique celui utilis pour les disques audio. Leur (relativement) grande capacit en fait le support idal pour livrer les logiciels de grande taille, mais aussi pour stocker des bases de donnes et programmes de toute nature (dition lectronique,...). La spcicit du CD-ROM est que lon ne peut pas y modier les informations, inscrites en usine. Un disque CD-ROM est constitu dune piste en spirale qui est lue par un faisceau laser de faible puissance. La piste est recouverte dune ne couche de mtal rchissant, sur laquelle sont percs des trous. La lecture seffectue en mesurant le reet du faisceau laser sur la piste, ce qui permet la dtection des trous, donc la reconnaissance des bits 0 ou 1. Le temps daccs et le dbit des lecteurs de CD-ROM sont essentiellement dtermins par la vitesse de rotation du disque, qui est elle mme limite par la difcult guider le laser sur la piste. ces informations sont souvent exprimes relativement un lecteur de premire gnration ; on parle ainsi de lecteur double-vitesse, quadruple-vitesse, voire x12 ou x24.

8.2.4

Autres supports optiques : WORM, magnto-optiques

Outre le CD-ROM, il existe plusieurs autres types de support optiques. Les disques WORM (Write Once, Read Many, crire une fois, lire plusieurs) utilisent un second laser plus puissant qui permet de former des trous sur la surface rchissante ; on peut ainsi crire de linformation une seule fois. Les disques WORM sont vendus vierges, sous lappellation CD-R (CD enregistrable). Les disques magnto-optiques sont bass sur une technologie diffrente. Les trous sont remplacs par des diffrences de magntisation dun milieu spcial, ayant la proprit de modier la polarit de la lumire suivant le sens de magntisation. On associe donc un champ magntique et un faisceau laser. Ces disques sont r-inscriptibles volont ; ils ont t prsents la n des annes 80 comme les successeurs des disques durs, mais leur faible vitesse daccs en limite actuellement lusage aux applications darchivage ou de sauvegarde.

8.2.5 Bandes magntiques


Les bandes magntiques peuvent aussi tre utilises comme mmoire secondaires. La principale diffrence avec les disques est que laccs une bande est ncessairement squentiel : si un chier est enregistr la n dune bande, il faut la rembobiner entirement avant de dy accder. De ce fait, le temps daccs moyen un disque dur est de lordre de 10 ms, tandis que le temps daccs sur une bande est de quelques secondes (100 1000 fois plus lent). Les bandes sont cependant trs utilises car elle permettent un stockage trs faible cot de trs grandes quantit dinformation (exemple : une cassette de 8mm contient 7 Go et vaut environ 100 F).
E. Viennet - GTR - v1.2d

8.2

Mmoires secondaires

99

Il existe un trs grand nombre de standards diffrents pour les lecteurs de bandes, de cartouches ou de cassettes. La capacit dune bande est dtermine par sa longueur, son nombre de pistes, et la densit dcriture (voir plus haut, 8.2.1). Notons enn que certains lecteurs de bandes effectue une compression automatique des donnes avant criture, ce qui permet de gagner un facteur 2 environ sur des donnes non pralablement compresses.

E. Viennet - GTR - v1.2d

100

Partie 8. Les priphriques

E. Viennet - GTR - v1.2d

Partie 9 La mmoire
Nous revenons dans cette partie sur les diffrents types de mmoires utiliss dans les ordinateurs. Dans la partie prcdente, nous avons trait les mmoires secondaires ; nous nous intressons maintenant au fonctionnement des mmoires vives (ou volatiles), qui ne conservent leur contenu que lorsquelles sont sous tension. Ce type de mmoire est souvent dsign par lacronyme RAM, Random Access Memory, signiant que la mmoire adressable par opposition aux mmoires secondaires squentielles comme les bandes. Nous mentionnerons aussi diffrents types de mmoires mortes, qui sont des circuits accessibles uniquement en lecture (ROM, Read Only Memory).

9.1

Mmoire vive

La mmoire vive (RAM) est utilisable pour crire ou lire des informations. Elle constitue la plus grande partie de la mmoire principale dun ordinateur.

9.1.1 Technologie des mmoires vives


On peut raliser des mmoires RAM avec deux technologies diffrentes, les RAM dynamiques (DRAM), et les RAM statiques (SRAM).

Mmoires vives dynamiques (DRAM)


Ce type de mmoire est trs utilis car peu couteux. Les boitiers de mmoire dynamique enferment une pastille de silicium sur laquelle sont intgres un trs grand nombre de cellules binaires. Chaque cellule binaire est ralise partir dun transistor reli un petit condensateur. Ltat charg ou dcharg du condensateur permet de distinguer deux tats (bit 0 ou bit 1). Linconvnient de cette technique simple est que le condensateur se dcharge seul au cours du temps (courants de fuite). Il est donc ncessaire de rafraichir tous les condensateurs du boitier priodiquement, environ 1000 fois par seconde. Cette opration est effectue par un circuit de rafraichissement intgr dans le boitier : le circuit lit ltat de
E. Viennet - GTR - v1.2d

102

Partie 9. La mmoire

chaque cellule et le r-crit, ce qui recharge le condensateur. Notons que cette opration empche laccs une cellule mmoire durant quelques cycles dhorloge. Les mmoires DRAM sont utilises en informatique, mais leur usage se rpand aussi pour des objets grand public, comme la tlvision numrique. Les boitiers sont fabriqus en trs grandes sries dans des usines spcialises, qui demandent des investissement normes (une nouvelle chaine de fabrication cote de lordre dun milliard de dollars). Lorsque des usines de nouvelle gnration sont mises en service, les prix des mmoires baissent dans le monde entier. La demande de mmoires augmentant sans cesse, les prix remontent, avant la construction de nouvelles usines, etc. Les prix des mmoires subissent ainsi des cycles conomiques. On trouve des boitiers DRAM de 256k x 1 bit, 256k x 4bits, 1M x 1 bit, jusqu 16M x 4bits, et bientt davantage.

Mmoires vives statiques (SRAM)


Les mmoires statiques nutilisent pas de condensateurs : chaque cellule binaire est ralise laide de 4 transistors formant un bistable, circuit restant dun ltat 0 ou 1 tant quil est aliment lectriquement. Les SRAM permettent des temps daccs plus court que les DRAM, mais sont plus coteuses car leur construction demande 4 fois plus de transistors que les DRAM. Les SRAM sont utilises lorsque lon dsire maximiser les performances, par exemple pour construire des mmoires caches (voir plus loin, section 9.3). Notons aussi lexistence des boitiers SRAM CMOS, caractris par leur trs faible consommation en nergie : une petite pile lectrique suft les maintenir en activit plusieurs annes. Ces mmoires, de petite capacit, sont utilises par exemple dans certains agendas lectroniques pour le grand public.

9.1.2

Modules de mmoire SIMM

Les modules SIMM Single In-line Memory Module sont des groupes de boitiers de mmoires dynamiques monts sur un circuit imprim rectangulaire allonge, appel barette. Chaque barette SIMM offre un capacit importante (1 16 Mo), et senche sur des connecteurs prvus cette effet sur la carte mre de lordinateur. Les barettes SIMM, utilises au dpart sur les stations de travail et les Macintosh, quipent aujourdhui tous les PC.

9.2

Les Mmoires mortes

Les mmoires mortes ne sont normalement accessibles quen lecture. On distingue diffrents types de circuits de mmoires mortes : ROM : circuit intgr dont le contenu est dtermin une fois pour toute au moment de la fabrication. Le cot relativement lev de leur fabrication impose une fabrication en grandes sries, ce qui complique la mise jour de leur contenu. Au dpart, ces mmoires
E. Viennet - GTR - v1.2d

9.3

Mmoires caches

103

adresse

ROM

donne

F IG . 9.1 Mmoire ROM.


taient utilises pour stocker les parties bas-niveau du systme dexploitation de lordinateur (BIOS du PC par exemple). PROM (Programmable ROM) : Alors que la mmoire ROM est enregistre de manire irrversible lors de sa fabrication, la mmoire PROM est congure par lutilisateur en utilisant un programmateur de PROM, utilis pour enregistrer son contenu. Le circuit PROM ne peut plus tre modi par la suite. EPROM (Erasable PROM) : Les mmoires EPROM sont des PROM recongurables : il est possible de les effacer pour les reprogrammer. Leffaage se produit en exposant le boitier un fort rayonnement ultraviolet (UV). Pour cela, le boitier est perc dune fentre transparente permettant lexposition du circuit intgr. Lopration deffacement ncessite de retirer lEPROM de son support et entraine sont immobilisation pendant environ 30 minutes. EEPROM (Electricaly Erasable PROM) : Mme principe quune EPROM, mais leffacement se fait laide de signaux lectriques, ce qui est plus rapide et pratique. FLASH EPROM Les mmoires FLASH sont similaires aux mmoires EEPROM, mais leffacement peut se faire par slectivement par blocs et ne ncssite pas le dmontage du circuit. Le temps dcriture dun bloc de mmoire FLASH est beaucoup plus grand que celui dcriture dune mmoire RAM, mais du mme ordre que celui dun disque dur. Laccs en lecture une EEPROM est peu prs aussi rapide qua une DRAM. On utilise donc parfois des cartes de mmoire FLASH comme mmoire secondaires, par exemple pour les ordinateurs portables.

9.3
9.3.1

Mmoires caches
Hierarchie mmoire

Chacun des diffrents types de mmoires primaires et secondaires que nous avons dcrit est caractris par un temps daccs et une capacit caractristiques. Plus lon sloigne du processeur, plus la capacit et le temps daccs augmentent : Taille Temps daccs Registres du processeur 10 octets 108 s 6 octets Mmoire principale 10 107 s 9 octets Disque dur 10 102 s On constate que les processeur est nettement plus rapide que la mmoire principale. Dans les premires parties de ce cours, nous avons suppos que presque chaque instruction
E. Viennet - GTR - v1.2d

104

Partie 9. La mmoire

du processeur effectuait un accs, en lecture ou en criture la mmoire principale. Si ctait rellement le cas, le processeur passerait la majeure partie de son temps attendre les accs mmoire, et lon nutiliserait pas pleinement ses possibilits.

9.3.2

Principe gnral des mmoires caches

Lintroduction de mmoires caches peut pallier ce problme. Lide est dintercaler entre le processeur et la mmoire principale un circuit de mmoire statique, plus rapide que la mmoire dynamique constituant la mmoire principale mais de petite taille. Dans cette mmoire, on va essayer de garder les informations normalement en mmoire principale dont le processeur se sert le plus souvent un instant donn.

MPU MEMOIRE CACHE

MP

BUS LOCAL (adresses + donnes)

F IG . 9.2 Mmoire cache place sur le bus local.


Lors dun accs par le processeur un mot en mmoire, deux cas peuvent se rencontrer : 1. le mot est prsent dans le cache : le cache, plus rapide, envoie la donne demande sur le bus de donnes ; 2. le mot nest pas prsent dans le cache : laccs mmoire se droule normalement (le cache peut en proter pour copier la donne an den disposer pour la prochaine fois).

9.3.3

Mmoires associatives

Dans les mmoires ordinaires, on peut accder un mot par son adresse, et les adresses doivent tre contiges : un boitier donn va par exemple stocker tous les mots dont les adresses sont comprises entre 100000H et 200000H. Les mmoires caches doivent utiliser un principe diffrent, car les mots quelles vont stocker ont des adresses quelconques, qui ne se suivent pas forcment. Ce type de mmoire, appel mmoire associative, est constitu dun ensemble de paires (cl, valeur). La cl va ici tre ladresse du mot en mmoire.

Exemple : la mmoire associative suivante :


E. Viennet - GTR - v1.2d

9.3

Mmoires caches
cl 00AA0004 01068C0B 00ABF710 valeur 1 78 789

105

contient trois lments, dadresses respectives : 00AA0004, 01068C0B et 00ABF710. Les circuits de mmoire associative sont capables deffectuer la recherche dune cl en parallle, donc en un temps trs court (la cl demande est compare dun seul coup toutes les cls stockes). La taille des mmoires caches associative est habituellement de lordre de quelques centaines de Ko.

9.3.4 Efcacit dun cache : principe de localit


Lutilisation dune mmoire cache nest efcace que sil arrive frquement quun mot demand par le processeur se trouve dja dans le cache. Nous avons vu, sans entrer dans les dtails, quune donne entrait dans le cache lorsquelle tait lue en mmoire principale. Le premier accs une donne est donc lent, mais les accs suivants la mme adresse vont tre plus rapides. On conoit aisment que plus le programme que lon excute fait des accs mmoires varis, moins le cache sera efcace. Rappelons que le processeur effectue deux types daccs mmoires : lecture des instructions, et lecture (ou criture) des donnes. Les accs aux instructions sont toujours diffrents (on passe chaque fois ladresse de linstruction suivante), sauf lorsque le programme effectue des rptitions (boucles), ce qui se produit en fait trs frquemment (les long calculs sont souvent effectu par rptition dune suite dinstructions assez courte). Les accs aux variables se rptent eux aussi frquemment (les variables locales dune fonction par exemple sont souvent accdes chacune un grand nombre de fois). On appelle localit dun programme sa tendance effectuer des accs mmoires rpts ; cette tendance augmente le gain de vitesse apport par le cache.

9.3.5 Autres aspects


La gestion des caches est trs importante pour les performances des ordinateurs modernes. Nous navons fait quefeurer ce vaste sujet, en particulier nous navons pas expliqu comment mettre le cache jour. Les processeurs rcents possdent des caches intgrs, et utilisent souvent deux caches diffrents, lun pour les donnes, lautre pour les instructions. A lextrieur du processeur, on trouve un autre cache, dit de niveau 2, ou externe. Notons enn que la mme problmatique se retrouve pour la gestion des accs aux mmoires secondaires : la diffrence de vitesse entre les mmoires vives et les disques durs rend lutilisation dun cache encore plus avantageuse (malheureusement, les accs aux mmoires secondaires se rptent moins que ceux la mmoire principale).

E. Viennet - GTR - v1.2d

106

Partie 9. La mmoire

E. Viennet - GTR - v1.2d

Partie 10 Architectures actuelles dig on r N


Dans cette dernire partie, nous passons brivement en revue les diffrents types darchitectures employs dans les ordinateurs actuels.

10.0.1

Microprocesseurs

Architectures RISC et CISC Famille de processeurs Intel


Du 8086 au Pentium II... Processeurs compatibles Intel : AMD, Cyrix, ...

Famille Motorola 68k


Du 68000 au 68040... Diffrences principales avec la famille 80x86.

PowerPC et autres RISCs


PowerPC, Sparc, Alpha, MIPS, ... Bref tour des constructeurs et des performances.

10.0.2

Micro-ordinateurs

Etat du marche de la micro (PC, Macintosh, NC).

10.0.3

Stations de travail

Dnition, quelques exemples.


E. Viennet - GTR - v1.2d

108

Partie 10. Architectures actuelles

10.0.4

Superordinateurs

Dnition, quelques exemples.

E. Viennet - GTR - v1.2d

You might also like