Professional Documents
Culture Documents
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
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
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 .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
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 . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
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
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
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
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
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
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
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
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
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
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
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) ); }
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
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 [ \ ] ^ _
1.3
17
1.3
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.
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
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
Unit de commande
donnes binaires
Donnes
Unit dentres/sorties
CLAVIER
ECRAN
1.3.2
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
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
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
20 Unit de transfert
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.
1.3
21
ACC
RTUAL
RI
UAL
Reg. dtat
RTA
Dcodeur
IP
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
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.
1.3
23
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.
24
2.1
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.
26
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) ;
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
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
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
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.
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
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
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
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.
32
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
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
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
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
35
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.
36
CF
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
2.4
37
38
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
40
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
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
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
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.
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
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
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
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
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
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.
46
data truc data SEGMENT DW 1996 ENDS ... MOV ...
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
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
; 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.4
La 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
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
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
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
; mot clef stack car pile ; reserve espace ; etiquette base de la pile
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
Noter que le registre SS sinitialise de faon similaire au registre DS ; par contre, on peut accder directement au registre SP.
50
3.5
Procdures
51
3.5
Procdures
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.
52
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
3.5.3
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.
SOMME
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
SP SP+2 SP+4
IP Truc 6
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.
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.
56
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.
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
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
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
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.
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
; ; ;
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
sp,bp bp
4.2
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
_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
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 .
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
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
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
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
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
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
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
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
5.4
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
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.
68
5.4.2
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 ... */
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
6.2
6.2.1
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
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).
6.2
71
MPU
INTA INTR
BUS DE DONNEES
INTA INT IRQ 0 IRQ i IRQ 7
Priphriques
PIC
NMI
6.2.4
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
6.3
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
73
6.4
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
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
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
CARTE GRAPHIQUE
CARTE SON
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
MPU
MP
BUS LOCAL
PONT PCI/ISA
CARTE VIDEO
CARTE SCSI
CARTE MODEM
CARTE SON
78
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 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
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.1
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
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
INTERFACE SERIE
PC
7.4.2
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
81
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
Bornes de linterface
HORLOGE
BUS DE DONNEES
D0 ... D7 A0 A1 A2 CS INTRPT
UART 8250
BUS DADRESSES
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
82
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.
7.4
83
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 .
84
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
85
Registre MSR
MSR est le registre dtat du fonctionnement du modem.
86
7.4
87
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.
88
7 2 3 4 5 6 8 20
7 2 3 4 5 6 8 20
7 2 3 4 5 6 8 20
7 2 3 4 5 6 8 20
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
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
8.1.3
Lafchage sur cran peut seffectuer en mode texte (alphanumrique), ou bien en mode graphique.
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.
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
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.
8.2
Mmoires secondaires
95
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.
96
F IG . 8.7 Les plateaux dun disque dur et les ttes de lectures ( droite), qui se dplacent toutes en mme temps.
1 secteur
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
7 1
1 0 Numro de piste
rotation
VUE DE PROFIL
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
(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
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
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.
100
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.
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.
9.1.2
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 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
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
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.
MP
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.
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.
106
Partie 9. La mmoire
10.0.1
Microprocesseurs
10.0.2
Micro-ordinateurs
10.0.3
Stations de travail
108
10.0.4
Superordinateurs