Vous êtes sur la page 1sur 139

Circuits et architecture des ordinateurs

Anne 2008/2009

Universit Paris Diderot Olivier Carton

Version du 17 Jun 2009

1 Circuits et architecture des ordinateurs en M1


Cours le lundi en salle 470E (halle aux farines) de 8h30 10h30 Bibliographie Travaux dirigs (tkgate version 1.8.7) mardi en salle 470E ou T de 10h30 12h30 (I. Fagnot) mardi en salle 470E ou T de 12h30 14h30 (A. Micheli) Ce support de cours en PDF Processeur LC3 Rfrences Annes 2006/2007 et 2007/2008 Prsentation du cours Cours n 1 : historique et reprsentation des donnes galeries de photos entiers entiers signs Cours n 2 : reprsentation des donnes (suite), transistors, portes rels (norme IEEE 754) caractres (ASCII et Unicode) logique de Boole table de vrit tableaux de Karnaugh transistors portes logiques (inverseur, nand, nor) Cours n 3 : additionneurs circuits lmentaires additionneurs semi-additionneur additionneur complet additionneur par propagation de retenue (ripple-carry adder) calcul des indicateurs soustraction Cours n 4 : additionneurs (suite) additionneur par anticipation de retenue (carry-lookahead adder) additionneur rcursif additionneur hybride additionneur par slection de retenue Cours n 5 : mmoire mmoire statique/mmoire dynamique bascule RS bascule D mmoire 4 3 bits Cours n 6 : circuits squentiels et architecture gnrale dun micro-processeur principe des circuits squentiels construction dune guirlande cas dun automate fini

-1-

modle de von Neumann unit de contrle unit de traitement mmoire Cours n 7 : description du LC-3 registres organisation de la mmoire jeu dinstructions du processeur LC-3 chemins de donnes du LC-3 Cours n 8 : programmation en assembleur du LC-3 longueur dune chane mutiplication non signe, signe et logarithmique addition 32 bits Cours n 9 : appels de sous-programmes, pile appels de sous-programme pile sauvegarde des registres tours de Hano Cours n 10 : appels systmes et interruptions entres/sorties appels systmes interruptions Cours n 11 : autres architectures processeurs 80x86 comparaison CISC/RISC architecture IA-64 Cours n 12 : pipeline principe tages ralisation alas Cours n 13 : gestion de la mmoire mmoires associatives mmoire virtuelle mmoires cache Rvision le jeudi 4 juin de 13h 15h en salle 470E : correction de lexamen. Rvision le vendredi 5 juin de 15h30 17h30 en salle 248E : exercices Examen le 15 janvier de 15h30 18h30 en amphi 11E (halle aux farines) Rattrapage le 15 juin de 8h30 11h30 en amphi 12E (halle aux farines)

-2-

2 Historique
2.1 Historique gnral
Quelques dates cls 500 av JC apparition des bouliers et abaques 1632 invention de la rgle calcul 1642 Pascal invente la Pascaline 1833 machine de Babbage 1854 publication par Boole dun ouvrage sur la logique 1904 invention du tube vide 1937 article dAlan Turing sur la calculabilit : machines de Turing 1943 cration du ASCC Mark 1 (Harvard - IBM) : Automatic Sequence-Controlled Calculator 1946 construction de lENIAC 1947 invention du transistor (Bell) 1955 premier ordinateur Transistors : TRADIC (Bell) 1958 premier circuit intgr (Texas Instrument) 1964 langage de programmation BASIC 1965 G. Moore nonce la loi qui porte son nom : loi de Moore 1969 systme dexploitation MULTICS puis UNIX (Bell) 1971 premier microprocesseur : 4004 dIntel (4 bits, 108 KHz, 2300 transistors) 1972 microprocesseur 8008 dIntel (8 bits, 200 KHz, 3500 transistors) 1973 langage C pour le dveloppement dUNIX 1974 premier microprocesseur Motorola : 6800 (8 bits) 1974 microprocesseur 8080 dIntel

-3-

2.2 Historique des micro-processeurs 2.2.1 Rfrences


Histoire des micro-processeurs de 1971 1996 Collection de micro-processeurs Autre collection de micro-processeurs Histoire des premiers micro-processeurs Muse en franais de la micro-informatique

2.2.2 Principaux micro-processeurs


Intel 4004 1971, 4 bits, 108 KHz, 2300 transistors Intel 8008 1972, 8 bits, 200 KHz, 3500 transistors Intel 8080 1974, 8 bits, 6000 transitors Motorola 6800 (Photos avec boitier plastique et boitier cramique) 1974, 8 bits, 2Mhz, 7000 transistors MOS Technology 6502 1975, 1 MHz, 8 bits Zilog Z80 1976, 2Mhz, 8 bits Intel 8086 1978, 16 bits Motorola 6809 1978, 8 bits Intel 8088 1979, 16 bits Motorola 68000 1979, 16 bits, 68000 transistors Pentium 1993, CISC PowerPC 1993, RISC Sparc 1995, RISC

2.2.3 Gnalogie des micro-processeurs

-4-

-5-

Gnalogie des micro-processeurs

2.2.3.1 Sources
Intel 4004 iAPX 432 Intel i860 Intel i960 Itanium Core Core 2 Motorola 68000 F8 IMP-16 DEC (T-11) ARM PA-RISC (wikipedia) PA-RISC (openpa) RISC MIPS PowerPC DEC alpha SPARC National 320xx Comparatif de quelques architectures

-6-

3 Reprsentation des donnes


Dans un ordinateur, toute linformation est sous forme de bits qui sont regroups en octets. Il faut donc quil y ait un codage de cette information. Ce codage dpend bien sr du type des donnes. Cette partie dcrit les codages les plus utiliss pour les types de base, cest--dire les entiers, les nombres flottants et les caractres.

3.1 Entiers 3.1.1 Entiers positifs


Les entiers positifs sont toujours cods en base 2. Une suite b k-1 ,,b 0 de k bits reprsente lentier n donn par la formule suivante. n = i=0 k-1 b i 2 i . Avec k bits, on peut donc reprsenter tous les entiers de lintervalle 0 2 k -1. Le nombre de bits utiliss pour coder les entiers dpend de la machine. Cest encore trs souvent 32 bits mais lapparition des micro-processeurs 64 bits rend le codage 64 bits de plus en plus frquent.

3.1.2 Big endian/Little endian


Cette caractristique dcrit dans quelle ordre sont placs les octets qui reprsentent un entier. Dans le mode big endian les octets de poids fort sont placs en tte et occupent donc des emplacements mmoire avec des adresses plus petites. Dans le mode little endian, les octets de poids faibles sont au contraire placs en tte. Dans le cas dentiers de 32 bits, il existe encore des modes mixtes. Cette terminologie provient du livre Les voyages de Gulliver de J. Swift.

Big et little endian Le mode big endian acclre les oprations qui ncessitent de regarder en premier les bits de poids forts comme la recherche du signe, la comparaison de deux entiers et la division. Au contraire le mode little endian favorise les oprations qui commencent par les bits de poids faible comme laddition et la multiplication.

-7-

Big endian

Mixed endian

Little endian

Motorola 68xx, 680x0 IBM Motorola PowerPC Intel Hewlett-Packard Silicon Graphics MIPS DEC VAX SPARC

3.1.3 Codage BCD (Binary Coded Decimal)


Il sagit dune reprsentation surtout utilise dans les premiers temps de linformatique. La reprsentation BCD dun entier n est obtenue de la manire suivante. Lentier n est crit en dcimal puis chaque chiffre dcimal entre 0 et 9 est ensuite cod sur 4 bits. Il faut donc (k+1)/2 octets pour coder un nombre ayant k chiffres dcimaux. Le seul intrt de cette reprsentation est de faciliter laffichage en base 10 de lentier. Certains processeurs possdaient quelques instructions spcifiques pour traiter, en particulier pour laddition, les entiers cods en BCD.

3.1.4 Entiers signs


Il existe plusieurs faons de coder les entiers signs. La reprsentation avec un bit de signe est la plus simple mais elle a trop dinconvnients pour tre utilise en pratique. La reprsentation biaise est uniquement utilise pour le codage des exposants des flottants. La reprsentation en complment 2 est utilise par tous les ordinateurs car elle facilite de nombreuses oprations.

3.1.4.1 Reprsentation avec un bit de signe


Dans cette reprsentation, le bit de poids fort indique le signe du nombre avec la convention 0 pour positif et 1 pour ngatif. Les bits restants sont utiliss pour coder la valeur absolue du nombre comme un nombre positif. Cette reprsentation semble la plus naturelle mais elle nest pas utilise en pratique car elle souffre de nombreux dfauts dont le principal est de compliquer les additions et soustractions. En effet, pour additionner deux nombres cods de cette faon, il est ncessaire de faire une addition ou une soustraction suivant que ces deux nombres sont du mme signe ou de signes diffrents. Avec k bits, cette reprsentation permet de reprsenter tous les entiers de de lintervalle -2 k-1 +1 2 k-1 -1. Lentier 0 a alors deux codages.

Reprsentation avec bit de signe sur 3 bits

-8-

3.1.4.2 Reprsentation biaise


Cette reprsentation est utilise pour le codage des exposants des nombres flottants. Avec k bits, cette reprsentation permet de reprsenter tous les entiers de lintervalle -2 k-1 2 k-1 -1. Chaque entier n de cet intervalle est cod par le codage de n + 2 k-1 comme un entier positif.

Reprsentation biaise (avec un biais de 4) sur 3 bits

3.1.4.3 Reprsentation en complment 2


Cette reprsentation est la plus importante car cest elle qui est utilise dans les ordinateurs. Malgr son apparente complexit, elle simplifie de nombreuses oprations sur les entiers. Avec k bits, cette reprsentation permet de reprsenter tous les entiers de de lintervalle -2 k-1 2 k-1 -1. Les entiers de 0 2 k-1 -1 sont cods commes les nombres positifs. Le bit de poids fort de leur reprsentation est donc toujours 0. Un nombre ngatif n de lintervalle -2 k-1 -1 est reprsent par le codage de n+2 k (qui appartient lintervalle 2 k-1 2 k -1) sur k bits. Dans la reprsentation en complment 2, les reprsentations dont le bit de poids fort est 0 sont utilises par les nombres positifs. Au contraire, les reprsentations dont le bit de poids fort est 1 sont utilises par les nombres ngatifs. Le bit de poids fort se comporte donc comme un bit de signe. Ceci facilite le test de signe dun entier sign.

-9-

Reprsentation en complment 2 sur 3 bits

3.1.4.3.1 Calcul de loppos


tant donn un entier n positif ou ngatif reprsent en complment 2, lalgorithme suivant permet de calculer la reprsentation en complment 2 de son oppos -n. Ceci est bien sr possible pour toutes les valeurs de lintervalle -2 k-1 2 k-1 -1 sauf pour -2 k-1 dont loppos nest plus dans lintervalle. Lalgorithme est le suivant. Soit n la reprsentation en complment 2 de n. Lalgorithme comporte les deux tapes suivantes qui utilisent des oprations prsentes dans tous les micro-processeurs et facilement ralisables avec des portes logiques. 1. Calculer le complment bit bit de n. 2. Ajouter 1 au rsultat de ltape prcdente. Pour expliquer cette algorithme, on remarque que le complment bit bit de m donne la diffrence entre le nombre crit avec que des 1 et n, cest--dire la valeur 2 k -n-1. Le rsultat de lalgorithme est donc 2 k -n. Le tableau ci-dessous permet de vrifier que quel que soit le signe de n, lalgorithme donne le bon rsultat. Soit n un entier positif ou ngatif et soit n son codage en complment 2. Nombre n 0 n 2 k-1 -1 n = -2 k-1 Codage n de n Rsultat Nombre cod n = n n = 2 k-1 2 k -n = -n -n 2 k -n n = 2 k-1 -n n

-2 k-1 +1 n -1 n = n+2 k

- 10 -

3.1.4.3.2 Calcul de la somme


Un des grands avantages de la reprsentation en complment 2 est de faciliter les additions et soustractions. En effet, laddition de deux nombres m et n se fait simplement en additionnant leur reprsentations m et n. Le tableau ci-dessous rcapitule les diffrents cas de laddition suivant les signes des oprandes. Soient m et n deux entiers signs reprsents sur k bits. On distingue donc les trois cas : le cas m et n positifs, le cas m positif et n ngatif et le cas m et n ngatifs. Le quatrime cas est omis du tableau car il est symtrique du cas m positif et n ngatif. Pour chacun des cas, on donne les codages respectifs m et n de m et n, puis on distingue nouveau deux sous-cas suivant la valeur de la somme m+n. Le rsultat de laddition de m et n nest pas ncessairement m+n puisque m+n peut tre suprieur 2 k et ne pas scrire sur k bits. Le rsultat de cette addition est m+n si 0 m+n 2 k -1 et m+n-2 k si 2 k m+n 2 k+1 -1. Nombre Codage Nombre Codage m m n n m positif 0 m m = m 2 k-1 -1 n positif 0 n n = n 2 k-1 -1 Cas 0 m+n 2 k-1 -1 Rsultat m+n Nombre C k cod C k-1 m+n m+n-2 k 00 01 00 11 Commentaire Rsultat positif Dbordement car m+n 2 k-1 Rsultat ngatif car |m| < |n| Rsultat positif car |m| > |n| Dbordement car m+n < -2 k-1 Rsultat ngatif

2 k-1 m+n m+n 2 k -2

m positif 0 m m = m 2 k-1 -1

2 k-1 m+n m+n m+n n ngatif k n = n + 2 -1 k-1 -2 n k 2 2 k m+n -1 m+n-2 k m+n 2 k +2 k-1 -1 n ngatif n = n + -2 k-1 n k 2 k +2 k-1 2 -1 m+n 2 k+1 -1

m ngatif m = m -2 k-1 m + 2k -1

2 k m+n m+n-2 k m+n+2 k 1 0 2 k +2 k-1 -1 m+n-2 k m+n 11

3.1.4.3.3 Exemple de calculs de somme


On se place avec k = 3 bits. Les nombres reprsentables en complments deux sont donc les entiers de -4 3. La table ci-dessous donne pour chaque paire de reprsentation, la somme et sa valeur. Les valeurs des deux retenues C 2 et C 3 sont codes par la couleur du fond. Les couleurs jaune et rouge correspondent aux dbordements, cest--dire C 2 C 3 = 1. C2 = 0 C2 = 1

C3 = 0 C3 = 1 C3 = 0 C3 = 1

- 11 -

100 101 110 111 000 001 010 011 -4 -3 -2 -1 0 1 2 3

100 000 001 010 011 100 101 110 111 -4 0 1 2 3 -4 -3 -2 -1 101 001 010 011 100 101 110 111 000 -3 1 2 3 -4 -3 -2 -1 0 110 010 011 100 101 110 111 000 001 -2 2 3 -4 -3 -2 -1 0 1 111 011 100 101 110 111 000 001 010 -1 3 -4 -3 -2 -1 0 1 2 000 100 101 110 111 000 001 010 011 0 -4 -3 -2 -1 0 1 2 3 001 101 110 111 000 001 010 011 100 1 -3 -2 -1 0 1 2 3 -4 010 110 111 000 001 010 011 100 101 2 -2 -1 0 1 2 3 -4 -3 011 111 000 001 010 011 100 101 110 3 -1 0 1 2 3 -4 -3 -2

3.1.4.4 Extension signe et non signe


Avec toutes les reprsentations tudies, un nombre signs ou non qui peut tre reprsent sur k bit peut encore tre reprsent avec k+h bits pour tout h 0. On tudie ici comme calculer cette reprsentation sur k+h bits pour la reprsentation des nombres non signs et pour la reprsentation en complment 2 des nombres signs.

3.1.4.4.1 Extension non signe


Soit un nombre n positif ayant b k-1 b 0 comme reprsentation non signe sur k bits. La reprsentation non signe de n sur k+h bits est simplement la reprsentation 00b k-1 b 0 obtenue en ajoutant h chiffres 0 devant la reprsentation k bits.

Extension non signe de k bits k+h bits dun entier

- 12 -

3.1.4.4.2 Extension signe


Soit un nombre n positif ou ngatif ayant b k-1 b 0 comme reprsentation en complment 2 sur k bits. Si n est positif, la reprsentation en complment 2 de n sur k+h bits est la reprsentation 00b k-1 b 0 obtenue en ajoutant h chiffres 0 devant la reprsentation k bits. Si n est ngatif, la reprsentation en complment 2 de n sur k+h bits est la reprsentation 11b k-1 b 0 obtenue en ajoutant h chiffres 1 devant la reprsentation k bits. Dans les deux cas, la reprsentation de n sur k+h est b k-1 b k-1 b k-1 b k-2 b 1 b 0 obtenue en ajoutant h copies du bit de poids fort b k-1 devant la reprsentation sur k bits.

Extension signe de k bits k+h bits dun entier

3.1.4.5 Comparaison des reprsentations


Reprsentation avec bit de signe Avantages reprsentation naturelle intervalle symtrique changement de signe facile comparaison facile vritable diffrence Inconvnients 2 reprsentations pour 0 comparaison difficile addition difficile reprsentation de 0 intervalle non symtrique addition difficile

biaise

reprsentation de 0 bit de signe intervalle non symtrique en complment 2 comparaison facile addition et soustraction semblables

3.2 Nombres en virgule fixe 3.3 Nombres en virgule flottante


La norme IEEE 754 dfinit des codages des nombres en virgule flottante sur un format de 32 bits appel simple prcision (dclar par float en C), un format de 64 bits appel double prcision (dclar double en C) et un format de 80 bits appel prcision tendue (dclar long double en C). Elle dfinit aussi les oprations arithmtiques usuelles (+,-,,/,) et les arrondis effectuer pour

- 13 -

ces oprations. Par contre, elle ne normalise pas les fonctions mathmatiques comme exp, log, sin, cos, . Lintrt principal de cette norme est davoir des comportements identiques des programmes sur des machines diffrentes. Le codage dun nombre est inspir de la notation scientifique comme -1.5 10 +3 . Chaque nombre est dcompos en trois parties : signe, exposant et mantisse. Le signe est cod par le bit de poids fort. Ensuite un certain nombre de bits sont consacrs lexposant et le reste la mantisse. La table ci-dessous donne le nombre de bits de chacun des lments dans les diffrents formats. Encodage Signe s Simple prcision 32 bits Double prcision 64 bits Prcision tendue 80 bits 1 bit 1 bit 1 bit Exposant e 8 bits 1e254 Mantisse m Valeur dun nombre 23 bits (-1) s 1.m 2 e-127 (-1) s 1.m 2 e-1023 (-1) s 1.m 2 e-16383

11 bits 1e2046 52 bits 15 bits 1e32766 64 bits

Dans la table ci-dessus, la formule 1.m doit tre interprte de la faon suivante. Si les bits de la mantisse sont b 1 b 2 b n , on a 1.m = 1 + b 1 /2 + b 2 /2 2 + b 3 /2 3 + + b n /2 n Soit lexemple en simple prcision 1011111101011000 (0xbf580000 en hexadcimal). Il se dcompose en le signe s = 1, lexposant e = 01111110 = (126) 10 et la mantisse m = 10101000. La valeur de 1.m = 1+1/2+1/8+1/16 = 1,6875. La valeur du nombre est donc -1,6875 2 -1 = -0,84375. Les fonctions C suivantes permettent de considrer un flottant comme un entier et inversement afin par exemple dafficher le codage hexadcimal dun flottant. Il nest pas possible dutiliser les cast directement sur les valeurs car cela effectuerait une conversion. On utilise au contraire un cast sur les pointeurs.
// On suppose sizeof(int) == sizeof(float) int float2int(float f) { int* p = (int*) &f; return *p; } float int2float(int n) { float* p = (float*) &n; return *p; } int main(void) { // Float --> hexa printf("%08x\n", float2int(-0.84375)); // Hexa --> float printf("%g\n", int2float(0xbf580000)); }

Si le nombre de bits consacrs lexposant est k, la valeur de lexposant e vrifie 0 < e < 2 k -1. Les valeurs 0 et 2 k -1 sont rserves pour des valeurs spciales.

- 14 -

La norme prvoit quatre types darrondi : vers 0, vers +, vers - ou au plus prs. En thorie, lutilisateur a le choix de larrondi mais aucun des langages de programmation actuels ne permet de le choisir effectivement. Les valeurs spciales qui peuvent tre reprsentes sont donnes par la table ci-dessous dans le cas de la simple prcision. Signe Exposant Mantisse 0 s 0 1 0 0 0 255 255 255 0 m0 0 0 m0 0 + - NaN Valeur Commentaire unique reprsentation de 0 rsultat de 1/0 rsultat de -1/0 Not a Number : rsultat de 0/0 ou -1

(-1) s 0.m 2 -126 nombres dnormaliss

Dans le cas de la simple prcision, les valeurs maximales sont (2-2 -23 )2 127 2 128 . La plus petite valeur positive reprsentable est 2 -23 2 -126 = 2 -249 (nombre dnormalis).

3.4 Caractres 3.4.1 Codage ASCII


Le codage ASCII affecte un code sur 7 bits aux principaux caractres mais pas aux caractres accentus. Il existe des extensions plus ou moins standards pour coder les caractres accentus sur un octet comme le codage ISO Latin 1.

3.4.2 Codage UNICODE


Le codage Unicode permet de manipuler tous les caractres possibles. Il affecte en effet un code 32 bits tous les caractres de toutes les langues. Il faut cependant faire attention au fait que les codes ne sont pas manipuls explicitement pour viter que chaque caractre occupe 4 octets. On utilise un format de codage dont le plus rpandu est le format UTF-8.

- 15 -

4 Transistors et portes logiques


On explique dans cette partie le fonctionnement schmatique dun transistor ainsi que la faon de raliser des portes logiques avec des transistors.

4.1 Semi-conducteurs
Les trois semi-conducteurs utiliss dans la fabrication des composants lectroniques sont les suivants : le silicium Si utilis majoritairement, le germanium Ge, larsniure de gallium AsGa. En plaant ces diffrents lments dans la table des lments chimiques (cf. figure ci-dessous), on constate que ces lments sont proches. Ces semi-conducteurs sont forms dlments ayant 4 lectrons de valence sur la dernire couche comme le silicium ou le germanium ou dun mlange dlments ayant 3 et 5 lectrons de valence comme le gallium et larsenic.

Une partie de la table des lments

4.1.1 Semi-conducteur intrinsque


Dans un cristal de silicium pur, les atomes forment 4 liaisons de covalence avec 4 voisins. Il remplissent ainsi la dernire couche en partageant les lectrons.

Cristal de silicium Dans la figure ci-dessus, le cristal est reprsent en plan mais il faut bien sr imaginer ce cristal dans lespace. La maille lmentaire du rseau est reprsente la figure ci-dessous.

- 16 -

Rseau dans lespace Au zro absolu, cest--dire la temprature 0K, la structure du cristal est stable et le silicium nest pas conducteur du courant lectrique. Lorsque la temprature augmente, les lectrons possdent une nergie supplmentaire qui provoque la rupture de certaines liaisons de covalence. Certains lectrons deviennent libres (cf. figure ci-dessous) et le silicium est alors peu conducteur, do le nom de semi-conducteur.

lectron libre

4.1.2 Semi-conducteurs dops


Le silicium est dop en introduisant des impurets dans le cristal. On distingue deux types de dopage suivant la nature des lments ajouts au silicium. On parle de semi-conducteur de type n lorsque le dopage est ralis avec des lments ayant 5 lectrons de covalence comme le phosphore, larsenic et lantimoine. Latome avec 5 lectrons de covalence forme 4 liaisons de covalence et garde un lectron qui est alors relativement libre (cf. figure ci-dessous).

- 17 -

Silicium dop n avec un lectron libre On parle de semi-conducteur de type p lorsque le dopage est ralis avec des lments ayant 3 lectrons de covalence comme le bore, laluminium et le gallium. Latome avec 3 lectrons de covalence ne peut former que 3 liaisons de covalence. Il y en quelque sorte un trou dlectron (cf. figure ci-dessous).

Silicium dop p avec un trou

4.2 Diode
Une jonction entre un semi-conducteur de type n et un semi-conducteur de type p est appele une diode. La partie de type n est appele cathode et la partie de type p est appele anode. Le courant lectrique ne peut passer travers une diode que dans un seul sens comme lvoque son symbole en forme dentonnoir.

Diode Le principe de fonctionnement de la diode est le suivant. Les lectrons libres du semi-conducteur de type n ont tendance aller boucher les trous du semi-conducteur de type p. Il en dcoule une diffusion des lectrons de la rgion dope n vers la rgion dope p. Chaque lectron qui se dplace laisse un ion positif dans la rgion n. Il sensuit donc un champ lectrique de rappel vers la rgion n qui conduit un quilibre. Dans cet quilibre, il y a une zone, appele zone de charge despace qui ressemble du silicium non dop et o il y a en outre un champ lectrique.

- 18 -

Si on applique une tension positive la cathode et ngative lanode, les lectrons sont attirs vers le bord de la cathode et les trous vers le bord de lanode. La zone de charge despace stend et la diode nest pas conductrice. Si on contraire, on applique une tension positive lanode et ngative la cathode qui est suprieure au champ lquilibre, les lectrons peuvent circuler de la cathode vers lanode et la diode est conductrice.

4.3 Transistors
Le transistor est la brique avec laquelle sont construits les circuits lectroniques tels les micro-processeurs. La technologie actuellement utilise pour fabriquer les micro-processeurs est la technologie MOS (Metal-Oxide-Semiconductor). Il existe deux types de transistors MOS : les transistors de type n et les transistors de type p. Les micro-processeurs actuels utilisent des transistors des deux types. On parle alors de technologie CMOS (Complementary Metal-Oxide-Semiconductor).

4.3.1 Fonctionnement
Un transistor possde trois broches appeles drain, grille et source. Pour dautres types de transistors, elle sont aussi appeles collecteur, base et metteur. Dans le cas des transistors MOS, le drain et la source jouent des rles (presque) symtriques et sont (pratiquement) interchangeables. Un transistor se comporte comme un interrupteur lectrique entre la source et le drain qui serait command par la grille. Le dessin ci-dessous illustre de manire image la faon dont fonctionne un transistor.

Fonctionnement imag dun transistor

- 19 -

Le comportement dun transistor n-MOS est le suivant. Si la grille est mise une tension de 2.9V, la source et le drain sont connects. Si au contraire, la grille est mise une tension de 0V, le circuit entre la source et le drain est ouvert. Le fonctionnement dun transistor p-MOS est linverse. Le drain et la source sont connects lorsque la tension applique la grille est 0V.

4.3.2 Composition
Un transistor est form de deux jonctions np obtenues en intercalant une couche p (respectivement n) entre deux couches n (respectivement p). Le transistor de type n correspond aux trois couches n-p-n et le transistor de type p aux couches p-n-p. Il y a en outre une grille en mtal au dbut de la technique MOS mais maintenant faite en polysilicium. Cette grille est spare de la couche intermdiaire par une fine couche doxyde de silicium SiO 2 isolant. Le potentiel appliqu la grille permet de modifier ltat de la couche intermdiaire.

Transistors n-MOS et p-MOS

4.3.3 Principe de fonctionnement


On considre un transistor de type n. Si aucune tension nest applique la grille, les deux jonctions np et pn se comporte comme des diodes en opposition et aucun courant ne peut passer entre la source et le drain. Si au contraire une tension positive est applique la grille, les lectrons chargs ngativement saccumulent dans le substrat dans la zone prs de la grille. La rgion du substrat prs de la grille va alors se comporter comme un semi-conducteur dop n (cf. figure ci-dessous). Le courant peut alors passer entre la source et le drain.

- 20 -

Formation dun tunnel n dans le substrat

4.4 Conventions dans les schmas


Dans tous les schmas du cours, on adopte la convention qui est illustre la figure suivante. Si un fil sarrte a une intersection avec un autre fil, les deux fils sont connects. Si par contre, deux fils se croisent, il ny a pas connexion des deux fils sauf si lintersection est matrialise par un gros point.

Convention des connexions aux intersections

4.5 Portes not, nand et nor


La porte la plus simple est la porte not de la ngation. Elle prend en entre une valeur x qui vaut 0 ou 1 et elle sort la valeur 1-x. La table de vrit de cette porte est donne ci-dessous. Entre Sortie I 0 1 I 1 0

La porte not peut tre ralise en logique CMOS par un circuit constitu de deux transistors, un de type n et un de type p. Ce circuit est appel inverseur. Linverseur ainsi que son symbole sont reprsents la figure ci-dessous.

Schma et symbole de linverseur La porte nand prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si les deux entres valent 1 et elle vaut 1 si au moins une des deux entres vaut 0. La table de vrit est donne ci-dessous.

- 21 -

Entres Sortie A 0 0 1 1 B (A B) 0 1 0 1 1 1 1 0

Un circuit pour raliser la porte nand en logique CMOS est donn ci-dessous. Il est constitu de quatre transistors dont deux n-MOS et deux p-MOS.

Schma et symbole de la porte nand La porte nor prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si au moins une des entres vaut 1 et elle vaut 1 si les deux entres valent 0. La table de vrit est donne ci-dessous. Entres Sortie A 0 0 1 1 B (A B) 0 1 0 1 1 0 0 0

Un circuit pour raliser la porte nor en logique CMOS est donn ci-dessous. Il est constitu de quatre transistors dont deux n-MOS et deux p-MOS. Cest le circuit dual du circuit de la porte nand. Les deux transistors p-MOS qui tait en parallle dans le circuit de la porte nand sont en srie dans le circuit de la porte nor. Au contraire, les deux transistors n-MOS qui tait en srie dans le circuit de la porte nand sont en parallle dans le circuit de la porte nor.

- 22 -

Schma et symbole de la porte nor

4.6 Portes or et and


Si dans le schma de la porte nor, chaque transistor n-MOS est remplac par un transistor p-MOS et inversement, on obtient un schma qui donne thoriquement une porte or. Pourtant, le circuit de la porte or nest pas ralis de cette manire. Cela provient du fait que la source et le drain des transistors ne jouent pas des rles compltement symtriques. Pour des raisons de consommation, les connexions avec le 0 sont toujours commandes par des transistors de type n et les connexions avec le 1 par des transistors de type p. Les circuits des portes and et or sont respectivement obtenus en combinant un circuit de la porte nand et nor avec un inverseur. La porte and prend en entre deux valeurs 0 ou 1. La sortie vaut 1 si les deux entres valent 1 et elle vaut 0 sinon. La table de vrit est donne ci-dessous. Entres Sortie A 0 0 1 1 B AB 0 1 0 1 0 0 0 1

Schma et symbole de la porte and

- 23 -

La porte and pourrait thoriquement tre aussi ralise par le shma ci-dessous qui comporte moins de transistors. Ce schma nest cependant pas utilis en pratique. Dans ce schma, la sortie est relie au 1 par des transistors n et au 0 par des transistors p. Ceci induit une consommation excessive par rapport au schma prcdent.

Mauvais schma dune porte and La porte or prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si les deux entres valent 0 et elle vaut 1 sinon. La table de vrit est donne ci-dessous. Entres Sortie A 0 0 1 1 B AB 0 1 0 1 0 1 1 1

Schma et symbole de la porte or

4.7 Portes nand et nor trois entres


On peut bien sr raliser une porte nand trois entres en combinant deux portes nand deux entres. Il est plus conomique en nombre de transistors de raliser directement cette porte. Cest la mme chose pour la porte nor trois entres.

- 24 -

Schma et symbole de la porte nand 3 entres

Schma et symbole de la porte nor 3 entres

4.8 Portes and et or entres multiples


Les schmas des portes nand et nor trois entres peuvent tre gnraliss pour obtenir des schmas pour des portes nand et nor un nombre quelconque dentres. Pour des raisons technologiques, ces portes ne sont pas ralises de cette faon. Il est prfrable de construire des portes un grand nombre dentres en combinant plusieurs portes 2 ou 3 entres. Des circuits pour les portes and ou or entres multiples peuvent tre construits en utilisant un arbre constitu de portes and ou or respectivement. La construction dun circuit pour une porte k entres peut tre faite de manire rcursive. Si k vaut 1 ou 2, le circuit est vident. Si k est suprieur 2, on construit dabord deux circuits ayant respectivement k/2 et k/2 entres. Les sorties des ces deux circuits sont ensuite envoyes sur une dernire porte and ou or. On vrifie par rcurrence que le nombre de portes dun tel circuit est exactement k-1 et que sa profondeur (nombre maximal de portes mises en cascade) est log 2 (k). Pour k = 4, on obtient le premier circuit reprsent la figure ci-dessous. Pour conomiser les transistors, chaque bloc de trois portes and ou or peut tre remplac par deux portes nand et une porte nor ou linverse. On obtient ainsi le second circuit reprsent la figure ci-dessous. Il existe dautres

- 25 -

circuits comme le troisime reprsent la figure ci-dessous qui ralisent une porte and 4 entres. Ce circuit est cependant viter car il augmente le temps de latence en raison de sa plus grande profondeur.

Schmas de portes and 4 entres En appliquant le procd ci-dessus pour k = 16, puis en remplaant chaque bloc de trois portes and par deux portes nand et une porte nor, on obtient le circuit ci-dessous qui a 10 portes nand et 5 portes nor. Ce circuit est particulirement rgulier car k est une puissance de 2.

Schma dune porte and 16 entres

4.9 Porte xor


La porte xor permet de raliser la fonction ou exclusif qui savre trs utile pour construire les additionneurs. Comme toutes les autres fonctions boolennes, elle se ralise avec les portes and et or ou bien encore nand et nor. Il faut la considrer comme une abrviation pour un petit circuit trs utile.

- 26 -

Entres Sortie A 0 0 1 1 B AB 0 1 0 1 0 1 1 0

Schmas et symbole de la porte xor

- 27 -

5 Circuits lmentaires
Les dcodeurs et multiplexeurs sont des circuits relativement lmentaires mais trs souvent utiliss. Il sagit de deux briques de base pour la construction de circuits plus labors. Ils sont en particulier prsents dans chaque circuit mmoire. Un dcodeur y dcode ladresse et active la ligne correspondante. Un multiplexeur permet dy slectionner la bonne sortie lors dune lecture.

5.1 Dcodeurs
Un dcodeur k bits possde k entres et 2 k sorties. La sortie dont le numro est donn par les entres est active (valeur 1) alors que toutes les autres sorties sont inactives (valeur 0). Le dcodeur 1 bit a donc une seule entre A 0 et deux sorties S 0 et S 1 . La table de vrit des sorties S 0 et S 1 est la suivante. Entre Sorties A0 0 1 S0 S1 1 0 0 1

On remarque que la sortie S 0 est la ngation de lentre A 0 alors que la sortie S 1 est gale A 0 . On a donc le circuit suivant avec un seul inverseur.

Schma et symbole dun dcodeur 1 bit Le dcodeur 2 bits a deux entres A 0 et A 1 ainsi que quatre sorties S 0 , S 1 , S 2 et S 3 . La table de vrit des quatre sorties en fonction des deux entres est la suivante. Entres Sorties

A1 A0 S0 S1 S2 S3 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

On remarque que lon a les quatre formules suivantes pour les sorties.

- 28 -

S0 S1 S2 S3

= A 1 A 0 = A 1 A 0 = A 1 A 0 = A1 A0

Schma et symbole dun dcodeur 2 bits Le dcodeur 3 bits a 3 entres et 8 sorties. Chaque sortie est obtenue comme le et logique des entres ou de leurs ngations. Les entres devant tre inverses correspondent aux zros dans lcriture en binaire du numro de la sortie. Ainsi la sortie S 5 est gal A 2 A 1 A 0 car 5 scrit 101 en binaire.

Schma et symbole dun dcodeur 3 bits Les circuits donns pour k gal 1, 2 et 3 se gnralisent facilement un entier quelconque. Le circuit est alors constitu dinverseurs et de 2 k portes and ayant chacune k entres. Le nombre dinverseurs ncessaires est k puisquil en faut un pour chaque entre A i afin de disposer de sa ngation A i . Sur les schmas pour k = 1, 2, 3, certains inverseurs peuvent tre vits en rutilisant une valeur calcule par un autre. Par contre, les schmas deviennent beaucoup moins clair. Comme chaque porte and k entres peut tre ralise avec k-1 portes and 2 entres (cf. la section portes logiques), on obtient un total de (k-1)2 k portes and. La profondeur de ce circuit est alors log 2 (k).

- 29 -

5.1.1 Dcodeur rcursif


Il est possible de construire de manire rcursive un dcodeur ayant n entre. Il faut alors introduire un cirtuit un peu plus gnral avec une nouvelle entre appele CS pour Chip Select. Un dcodeur k bits avec une entre CS possdent donc k+1 entres CS, A 0 , , A k-1 et 2 k sorties S 0 , , S 2 k -1 . Ce circuit se comporte de la faon suivante. Si lentre CS vaut 0, toutes les sorties valent 0 et si CS vaut 1, il se comporte comme un simple dcodeur. Lentre dont le numro scrit en binaire A k-1 A 0 vaut 1 et toutes les autres sorties valent 0. Pour k = 1, la table de vrit du dcodeur 1 bit avec une entre CS est donc la suivante. Entre Sorties CS A 0 S 0 S 1 0 0 1 1 On en dduit facilement le circuit ci-dessous. 0 1 0 1 0 0 1 0 0 0 0 1

Schma et symbole dun dcodeur 1 bit avec entre CS Pour k > 1, on peut construire un dcodeur k+1 entres en utilisant deux dcodeurs k entres et un dcodeur 1 entre et en les combinant comme sur le schma ci-dessous. Les deux dcodeurs k entres recoivent les entres A 0 , , A k-1 et leurs deux entres CS sont commandes par les deux sorties du dcodeur 1 bit. Ce dernier reoit en entre A k et CS.

Construction rcursive dun dcodeur k+1 entres

- 30 -

Pour k gal 2 et 3, la construction donne les deux dcodeurs suivants.

Schmas des dcodeurs rcursifs 2 et 3 bits On montre facilement que le nombre de dcodeurs 1 bit utiliss dans le dcodeur k bits est 2 k -1 et que le nombre de portes and utilises est donc 2 k+1 -2. La profondeur du circuit est k. Par rapport au dcodeur construit de manire directe, le circuit construit rcursivement utilise moins de portes logiques (2 k+1 au lieu de k2 k ) mais a une profondeur suprieure (k au lieu de log 2 (k)).

5.2 Multiplexeurs
Un multiplexeur est en quelque sorte linverse dun dcodeur. Un multiplexeurs k bits permet de slectionner une entre parmi 2 k disponibles. Un multiplexeur k bits a k + 2 k entres et une seule sortie. Les k premires entres A 0 ,,A k-1 sont appeles bits dadresses car elles donnent le numro de lentre slectionner parmi les entres B 0 ,,B 2 k -1 . La sortie S est alors gale cette entre slectionne. Le multiplexeur 1 bit a donc 3 entres A 0 , B 0 et B 1 et une seule sortie S. La formule donnant la sortie S en fonction des entres est la suivante. S = (A 0 B 1 ) (A 0 B 0 )

Schma et symbole dun multiplexeur 1 bit

- 31 -

Le multiplexeur 2 bit a donc 6 entres A 0 , A 1 , B 0 , B 1 , B 2 et B 3 et une seule sortie S. La formule donnant la sortie S en fonction des entres est la suivante. S = (A 1 A 0 B 3 ) (A 1 A 0 B 2 ) (A 1 A 0 B 1 ) (A 1 A 0 B 0 )

Schma et symbole dun multiplexeur 2 bits Le multiplexeur k bits peut tre construit rcursivement en utilisant le schma ci-dessous qui donne la construction dun multiplexeur k+1 bits avec deux multiplexeurs k bits et un multiplexeur 1 bit.

Multiplexeur k+1 bits construit avec deux multiplexeurs k bits Pour k gal 2 et 3, la construction donne les deux multiplexeurs suivants.

- 32 -

Schmas des multiplexeurs rcursifs 2 et 3 bits Comme pour les dcodeurs rcursifs, on montre facilement que le nombre de multiplexeurs 1 bit utiliss dans le multiplexeur k bits est 2 k -1 et que le nombre de portes logiques and et or utilises est donc 3(2 k -1). La profondeur du circuit est k. Par rapport au multiplexeur construit de manire directe, le circuit construit rcursivement utilise moins de portes logiques (3 2 k au lieu de k2 k ) mais a une profondeur suprieure (k au lieu de log 2 (k)).

5.3 Construction de circuits


Dans cette partie, nous expliquons comment construire le circuit dune fonction boolenne. Nous allons le faire sur lexemple de la fonction hidden bit.

5.3.1 Dfinition
Nous commenons par donner la dfinition de la fonction hidden bit. Cette fonction prend en entre k valeurs boolennes et retourne une valeur boolenne. Soient k entres binaires A 1 ,, A k et soit s la somme de ces entres, cest--dire le nombre dentres gales 1 : s = #{ i | A i = 1 }. Cette somme est comprise entre 0 et k. La sortie S est alors gale 0 si s = 0 et elle est gale A s si 1 s k.

5.3.2 Cas k = 1
Entre Sorties A1 0 1 s 0 1 S 0 1

On a alors lgalit S = A 1 . Le circuit est dans ce cas trivial puisquil se contente de mettre lentre A 1 en sortie.

- 33 -

5.3.3 Cas k = 2
Entres Sorties A1 A2 s 0 1 0 1 0 0 1 1 0 1 1 2 S 0 1 0 1

On a alors lgalit S = A 1 . Le circuit est encore une fois immdiat puisquil se contente de mettre lentre A 1 en sortie.

5.3.4 Cas k = 3
Le cas k = 3 est le premier cas intressant. On commence par calculer la table qui donne pour chaque valeur des entres les valeurs des deux sorties s et S. Entres Sorties S 0 1 0 1 0 0 1 1

A1 A2 A3 s 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 1 1 2 1 2 2 3

Partir de cette table de vrit de la fonction, il est facile de trouver une expression de la sortie S en fonction des trois entres A 1 , A 2 et A 3 . S = A1 A2 A3 + A1 A2 A3 + A1 A2 A3 + A1 A2 A3 Les quatre monmes correspondent aux quatre lignes de la table o la sortie prend la valeur 1. Le premier monme A 1 A 2 A 3 correspond par exemple la seconde ligne de la table. La sortie S vaut 1 lorsque A 1 = 1, A 2 = 0 et A 3 = 0. Il est possible de construire un circuit partir de la formule ci-dessus. Les valeurs des monmes peuvent tre calcules par quatre portes et trois entres et la valeur finale de S peut tre calcule par trois portes ou deux entres. Afin de construire un circuit le plus petit possible, il est ncessaire de simplifier au maximum la formule.

- 34 -

La formule ci-dessus peut tre simplifie. La somme des deux premiers monmes peut tre rduite un seul monme plus simple de la faon suivante. A 1 A 2 A 3 + A 1 A 2 A 3 = A 1 A 3 (A 2 + A 2 ) = A 1 A 3 Nous prsentons maintenant une mthode graphique lmentaire permettant de trouver une expression simple pour une formule. Cette mthode dite des tables de Karnaugh (cf. aussi wikibook) ne donne pas toujours la meilleure expression mais elle fonctionne relativement bien tout en tant facile mettre en uvre. Nous expliquons la mthode sur notre exemple. La mthode consiste disposer les valeurs de lexpression dans une table rectangulaire comme ci-dessous. A1 A1

A2 A2 A2 A2 A3 1 A3 1 0 1 1 0 0 0

Il faut essayer alors de regrouper les valeurs 1 en blocs rectangulaires. Ainsi, les deux 1 rouges correspondent A 1 = 1 et A 3 = 0. Ils donnent donc le monme A 1 A 3 que nous avions obtenu en regroupant les deux premiers monmes de notre formule initiale. Les blocs de 1 peuvent ne pas tre contigus. Les deux 1 bleus correspondent A 2 = 1 et A 3 = 1 et ils donnent le monme A 2 A 3 . Les blocs de 1 peuvent ventuellement se chevaucher. On a donc finalement trouv la formule suivante pour S. S = A2 A3 + A1 A3 Le circuit construit partir de la formule prcdente ne contient plus que deux portes et et une porte ou deux entres. On reconnat le circuit dun multiplexeur 1 bit o A 3 est le bit dadresse (ou de commande) et A 1 et A 2 sont les entres.

Schma pour la fonction hidden bit 3 entres

- 35 -

5.3.5 Cas k = 4
Entres Sorties S 0 1 0 1 0 0 1 1 0 0 1 0 0 1 1 1 A1 A2 A3 A4 s 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 A1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 A1

A2 A2 A2 A2 A3 A4 1 A4 1 A4 0 A4 1 1 0 0 1 1 1 1 0 0 0 0 0

A3

S = A1 A3 A4 + A2 A3 A4 + A1 A2 A4 + A1 A3 A4

- 36 -

Schma pour la fonction hidden bit 4 entres

5.3.6 Cas k = 5
S = A1 A3 A4 A5 + A2 A3 A4 A5 + A1 A2 A4 A5 + A1 A3 A4 A5 + A1 A2 A4 A5 + A1 A3 A4 A5 + A1 A2 A3 A5 + A1 A2 A4 A5

Schma pour la fonction hidden bit 5 entres

- 37 -

6 Additionneurs
Laddition est une opration trs courante dans un microprocesseur. Outre dans lunit arithmtique, elle sert pour incrmenter le compteur de programme et pour les calculs dadresses. Il est donc important quelle soit optimise pour tre rapide. Malgr la simplicit apparente du problme, il existe de multiples faons de construire des additionneurs efficaces en temps et en nombre de portes logiques utilises.

6.1 Semi-additionneur
Ce premier circuit est la brique de base. Il prend en entre deux bits A et B et calcule la somme S et la retenue C (pour Carry en anglais). Les bits C et S peuvent aussi tre vus comme les bits de poids fort et de poids faible de lcriture sur deux bits de la somme A + B. Entres Sorties A 0 0 1 1 B 0 1 0 1 C 0 0 0 1 S 0 1 1 0

On remarque sur la table de vrit que S est le ou exclusif des deux entres A et B, i.e. S = A B et que C vaut 1 lorsque les deux entres valent 1, cest--dire C = A B.

Schma et symbole dun semi-additionneur (HA)

6.2 Additionneur complet 1 bit


Pour construire un additionneur sur plusieurs bits, plusieurs additionneurs 1 bit sont mis en cascade. Chacun de ces addionneurs prend en entre deux bits A et B ainsi que la retenue prcdente C 0 . Il calcule la somme S de ces trois valeurs binaires ainsi que la retenue C 1 . Comme pour le semi-additionneur, ces bits C 1 et S peuvent aussi tre vus comme les bits de poids fort et de poids faible de lcriture sur deux bits de la somme A + B + C 0 . Cette somme scrit justement sur deux bits car elle est comprise entre 0 et 3.

- 38 -

Entres Sorties A B C0 C1 S 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1

On peut remarquer sur la table de vrit que S est le ou exclusif des trois entres A, B et C 0 , i.e. S = A B C 0 et que la retenue C 1 vaut 1 ds que deux des trois entres valent 1, cest--dire C 1 = AB AC 0 BC 0 .

Schma partir des formules dun additionneur complet Ce circuit peut aussi tre construit en assemblant deux semi-additionneurs en cascade. Le premier semi-additionneur calcule dabord la somme de A et B puis le second calcule la somme du premier rsultat et de C 0 . La retenue C 1 vaut 1 sil y a au moins une retenue une des deux sommes effectues.

- 39 -

Schma et symbole dun additionneur complet (SC)

6.3 Additionneur par propagation de retenue


Ladditionneur par propagation de retenue est le plus simple. Il est calqu sur lalgorithme manuel pour effectuer laddition. Les paires de bits sont additionns colonne par colonne et les retenues sont propages vers la gauche. En mettant en cascade k additionneurs complets 1 bits, on construit un additionneur k bits appel additionneur par propagation de retenue car la retenue se propage dadditionneur en additionneur. Laddionneur est form de k additionneurs 1 bit numrots de 0 k-1 de la droite vers la gauche. Ladditionneur i reoit en entres les bits A i et B i des entres A et B ainsi que la retenue C i engendre par laddionneur i-1. Il calcule le bit S i de la somme et la retenue C i+1 qui est transmise laddionneur i+1. Ladditionneur 0 reoit une retenue C 0 qui est normalement 0 pour effectuer une addition. Lutilit de cette entre est double. Elle permet dune part de cascader les additionneurs pour former des additionneurs sur plus de bits. Elle permet dautre part deffectuer la soustraction. Le nombre de portes logiques utilises par un addionneur par propagation de retenue k bits est proportionnel au nombre k. Le temps de propagation de la retenue est galement proportionnel au nombre k. Pour cette raison, cet addionneur est impraticable pour des nombres levs de bits comme 16 ou 64. Il est seulement utilis pour des petits nombres de bits, comme 4. Par contre, il peut servir de brique de base des additionneurs plus sophistiqus comme ladditionneur hybride.

Additionneur 4 bits

- 40 -

6.4 Calcul des indicateurs


Dans tout micro-processeur, il existe des indicateurs ou flags qui sont des registres 1 bit pouvant prendre les valeurs 0 ou 1. Ils sont mis jour ds quun chargement ou une opration logique ou arithmtique est effecue. Ces indicateurs peuvent ensuite tre tests par les branchement conditionnels. Les principaux indicateurs utiliss sont les indicateurs N, Z, C et O dcrits ci-dessous. Chacun de ces indicateurs concerne le rsultat de la dernire opration effectue (chargement, logique ou arithmtique). Indicateur N (pour Ngatif) Il indique si le rsultat est ngatif. Comme les entiers sont reprsents en complments 2, il est gal au bit de poids fort du rsultat. Indicateur Z (pour Zro) Il indique si le rsultat est gal 0. Il est donc gal au complmentaire du ou logique (cest--dire un nor) de tous les bits du rsultat. Indicateur C (pour Carry) Il indique si lopration a provoqu une retenue. Il est peut donc uniquement tre positionn par les oprations artihmtiques. Il est mis 1 lorsquil y a une retenue. Ceci correspond un dbordement pour une addition de nombres non signs. Indicateur O (pour Overflow) Il indique un dbordement lors dune addition de nombres signs. Ce dbordement intervient lorsque la somme de deux nombres positifs est suprieure 2 k-1 ou lorsque la somme de deux nombres ngatifs est infrieure -2 k-1 -1. Cet indicateur est gal au ou exclusif C k C k-1 des deux dernires retenues.

Calcul des indicateurs

6.5 Additionneur par anticipation de retenue


La lenteur de ladditionneur par propagation de retenue impose dutiliser dautres techniques pour des additionneurs ayant un nombre important de bits. Comme cette lenteur est due au temps ncessaire la propagation de la retenue, toutes les techniques ont pour but dacclrer le calcul des retenues. La premire technique appele anticipation de retenue consiste faire calculer les retenues par un circuit extrieur.

- 41 -

Afin de faciliter le calcul des retenues, on introduit deux quantits appeles G (pour Generate en anglais) et P (pour Propagate en anglais). Pour deux quantits binaires A et B, les quantits G et P sont dfinies de la faon suivante. G = AB et P = A + B Soient A = A n-1 A 0 et B = B n-1 B 0 deux entres de n bits. On note C i la retenue de laddition des i bits de poids faible de A et B. Pour acclrer le calcul des C i , on introduit les deux quantits G i et P i associes aux entres A i et B i par les formules suivantes. G i = A i B i et P i = A i + B i La valeur G i est la retenue engendre par laddition des deux bits A i et B i et la valeur de P i dtermine si la retenue de C i se propage. On a donc la formule suivante qui exprime simplement que la retenue C i+1 provient soit directement de laddition des bits A i et B i soit de la propagation de la retenue C i . C i+1 = G i + P i C i En utilisant plusieurs fois cette formule, on peut obtenir les formules suivantes qui expriment C i+1 en fonction dune retenue prcdente et des valeurs G j et P j intermdiaires. C i+1 = G i + P i G i-1 + P i P i-1 C i-1 C i+1 = G i + P i G i-1 + P i P i-1 G i-2 + P i P i-1 P i-2 C i-2 Le circuit suivant permet de calculer la somme ainsi que les deux quantits G i et P i .

Cellule de calcul de S, G et P.

- 42 -

6.5.1 Calcul anticip des retenues


En utilsant les formules ci-dessus, on obtient les formules suivantes pour les retenues C 1 , C 2 , C 3 , et C 4 partir de C 0 et des signaux G 0 , P 0 , G 1 , P 1 , G 2 , P 2 G 3 et P 3 . C1 C2 C3 C4 = G0 = G1 = G2 = G3 + P0C0 + P1G0 + P1P0C0 + P2G1 + P2P1G0 + P2P1P0C0 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0

Comme la retenue C 4 nest pas ncessaire pour calculer les sommes S 0 , S 1 , S 2 et S 3 , celle-ci peut-tre calcule en utilisant la formule suivante. C4 = G3 + P3C3 Lutilisation de cette dernire formule ne retarde pas les calculs des sommes et conomise des portes.

Circuit de calcul des retenues

6.5.2 Additionneur 4 bits avec calcul anticip des retenues

- 43 -

Additionneur 4 bits avec calcul anticip des retenues

6.5.3 Additionneur 16 bits avec calcul anticip des retenues


Plus gnralement, on note pour deux indices i et j, G j,i et P j,i la retenue engendre par laddition des bits de i j et la possibilit quune retenue se propage travers les bits de i j. On a donc la formule suivante qui exprime la retenue C j+1 en fonction de G j,i , P j,i et C i . C j+1 = G j,i + P j,i C i

- 44 -

Circuit de calcul des retenues et de G et P

- 45 -

Additionneur 16 bits avec calcul anticip des retenues

6.5.4 Additionneur 64 bits avec calcul anticip des retenues

Additionneur 64 bits avec calcul anticip des retenues

6.6 Additionneur rcursif


On commence par dfinir une opration binaire sur les paires (G,P). Cette opration note prend en paramtre deux paires (G, P) et (G, P) de valeurs binaires et retourne une nouvelle paire (G, P) = (G, P) (G, P) dfinie par les formules suivantes. G = G + PG et P = PP Cette opration nest pas commutative mais elle est associative. Les deux calculs de ((G, P) (G, P)) (G, P) ou de (G, P) ((G, P) (G, P)) donnent en effet la paire suivante. Il sagit pour les connaisseurs dun produit semi-direct.

- 46 -

(G+PG+PPG, PPP) Cette opration permet des calculs rapides de toutes les valeurs G et P en utilisant les formules ci-dessous. Pour i = k, on a G i,i = G i et P i,i = P i . Pour i j k, on a la formule suivante qui permet de calculer rcursivement toutes les valeurs G k,i et P k,i . (G k,i , P k,i ) = (G k,j+1 , P k,j+1 ) (G j,i , P j,i ). Le circuit GP ci-dessous calcule lopration Il prend en entre deux paires (G k,j+1 , P k,j+1 ) et (G j,i , P j,i ) et calcule la paire (G k,i , P k,i ) en utilisant la formule ci-dessus.

Cellule de calcul des G k,i et P k,i Le circuit GP peut tre utilis pour former un arbre de calcul des valeurs G k,i et P k,i . Cet arbre ne calcule pas toutes les valeurs G k,i et P k,i mais seulement celles ncessaires au calcul des retenues.

Arbre de calcul des G k,i et P k,i

- 47 -

Le circuit GP peut tre tendu en un circuit GPC qui effectue en outre le calcul de la retenue en utilisant la formule suivante dj donne ci-dessus. C j+1 = G j,i + P j,i C i . Le circuit GPC prend donc entre deux paires (G k,j+1 , P k,j+1 ) et (G j,i , P j,i ) et une retenue C i et calcule la paire (G k,i , P k,i ) et la retenue C j+1 .

Cellule de calcul des G k,i , P k,i et C j Si on remplace les circuit GP par des circuits GPC dans larbre de calcul ci-dessus, on obtient un circuit qui calcule en outre les retenues.

Additionneur rcursif 8 bits

- 48 -

Pour un circuit travaillant sur des entres de k bits, la profondeur de larbre est gale log k. Le nombre de portes du circuit est donc de lordre de k. Le temps de calcul des retenues est proportionnel log k. Les signaux G et P doivent descendre jusqu la racine de larbre puis les calculs de retenues doivent remonter jusquaux feuilles.

6.7 Additionneur hybride


Lide gnrale dun additionneur hybride est de combiner des techniques diffrentes de calcul de retenues pour construire un gros additionneur. Une premire technique comme la propagation de la retenue peut tre utilise pour construire des petits additionneurs qui sont ensuite regroups en utilisant une autre technique comme le calcul anticip de la retenue. On construit ci-dessous un additionneur 16 bits en combinant 4 additionneurs 4 bits par propagation de retenue. Ces 4 additionneurs 4 bits sont assembls autour dun circuit danticipation de retenue qui calcule leurs 4 retenues dentre. Afin de pouvoir utiliser un cirtuit danticipation de retenue, il faut disposer dun circuit calculant les valeurs G et P associes chacun des blocs de 4 bits. Ce circuit GP prend en entre les 8 valeurs G 0 , G 1 , G 2 , G 3 , P 0 , P 1 , P 2 , et P 3 associes aux 4 paires de bits et produit les valeurs G 3,0 et P 3,0 du bloc de 4 bits. On construit 4 additionneurs par propagation de retenue qui calculent galement les valeurs G 0 , G 1 , G 2 , G 3 , P 0 , P 1 , P 2 , et P 3 associes aux 4 paires de bits.

Additionneur 4 bits et calcul de G et P Les quatre additionneurs par propagation de retenue 4 bits 4SGP sont combins au circuit danticipation de retenue 4C par lintermdiaire des circuits GP de calcul des valeurs G et P des blocs. Le circuit global obtenu est un additionneur hybride 16 bits.

- 49 -

Additionneur hybride 16 bits

6.8 Additionneur par slection de retenue


Lide gnrale de ladditioneur par slection de retenue est deffectuer en parallle le calcul avec une retenue de 0 et le calcul avec une retenue de 1 puis de slectionner le bon rsultat lorsque la retenue est enfin connue.

Additionneur par slection de retenue 16 bits

- 50 -

6.9 Soustracteur
Pour calculer la diffrence A - B de deux nombre signs A et B, on utilise un circuit qui calcule dabord loppos -B de B puis effectue la somme de A avec -B grace un additionneur. Le calcul de -B est ralis en prenant la ngation de B bit bit puis en ajoutant 1 au rsultat obtenu. Ce dernier 1 est en fait ajout directement la somme de A et -B en linjectant comme retenue C 0 ladditionneur. Le circuit ci-dessous effectue une somme ou une diffrence suivant la valeur de la commande Cmd. Si Cmd vaut 0, le circuit calcule la somme A + B. Si, au contraire, Cmd vaut 1, le circuit calcule la diffrence A - B. En effet, chacune des portes xor effectue la ngation ou non dune entre B i suivant la valeur de Cmd. La diffrence est ici calcule avec un simple additionneur par propagation de retenue mais tout autre additionneur plus sophistiqu aurait pu aussi tre utilis.

Soustracteur 4 bits

- 51 -

7 Mmoires
On appelle mmoire un composant lectronique permettant de stocker une information sous forme binaire. On distingue les mmoires lecture seule appeles ROM pour Read Only Memory et les mmoires lecture/criture appeles improprement RAM pour Random Access Memory. Le contenu des mmoires lecture seule est fix lors de la fabrication en usine et reste dans la mmoire lorsque celle-ci nest pas alimente. Au contraire, les mmoires lecture/criture sont volatiles. Le contenu est perdu ds quelles ne sont plus alimentes. Il existe des mmoires intermdiaires entre les RAM et les ROM. Elles se comportent comme des ROM dans la mesure o elles ne perdent pas leur contenu sans alimentation mais ce contenu peut toutefois tre modifi par un processus spcial. Le contenu dune EPROM est effac par une exposition aux ultra-violets. Un nouveau contenu peut alors tre crit par un appareil spcialis. Les EEPROM peuvent tre reprogrammes de manire lectrique. Les mmoires flash sont des EEPROM dont la reprogrammation est rapide (do leur nom). Les mmoires des tous premiers ordinateurs taient magntiques. Les mmoires sont maintenant des composants lectroniques base de transistors. Il existe deux types de mmoires qui se distinguent par leur technique de fabrication : les mmoires dynamiques et les mmoires statiques. Il sagit dans les deux cas de mmoires volatiles qui ncessitent une alimentation pour conserver leur contenu. La mmoire dynamique est appele DRAM pour Dymanic RAM par opposition la mmoire statique appele SRAM pour Static RAM. Mmoire dynamique Bon march Lente Mcanisme de rafrachissent Comme son cot est moindre et que sa densit dintgration est suprieure, la mmoire dynamique est utilise pour la mmoire principale de lordinateur. Par contre, la mmoire statique est utilise pour les caches en raison de sa plus grande vitesse. Mmoire statique Chre Rapide

Grande densit dintgration Petite densit dintgration

7.1 Mmoire dynamique


Chaque lment de mmoire dynamique est form dun condensateur et dun transitor de commande (cf. figure ci-dessous). La ligne A est appele ligne de commande ou ligne dadresse. La ligne B est la ligne de donne sur laquelle est lu ou crit le bit dinformation. Le bit dinformation est reprsent par la charge du condensateur. Lorsque la ligne de commande est 0, le condensateur est isol de la ligne de donne et la charge reste prisonnire du condensateur. Au contraire, lorsque la ligne de commande est 1, on peut lire le bit en dtectant la charge ou crire un nouveau bit en forant la ligne de donne une valeur.

- 52 -

Mmoire dynamique 1 bit

7.1.1 Types de memoires dynamiques


Il existe deux types principaux de mmoire dynamique qui se distinguent par leur faon de communiquer avec le processeur. Les premires mmoires dynamiques taient asynchrones alors que les mmoires actuelles sont synchrones. Ces dernires sont appeles SDRAM pour Synchronous Dymanic RAM. Lorsque le processeur lit une donne dans une mmoire asynchrone, celui-ci lui envoie ladresse puis attend que celle-ci lui retourne la donne cette adresse. Plusieurs cycles horloge peuvent scouler avant que la donne ne parvienne au processeur. Aprs rception de la donne, le processeur peut nouveau demander une autre donne la mmoire. chaque requte la mmoire, le processeur reste inactif en attendant que la donne narrive. Dans le cas de mmoire synchrone, le processeur peut envoyer la mmoire une nouvelle requte de lecture ou dcriture avant que celle-ci nait fini de traiter la premire requte. Les demandes successives sont alors excute squentiellement par la mmoire. Chaque requte est reue pendant un cycle dhorloge et les donnes sont dlivres quelques cycles dhorloge plus tard. Le nombre de cycles dhorloge entre la requte et la donne est fixe. De cette manire, le processeur peut dterminer quelle requte correspond chaque donne. Le principe de fonctionnement dune mmoire synchrone est identique au pipeline utilis pour raliser un processeur. La mmoire est organise comme une chane o sont traites les requtes. La mmoire traite simultanment plusieurs requtes qui se trouvent des tapes diffrentes de la chane. Le traitement dune seule requte prend plusieurs cycles dhorloge mais une requte est traite chaque cycle. Parmi les mmoires synchrones, on distingue encore plusieurs variantes. Les mmoires SDR SDRAM pour Single Data Rate SDRAM reoivent une requte chaque cycle dhorloge. Les mmoires DDR SDRAM pour Double Data Rate DRAM permettent de doubler le dbit de donnes entre le processeur et la mmoire. Une requte est encore traite chaque cycle dhorloge mais chaque requte concerne deux mots conscutifs en mmoire. Le premier mot est transmis sur le front montant du signal dhorloge alors que le second est transmis sur front descendant du signal dhorloge. Les mmoires DDR2 SDRAM doublent encore le dbit de donnes en traitant quatre mots conscutifs en mmoire chaque requte.

7.2 Mmoire statique


Chaque lment de mmoire statique est form de six transistors. Quatre de ces six transistors constituent deux inverseurs mis tte-bche et les deux derniers, commands par la ligne dadresse A, relient les inverseurs aux lignes de donnes

- 53 -

Mmoire statique 1 bit Le verrou SR est un bit de mmoire muni de deux entres S et R permettant de le positionner 1 (Set) ou 0 (Reset). Ce circuit peut tre ralis avec deux portes nor ou deux portes nand. Dans ce dernier cas, les commandes S et R sont inverses : elles sont actives pour la valeur 0 et inactive pour la valeur 1.

Verrou SR Linconvnient principal du verrou SR est que son tat nest pas spcifi si les deux commandes S et R sont actives simultanment. Le verrou D rsout ce problme. Ce verrou a deux entres D (pour Data) et W (pour Write). La premire entre donne la valeur qui doit tre crite dans le bit de mmoire et la seconde entre valide lentre D. Si W vaut 0, rien nest crit dans la mmoire et son tat reste inchang. Si au contraire W vaut 1, la valeur de D est crite dans la mmoire.

Verrou D (mmoire 1 bit) La bascule D est obtenue en mettant en srie deux verrous D avec des entres W en opposition (ngation lune de lautre). Lentre W du premier verrou D est lentre Clk de la bascule et sa sortie est lentre D du second verrou D. Lentre W du second verrou est la ngation Clk de lentre Clk de la bascule. Quand lentre Clk de la bascule vaut 1, son entre D est crite dans le premier verrou pendant que le second verrou reste inchang. Quand lentre Clk de la bascule vaut 0, le premier verrou reste inchang et son tat est crit dans le second verrou. Il sagit dune sorte de bufferisation qui permet de lire et dcrire simultanment dans une mmoire 1 bit. Pendant que Clk vaut 1, le

- 54 -

premier verrou reoit la nouvelle valeur pendant que lancienne valeur est lue dans le second verrou. Pendant que Clk vaut 0, la nouvelle valeur est transfre dans le second verrou. Les bascules D sont utilises dans les circuits squentiels et elle reoivent alors le signal dhorloge sur lentre Clk (pour Clock).

Bascule D (mmoire 1 bit avec bufferisation)

7.3 Organisation de la mmoire 7.3.1 Mmoires k n bits


La mmoire peut tre vue comme organise en grille. Chaque ligne correspond une adresse. Le nombre de lignes est donc une puissance de deux. Ce nombre est gal 2 k o k est le nombre de lignes dadresse. Chaque colonne de la grille correspond un des bits de la donne transmise. Le nombre de colonnes peut tre quelconque mme si dans la pratique, cest aussi une puissance de deux, souvent 8, 16 ou 32.

- 55 -

Mmoire 4 3 bits

7.3.2 Mmoires 1 bit


Dans le cas dune mmoire 1 bit, il y a un intrt ne pas lorganiser comme une seule colonne selon le principe prcdent mais encore sous forme dune grille. Il y a alors un gain sur le nombre de portes logiques utilises pour le dcodage des adresses.

- 56 -

Organisations colonne et grille dune mmoire 2 8 1 bits Soit par exemple une mmoire 2 8 1 bits. Si elle est organise selon une seule colonne, on a un dcodeur 8 entres qui utilise donc 256 = 2 8 portes et logique ayant chacune 8 entres. Cette mme mmoire peut tre organise selon une grille 16 16. Les quatre premiers bits A 0 A 3 sont envoys sur un dcodeur pour slectionner la ligne parmi les 16 = 2 4 lignes. Un multiplexeur command par les quatre derniers bits A 4 A 7 permet de slectionner le bit parmi les 16 bits provenant des 16 colonnes. Le dcodeur et le multiplexeur utilisent chacun 16 portes et logique ayant chacune 3 ou 4 entres. Ceci fait un total de 32 portes dans lorganisation en grille et donc un gain de 224 portes portes par rapport lorganisation en colonne. Dans le cas de mmoires ayant un nombre trs important de bits, le gain est bien suprieur. Dans le cas dune grille, celle-ci na pas besoin dtre carre comme dans lexemple. Il est possible dutiliser tous les intermdiaires entre une seule colonne et un carr. Par contre, ce sont les grilles carres qui procurent le plus grand gain en nombre de portes logiques. Dans lorganisation colonne, le nombre de portes utilises est proportionnel au nombre de bits de la mmoire. Chaque bit mmoire ncessite un seul transistor alors que chaque porte logique ncessite plusieurs transistors. Du coup, lessentiel des transistors est finalement utilis pour le dcodage des adresses. Dans lorganisation en grille, le nombre de portes logiques utilises pour le dcodage est proportionnel la racine carre n de n o n est le nombre de bits de la mmoire.

7.3.3 Couplage de mmoire


La plupart des mmoires utilises dans les ordinateurs sont des mmoires 1 bit. Pour obtenir une mmoire dont chaque mot est un octet, il est ncessaire dassembler huit botiers. Ceux-ci sont mis en parallle dans la mesure o ils reoivent tous la mme adresse. Par contre, chacun des botiers reoit une seule ligne du bus de donne.

- 57 -

Mmoire 2 8 8 bits

7.3.4 Augmentation de la taille


Pour construire une mmoire ayant 2 k mots avec des botiers mmoire 2 k mots, il faut utiliser 2 k-k botiers. Les k bits dadresses sont alors distribus de la manire suivante. Les k bits de poids faibles A 0 A k-1 sont envoys sur tous les botiers. Les k-k bits de poids fort A k A k-1 arrivent sur un dcodeur permettant de slectionner un seul des 2 k-k botiers mmoire. Tous les bits du bus de donnes sont relis chacun des botiers. Ceci est possible aussi bien en lecture quen criture car les entre/sorties des botiers sont dans un tat dit haute impdance lorsque le circuit nest pas slectionn.

Mmoire 2 12 8 bits

7.4 Mmoires associatives


Les mmoires associatives permettent de stocker un ensemble de paires (cls,valeurs), de rechercher en temps constant si une valeur est associe une cl. Un tel dispositif est utilis dans les routeurs rseaux et surtout pour le Translation Lookaside Buffer de la mmoire virtuelle. La mmoire associative sert alors traduire les adresses virtuelles en adresses physiques.

- 58 -

Principe de la mmoire associative

Organisation dune mmoire associative

Cellule de mmoire associative

- 59 -

8 Circuits squentiels
Il ny a aucune notion de temps dans les circuits combinatoires. Un circuit combinatoire est simplement une fonction qui calcule des valeurs de sortie en fonction des valeurs dentre. On peut ajouter la notion de temps avec un signal dhorloge. Un signal dhorloge est un signal carr priodique qui peut tre produit par un quartz.

8.1 Principe

Principe du circuit squentiel

8.2 Horloge
Signal dhorloge

8.3 Exemple
Le petit circuit ci-dessous permet dincrmenter ou de dcrmenter un entier cod sur trois bits. Soit n lentier reprsent en binaire par les trois bits dentre A 2 A 1 A 0 . Si la valeur en entre de Cmd est 0, lentier reprsent par les trois bits de sortie S 2 S 1 S 0 est n+1. Si au contraire la valeur en entre de Cmd est 1, lentier reprsent par les trois bits de sortie S 2 S 1 S 0 est n-1. Les calculs de n+1 ou n-1 sont bien sr effectus modulo 8.

Incrmenteur/dcrmenteur commande

- 60 -

Le circuit ci-dessous ralise une guirlande lumineuse. Les lampes sallument tour de rle de manire cyclique. La vitesse du processus est contrle par le signal dhorloge Clk. Le sens de rotation du cycle est dtermin par lentre Cmd.

Guirlande commande

8.4 Automate

Implantation dun automate

- 61 -

9 Architecture dun micro-processeur


Avant dtudier larchitecture dtaille dun micro-processeur prcis, on aborde ici larchitecture globale dun micro-processeur. Tous les micro-processeurs conus jusqu aujourdhui sorganisent globalement de mme faon. Ils peuvent tre dcomposs en quatre composants dcrits par le modle de von Neumann.

9.1 Modle de von Neumann


Le modle de von Neumann donne les quatre composants essentiels qui constituent un micro-processeur. Il dcrit galement les interactions entre ces diffrents composants. Les quatre composants du modle de von Neumann sont les suivants. 1. 2. 3. 4. unit de contrle unit de traitement mmoire unit dentres/sorties

Modle de von Neumann

9.2 Organisation interne des composants

- 62 -

Unit de contrle

Unit de traitement

9.2.1 Mmoire
Le registre dadresse (Memory Address Register) est le registre o est stock ladresse de la case mmoire lue ou crite lors dun accs la mmoire. La donne transite par le registre de donne (Memory Data Register). Lors dune lecture, la donne parvient au processeur dans ce registre. Lors dune criture, la donne est place dans ce registre par le processeur avant dtre crite dans la case mmoire.

- 63 -

Mmoire

9.3 Instructions 9.4 Cycle dexcution


1. 2. 3. 4. 5. 6. chargement de linstruction dcodage de linstruction calcul des adresses des oprandes chargement des oprandes excution mise en place du rsultat

9.5 Registres PC et IR
Le compteur de programme (PC pour Program counter) contient en permanence ladresse de la prochaine instruction excuter. chaque dbut de cycle dexcution, linstruction excuter est charge dans le registre IR partir ladresse contenue dans le registre PC. Ensuite, le registre PC est incrment pour pointer sur linstruction suivante. Le registre dinstruction (IR) contient linstruction en cours dexcution. Ce registre est charg au dbut du cycle dexcution par linstruction dont ladresse est donne par le compteur de programme PC.

9.6 Codage des instructions


Les instructions excuts par le processeur sont stockes en mmoire. Toutes les instructions possibles sont reprsentes par des codes. Le code dune instruction est appel op-code. Les op-code peuvent tre de longueur fixe comme dans le LC-3 ou de longueur variable comme dans le Pentium.

- 64 -

10 Micro-processeur LC-3
Le micro-processeur LC-3 est vocation pdagogique. Il nexiste pas de ralisation concrte de ce processeur mais il existe des simulateurs permettant dexcuter des programmes. Lintrt de ce micro-processeur est quil constitue un bon compromis de complexit. Il est suffisamment simple pour quil puisse tre apprhend dans son ensemble et que son schma en portes logiques soit accessible. Il comprend cependant les principaux mcanismes des micro-processeurs (appels systme, interruptions) et son jeu dinstructions est assez riche pour crire des programmes intressants.

10.1 Registres
Le micro-processeur LC-3 dispose de 8 registres gnraux 16 bits appels R0,,R7. Il possde aussi quelques registres spcifiques dont lutilisation est aborde plus tard. Le registre PSR (Program Status Register) regroupe plusieurs indicateurs binaires dont lindicateur de mode (mode utilisateur ou mode privilgi), les indicateurs n, z et p qui sont tests par les branchements conditionnels ainsi que le niveau de priorit des interruptions. Les registres USP (User Stack Pointer) et SSP (System Stack Pointer) permettent de sauvegarder le registre R6 suivant que le programme est en mode privilgi ou non. Comme tous les micro-processeurs, le LC-3 dispose dun compteur de programme PC et dun registre dinstruction IR qui sont tous les deux des registres 16 bits.

Registres du LC-3

10.1.1 Registre PSR


Le registre PSR regroupe plusieurs informations diffrentes. Le bit de numro 15 indique si le processeur est en mode utilisateur (0) ou privilgi (1). Les trois bits de numros 10 8 donnent la priorit dexcution. Les trois bits de numros 2 0 contiennent respectivement les indicateurs n, z et p.

Registre PSR

- 65 -

10.2 Indicateurs N, Z et P
Les indicateurs sont des registres 1 bit. Les trois indicateurs n, z et p font en fait partie du registre spcial PSR. Ils sont positionns ds quune nouvelle valeur est mise dans un des registres gnraux R0,,R7. Ceci a lieu lors de lexcution dune instruction logique (NOT et AND), arithmtique (ADD) ou dune instruction de chargement (LD, LDI, LDR et LEA). Ils indiquent respectivement si cette nouvelle valeur est ngative (n), nulle (z) et positive (p). Ces indicateurs sont utiliss par linstruction de branchement conditionnel BR pour savoir si le branchement doit tre pris ou non.

10.3 Mmoire
La mmoire du LC-3 est organise par mots de 16 bits. Ladressage du LC-3 est galement de 16 bits. La mmoire du LC-3 est donc forme de 2 16 mots de 16 bits, cest--dire 128 KiB avec des adresses de 0000 FFFF en hexadcimal. Cette organisation de la mmoire est inhabituelle mais elle simplifie le cblage. La mmoire de la plupart des micro-processeurs est organise par octets (mots de 8 bits). Par contre, ces micro-processeurs ont la possibilit de charger directement 2, 4 ou 8 octets. Pour certains, ce bloc doit tre align sur une adresse multiple de 2, 4 ou 8 alors que ce nest pas ncessaire pour dautres.

Mmoire du LC-3

10.4 Instructions
Les instructions du LC-3 se rpartissent en trois familles : les instructions arithmtiques et logiques, les instructions de chargement et rangement et les instructions de branchement (appeles aussi instructions de saut ou encore instructions de contrle). Les instructions arithmtiques et logiques du LC-3 sont au nombre de trois. Le LC-3 possde une instruction ADD pour laddition, une instruction AND pour le et logique bit bit et une instruction NOT pour la ngation bit bit. Le rsultat de ces trois oprations est toujours plac dans un registre. Les deux oprandes peuvent tre soit les contenus de deux registres soit le contenu dun registre et une constante pour ADD et AND.

- 66 -

Les instructions de chargement et rangement comprennent des instructions (avec des noms commencent par LD) permettant de charger un registre avec une valeur et des instructions (avec des noms commencent par ST) permettant de ranger en mmoire le contenu dun registre. Ces instructions se diffrencient par leurs modes dadressage qui peut tre immdiat, direct, indirect ou relatif. Les instructions de chargement sont LD, LDI, LDR, LEA et les instructions de rangement sont ST, STI et STR. Les instructions de branchement comprennent les deux instructions de saut BR et JMP, les deux instructions dappel de sous-routine JSR et JSRR, une instruction TRAP dappel systme, une instruction RET de retour de sous-routine et une instruction RTI de retour dinterruption.

10.4.1 Description des instructions


10.4.1.1 Instructions arithmtiques et logiques
Ces instructions du LC-3 nutilisent que les registres aussi bien pour les sources que pour la destination. Ceci est une caractristique des architectures RISC. Le nombre dinstructions arithmtiques et logiques du LC-3 est rduit au strict ncessaire. Les micro-processeurs rels possdent aussi des instructions pour les autres oprations arithmtiques (soustraction, multiplication, division) et les autres oprations logiques (ou logique, ou exlusif). Ils possdent aussi des instructions pour laddition avec retenue, les dcalages.

10.4.1.1.1 Instruction NOT


Linstruction NOT permet de faire le non logique bit bit dune valeur 16 bits. Sa syntaxe est NOT DR,SR o DR et SR sont les registres destination et source.

10.4.1.1.2 Instruction ADD


Linstruction ADD permet de faire laddition de deux valeurs 16 bits. Elle convient pour les additions pour les nombres signs ou non puisque les nombres sont reprsents en complement 2. Elle a deux formes diffrentes. Dans la premire forme, les deux valeurs sont les contenus de deux registres gnraux. Dans la seconde forme, la premire valeur est le contenu dun registre et la seconde est une constante (adressage immdiat). Dans les deux formes, le rsultat est rang dans un registre. La premire forme a la syntaxe ADD DR,SR1,SR2 o DR est le registre destination o est rang le rsultat et SR1 et SR2 sont les registres sources do proviennent les deux valeurs. La seconde forme a la syntaxe ADD DR,SR1,Imm5 o DR et SR1 sont encore les registres destination et source et Imm5 est une constante code sur 5 bits (-16 Imm5 15). Avant deffecteur lopration, la constante Imm5 est tendue de faon signe sur 16 bits en recopiant le bit 4 sur les bits 5 15.

10.4.1.1.3 Instruction AND


Linstruction AND permet de faire le et logique bit bit de deux valeurs 16 bits. Elle a deux formes similaires celles de linstruction ADD de syntaxes AND DR,SR1,SR2 et AND DR,SR1,Imm5.

- 67 -

10.4.1.2 Instructions de chargement et rangement


Les instructions de chargement permettent de charger un des registres gnraux avec un mot en mmoire alors que les instructions de rangement permettent de ranger en mmoire le contenu dun de ces registres. Ce sont les seules instructions faisant des accs la mmoire. Ces diffrentes instructions se diffrencient par leur mode dadressage. Un mode dadressage spcifie la faon dont ladresse mmoire est calcule. Le micro-processeur LC-3 possde les principaux modes dadressage qui sont les modes dadressage immdiat, direct, relatif et indirect. La terminologie pour les modes dadressage nest pas fixe car chaque constructeur a introduit ses propres termes. Le mme mode peut avoir des noms diffrents chez deux constructeurs et le mme nom utilis par deux constructeurs peut recouvrir des modes diffrents. Il faut faire attention au fait que presque tous les modes dadressage du LC-3 sont relatifs au compteur de programme. Cette particularit est l pour compenser la petite taille des offsets qui permettent un adressage un espace rduit. Excepte linstruction LEA, les instructions de chargement et rangement vont par paire. Pour chaque mode dadressage, il y a une instruction de chargement dont le mnmonique commence par LD pour LoaD et une instruction de rangement dont le mnmonique commence par ST pour STore. Toutes les instructions de chargement et rangement contiennent un offset. Cet offset nest en gnral pas donn explicitement par le programmeur. Celui-ci utilise des tiquettes et lassembleur se charge de calculer les offsets.

10.4.1.2.1 Instruction LEA


Linstruction LEA pour Load Effective Address charge dans un des registres gnraux la somme du compteur de programme et dun offset cod dans linstruction. Ce mode adressage est gnralement appel adressage absolu ou immdiat car la valeur charge dans le registre est directement contenue dans linstruction. Aucun accs supplmentaire la mmoire nest ncessaire. Cette instruction est par exemple utilise pour charger dans un registre ladresse dun tableau.

Adressage immdiat

- 68 -

10.4.1.2.2 Instructions LD et ST
Les instructions LD et SD sont les instructions gnrales de chargement et rangement. Linstruction LD charge dans un des registres gnraux le mot mmoire ladresse gale la somme du compteur de programme et dun offset cod dans linstruction. Linstruction ST range le contenu du registre cette mme adresse. Ce mode adressage est gnralement appel adressage direct. Il ncessite un seul accs la mmoire.

Adressage direct

10.4.1.2.3 Instructions LDR et STR


Linstruction LDR charge dans un des registres gnraux la mot mmoire ladresse gale la somme du registre de base et dun offset cod dans linstruction. Linstruction STR range le contenu du registre cette mme adresse. Ce mode adressage est gnralement appel adressage relatif ou bas. Il ncessite un seul accs la mmoire. La premire utilit de ces instructions est de manipuler les objets sur la pile comme par exemple les variables locales des fonctions. Elles servent aussi accder aux champs des structures de donnes. Le registre de base pointe sur le dbut de la structure et loffset du champ dans la structure est cod dans linstruction.

Adressage relatif

- 69 -

10.4.1.2.4 Instructions LDI et STI


Les instructions LDI et STI sont les instructions les plus complexes de chargement et rangement. Elle mettent en uvre une double indirection. Elles calculent, comme les instructions LD et SD, la somme du compteur de programme et de loffset. Elle chargent la valeur contenue cette adresse puis utilisent cette valeur nouveau comme adresse pour charger ou ranger le registre. Ce mode adressage est gnralement appel adressage indirect. Il ncessite deux accs la mmoire.

Adressage indirect

10.4.1.3 Instructions de branchements 10.4.1.3.1 Instruction BR


Linstruction gnrale de branchement est linstruction BR. Elle modifie le droulement normal des instructions en changeant la valeur contenue par le registre PC. Cette nouvelle valeur est obtenue en ajoutant la valeur de PC un offset cod sur 9 bits dans linstruction. Le branchement peut tre inconditionnel ou conditionnel. Le cas conditionnel signifie que le branchement est rellement excut seulement si une condition est vrifie. Certains des trois indicateurs n, z, et p sont examins. Si au moins un des indicateurs examins vaut 1, le branchement est pris. Sinon, le branchement nest pas pris et le droulement du programme continue avec linstruction suivante. On rappelle que les trois indicateurs n, z et p sont mis jour ds quune nouvelle valeur est charge dans un des registres gnraux. Ceci peut tre ralis par une instruction arithmtique ou logique ou par une instruction de chargement. Les indicateurs qui doivent tre pris en compte par linstruction BR sont ajouts au mnmonique BR pour former un nouveau mnmonique. Ainsi linstruction BRnp excute le branchement si lindicateur n ou lindicateur p vaut 1, cest--dire si lindicateur z vaut 0. Le branchement est alors pris si la dernire valeur charge dans un registre est non nulle.

- 70 -

Branchement conditionnel Les programmes sont crits en langage dassembleur qui autorise lutilisation dtiquettes (labels en anglais) qui vitent au programmeur de spcifier explicitement les offsets des branchements. Le programmeur crit simplement une instruction BR label et lassembleur se charge de calculer loffset, cest--dire la diffrence entre ladresse de linstruction de branchement et ladresse dsigne par ltiquette label. Comme loffset est cod sur 9 bits, linstruction BR peut uniquement atteindre une adresse situe de -255 256 mots mmoire. Le dcalage dune unit est d au fait que le calcul de la nouvelle adresse est effectu aprs lincrmentation du compteur de programme qui a lieu lors de la phase de chargement de linstruction.

10.4.1.3.2 Instruction JMP


Linstruction JMP permet de charger le compteur de programme PC avec le contenu dun des registres gnraux. Lintrt de cette instruction est multiple. 1. Linstruction JMP compense la faiblesse de linstruction BR qui peut uniquement effectuer un branchement proche. Linstruction JMP permet de sauter nimporte quelle adresse. Si ltiquette label dsigne une adresse trop loigne, le branchement cette adresse peut tre effectue par le code suivant.
LD R7,labelp JMP R7 labelp: .FILL label ... label: ...

2. Linstruction JMP est indispensable pour tout les langages de programmation qui manipulent explicitement comme C et C++ ou implicitement des pointeurs sur des fonctions. Tous les langages de programmation objet manipulent des pointeurs sur des fonctions dans la mesure o chaque objet a une table de ses mthodes. 3. Linstruction JMP permet aussi les retours de sous-routines puisque linstruction RET est en fait une abrviation pour linstruction JMP R7.

- 71 -

Branchement par registre

10.4.2 Rcapitulatif des Instructions


La table suivante donne une description concise de chacune des instructions. Cette description comprend la syntaxe, laction ainsi que le codage de linstruction. La colonne nzp indique par une toile * si les indicateurs n, z et p sont affects par linstruction.

- 72 -

Syntaxe

Action

nzp Op-code

Codage Arguments DR DR DR DR DR DR DR SR DR SR DR SR n z p 0 0 0 000 1 SR 111111 Imm5 Imm5 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

NOT DR,SR ADD DR,SR1,SR2 AND DR,SR1,SR2 LEA DR,label LD DR,label ST SR,label LDR DR,BaseR,Offset6 STR SR,BaseR,Offset6 LDI DR,label STI SR,label BR[n][z][p] label NOP JMP BaseR RET ( JMP R7) JSR label JSRR BaseR RTI TRAP Trapvect8 Rserv

DR not SR DR SR1 + SR2 DR SR1 and SR2 DR PC + SEXT(PCoffset9) DR mem[PC + SEXT(PCoffset9)] mem[PC + SEXT(PCoffset9)] SR DR mem[BaseR + SEXT(Offset6)] mem[BaseR + SEXT(Offset6)] SR DR mem[mem[PC + SEXT(PCoffset9)]] mem[mem[PC + SEXT(PCoffset9)]] SR Si (cond) PC PC + SEXT(PCoffset9) No Operation PC BaseR PC R7 R7 PC; PC PC + SEXT(PCoffset11) R7 PC; PC BaseR cf. interruptions R7 PC; PC mem[Trapvect8]

* * * * * * *

1001 0001 0001 0101 0101 1110 0010 0011

SR1 0 0 0 SR2 SR1 1 SR1 1 SR1 0 0 0 SR2 PCoffset9 PCoffset9 PCoffset9 BaseR BaseR Offset6 Offset6

ADD DR,SR1,Imm5 DR SR1 + SEXT(Imm5) AND DR,SR1,Imm5 DR SR1 and SEXT(Imm5)

0110 0111

1010 1011 0000 0000 1100 1100 0100 0100 1000 1111 1101

PCoffset9 PCoffset9 PCoffset9 000000000 111 000000 PCoffset11

0 0 0 BaseR 0 0 0 0 0 0

0 0 0 BaseR 0 0 0 0 0 0 000000000000 0000 Trapvect8

10.5 Codage des instructions


Chaque instruction est reprsente en mmoire par un code. Il est important que le codage des instructions soit rflchi et rgulier pour simplifier les circuits de dcodage. Toutes les instructions du LC-3 sont codes sur un mot de 16 bits. Les quatre premiers bits contiennent lop-code qui dtermine linstruction. Les 12 bits restant codent les paramtres de linstruction qui peuvent tre des numros de registres ou des constantes.

- 73 -

titre dexemple, les codages des deux instructions ADD et BR sont dtaills ci-dessous.

10.5.1 Codage de ADD


Linstruction ADD peut prendre deux formes. Une premire forme est ADD DR,SR1,SR2 o DR, SR1 et SR2 sont les trois registres destination, source 1 et source 2. Une seconde forme est ADD DR,SR1,Imm5 o DR et SR1 sont deux registres destination et source et Imm5 est une constante signe sur 5 bits. Le codage de linstruction ADD est le suivant. Les quatre premiers bits de numros 15 12 contiennent lop-code 0001 de linstruction ADD. Les trois bits suivants de numros 11 9 contiennent le numro du registre destination DR. Les trois bits suivants de numros 8 6 contiennent le numro du registre source SR1. Les six derniers bits contiennent le codage du troisime paramtre SR2 ou Imm5. Le premier de ces six bits de numro 5 permet de distinguer entre les deux formes de linstruction. Il vaut 0 pour la premire forme et 1 pour la seconde forme. Dans la premire forme, les bits de numros 2 0 contiennent le numro du registre SR2 et les bits de numros 4 et 3 sont inutiliss et forcs 0. Dans la seconde forme, les cinq derniers bits de numro 4 0 contiennent la constante Imm5. Le tableau ci-dessous donne un exemple de codage pour chacune des formes de linstruction ADD. Instruction Op-code ADD R2,R7,R5 ADD R6,R6,-1 0001 Op-code 0001 Codage 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DR 010 DR 110 SR1 0 0 0 SR2 111 0 00 101 SR1 1 Imm5 0x1DBF 110 1 11111 0x16C5 Code en hexa

10.5.2 Codage de BR
Le codage de linstruction BR est le suivant. Les quatre premiers bits de numros 15 12 contiennent lop-code 0000 de linstruction BR. Les trois bits suivants de numros 11 9 dterminent respectivement si lindicateur n, z et p est pris en compte dans la condition. Si ces trois bits sont b 11 , b 10 et b 9 , la condition cond est donne par la formule suivante. cond = (b 11 n) (b 10 z) (b 9 p) Les 9 derniers bits de numros 8 0 codent loffset du branchement. Si les trois bits b 11 , b 10 et b 9 valent 1, la condition est toujours vrifie puisque n + z + p = 1. Il sagit alors de linstruction de branchement inconditionnel BR. Si au contraire les trois bits b 11 , b 10 et b 9 valent 0, la condition nest jamais vrifie et le branchement nest jamais pris. Il sagit alors de linstruction NOP qui ne fait rien. En prenant un offset gal 0, le code de linstruction NOP est 0x0000. Le tableau ci-dessous donne un exemple de codage pour trois formes typiques de linstruction BR. Dans les exemples ci-dessous, on a donn des valeurs explicites aux offsets afin dexpliquer leur codage mais cela ne correspond pas la faon dont linstruction BR est utilise dans les programmes.

- 74 -

Instruction Op-code BRnz -137 BR 137 NOP 0000 0000 0000

Codage 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 n z p PCoffset9 1 0 1 101110111 1 1 1 010001001 0 0 0 000000000

Code en hexa

0x0B77 0x0E89 0x0000

10.5.3 Rpartition des op-code


On peut remarquer les op-code des instructions nont pas t affects de manire alatoire. On peut mme observer une certaine rgularit qui facilite le dcodage. Les op-code des instructions de chargement et de rangement qui se correspondent (LD et ST, LDR et STR, ) ne diffrent que dun seul bit. MSB 00 00 01 10 11 BR LSB 01 ADD 10 LD 11 ST STR STI

JSR(R) AND LDR RTI JMP NOT LDI

LEA TRAP

10.6 Schma interne du LC-3


Le schma ci-dessous donne une ralisation du processeur LC-3 avec les diffrents lments : registres, ALU, unit de contrle, . Les dtails des entres/sorties sont donns dans un schma ultrieur.

- 75 -

Chemins de donnes du LC-3

- 76 -

11 Programmation du LC-3
11.1 Programmation en assembleur
La programmation en langage machine est rapidement fastidieuse. Il est inhumain de se souvenir du codage de chacune des instructions dun micro-processeur mme simplifi lextrme comme le LC-3 et a fortiori encore plus pour un micro-processeur rel. Le langage dassemblage ou assembleur par abus de langage rend la tche beaucoup plus facile mme si cette programmation reste longue et technique. Lassembleur est un programme qui autorise le programmeur crire les instructions du micro-processeur sous forme symbolique. Il se charge de traduire cette criture symbolique en codage hexadcimal ou binaire. Il est beaucoup plus ais dcrire ADD R6,R1,R2 plutt que 0x1C42 en hexadcimal ou encore 0001 1100 0100 0010 en binaire. Lassembleur permet aussi lutilisation dtiquettes symboliques pour dsigner certaines adresses. Ltiquette est associe une adresse et peut alors tre utilise dans dautres instructions. On peut par exemple crire un morceau de code comme ci-dessous.
label: ... ADD R6,R1,R2 ... BRz label ...

Ltiquette label est alors associe ladresse ou se trouvera linstruction ADD R6,R1,R2 lors de lexcution du programme. Cette adresse est alors utilise pour calculer le codage de linstruction BRz label. Comme le codage de linstruction BR contient un offset, lassembleur calcule la diffrence entre les adresses des deux instructions ADD R6,R1,R2 et BRz label et place cette valeur dans les 9 bits de poids faible du codage de BRz.

11.1.1 Syntaxe
La syntaxe des programmes en assembleur est la mme pour tous les assembleurs quelques dtails prs. Les instructions dun programme en assembleur sont mises dans un fichier dont le nom se termine par lextension .asm. Chaque ligne du fichier contient au plus une instruction du programme. Chaque ligne est en fait divise en deux champs qui peuvent chacun ne rien contenir. Le premier champ contient une tiquette et le second champ une instruction. Linstruction est forme de son nom symbolique appel mnmonique et dventuel paramtres. Les espaces sont uniquement utiles comme sparateurs. Plusieurs espaces sont quivalents un seul. Les programmes sont indents de telle manire que les tiquettes se trouvent dans une premire colonne et les instructions dans une seconde colonne. Linstruction peut tre remplace dans une ligne par une directive dassemblage. Les directives dassemblage permettent de donner des ordres lassembleur. Elles sont lquivalent des directives commenant par # comme #include ou #if du langage C.

- 77 -

11.1.1.1 Constantes
Il existe deux types de constantes : les constantes entires et les chanes de caractres. Les chanes de caractres peuvent uniquement apparatre aprs la directive .STRINGZ. Elles sont alors dlimites par deux caractres " comme dans "Exemple de chaine" et sont implicitement termines par le caractre nul \0. Les constantes entires peuvent apparatre comme paramtre des instructions du LC3 et des directives .ORIG, .FILL et .BLKW. Elle peuvent tre donnes soit sous la forme dun entier crit dans la base 10 ou 16 sous la forme dun caractre. Les constantes crite en base 16 sont prfixes par le caractre x. Lorsque la constante est donne sous forme dun caractre, sa valeur est le code ASCII du caractre. Le caractre est alors entour de caractres comme dans Z.
; Exemple de constantes .ORIG x3000 ; AND R2,R1,2 ; ADD R6,R5,-1 ; .FILL Z ; .STRINGZ "Chaine" .END Constante entire en base 16 Constante entire en base 10 Constante entire ngative en base 10 Constante sous forme dun caractre ; Constante chane de caractres

11.1.1.2 Commentaires
Les commentaires sont introduits par le caractre point-virgule ; et il stendent jusqu la fin de la ligne. Ils sont mis aprs les deux champs dtiquette et dinstruction mais comme ces deux champs peuvent tre vides, les commentaires peuvent commencer ds le dbut de la ligne ou aprs ltiquette. Voici quelques exemples de commentaires
; Commentaire ds le dbut de la ligne label: ADD R6,R1,R2 ; Commentaire aprs linstruction loop: BRz label ; Commentaire aprs ltiquette (avec indentation)

11.1.2 Directives dassemblage


.ORIG adresse Cette directive est suivi dune adresse constante. Elle spcifie ladresse laquelle doit commencer le bloc dinstructions qui suit. Tout bloc dinstructions doit donc commencer par une directive .ORIG. .END Cette directive termine un bloc dinstructions. .FILL valeur Cette directive rserve un mot de 16 bits et le remplit avec la valeur constante donne en paramtre. .STRINGZ chaine Cette directive rserve un nombre de mots de 16 bits gal la longueur de la chane de caractres termine par un caractre nul et y place la chane. Chaque caractre de la chane occupe un mot de 16 bits. .BLKW nombre Cette directive rserve le nombre de mots de 16 bits pass en paramtre.

- 78 -

11.1.3 tiquettes (labels) 11.2 Exemples de programmes


On tudie dans cette partie quelques exemples de programmes (trs) simples afin dillustrer quelques techniques classiques de programmation en langage machine. Les codes complets de ces programmes ainsi que dautres sont disponibles ci-dessous Longueur dune chane de caractres Tours de hano Mutiplication non signe Mutiplication signe Multiplication logarithmique Calcul du logarithme en base 2 Les programmes ci-dessous sont prsents comme des fragments de programmes puisque les routines nont pas encore t prsentes. Il faudrait les crire sous forme de routines pour une relle utilisation.

11.2.1 Longueur dune chane


On commence par rappeler le programme en C pour calculer la longueur dune chane de caractres termine par \0.
int strlen(char* p) { int c = 0; while (*p != \0) { p++; c++; } return c; }

Le programme ci-dessous calcule la longueur dune chane de caractres termine par le caractre nul \0. Le registre R0 est utilis comme pointeur pour parcourir la chane alors que le registre R1 est utilis comme compteur.
; @param R0 adresse de la chaine ; @return R1 longueur de la chane .ORIG x3000 LEA R0,chaine ; Chargement dans RO de ladresse de la chane AND R1,R1,0 ; Mise 0 du compteur : c = 0 loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0 BRz fini ; Test de fin de chane ADD R0,R0,1 ; Incrmentation du pointeur : p++ ADD R1,R1,1 ; Incrmentation du compteur : c++ BR loop fini: NOP chaine: .STRINGZ "Hello World" .END

Le programme C pour calculer la longueur dune chane de caractres peut tre crit de manire diffrente en utilisant larithmtique sur les pointeurs.

- 79 -

int strlen(char* p) { char* q = p; while (*p != \0) p++; return p-q; }

Ce programme C se transpose galement en langage dassembleur. Le registre R0 est encore utilis comme pointeur pour parcourir la chane et le registre R1 sauvegarde la valeur initiale de R0. Il contient en fait loppos de la valeur initiale de R0 afin de calculer la diffrence. Ce programme a le lger avantage dtre plus rapide que le prcdent car la boucle principale contient une instruction de moins.
; @param R0 adresse de la chaine ; @return R0 longueur de la chane .ORIG x3000 LEA R0,chaine ; Chargement dans RO de ladresse de la chane NOT R1,R0 ; R1 = -R0 ADD R1,R1,1 loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0 BRz fini ; Test de fin de chane ADD R0,R0,1 ; Incrmentation du pointeur : p++ BR loop fini: ADD R0,R0,R1 ; Calcul de la diffrence q-p chaine: .STRINGZ "Hello World" .END

11.2.2 Nombre doccurrences dun caractre dans une chane


Le programme ci-dessous calcule le nombre doccurrences dun caractre donn dans une chane de caractres termine par le caractre nul \0. Le registre R0 est utilis comme pointeur pour parcourir la chane. Le registre R1 contient le caractre recherch et le registre R2 est utilis comme compteur. La comparaison entre chaque caractre de la chane et le caractre recherch est effectue en calculant la diffrence de leurs codes et en testant si celle-ci est nulle. Dans ce but, le programme commence par calculer loppos du code du caractre recherch afin de calculer chaque diffrence par une addition.
; @param R0 adresse de la chaine ; @param R1 carectre ; @return R2 longueur de la chane .ORIG x3000 LEA R0,chaine ; Chargement dans RO de ladresse de la chane LD R1,caract ; Chargement dans R1 du code ASCII de l AND R2,R2,0 ; Mise 0 du compteur NOT R1,R1 ; Calcul de loppos de R1 ADD R1,R1,1 ; R1 = -R1 loop: LDR R3,R0,0 ; Chargement dans R3 du caractre point par R0 BRz fini ; Test de fin de chane ADD R3,R3,R1 ; Comparaison avec l BRnp suite ; Non galit ADD R2,R2,1 ; Incrmentation du compteur suite: ADD R0,R0,1 ; Incrmentation du pointeur BR loop

- 80 -

fini: NOP chaine: .STRINGZ "Hello World" caract: .FILL l .END

11.2.3 Multiplication
Tous le micro-processeurs actuels possdent une multiplication cble pour les entiers et pour les nombres flottants. Comme les premiers micro-processeurs, le LC-3 na pas de telle instruction. La multiplication doit donc tre ralise par programme. Les programmes ci-dessous donnent quelques implmentation de la multiplication pour les entiers signs et non signs.

11.2.3.1 Multiplication nave non signe


On commence par une implmentation trs nave de la multiplication qui est effectue par additions successives. On commence par donner une implmentation sous forme de programme C puis on donne ensuite une traduction en langage dassembleur.
// Programme sous forme dune fonction en C int mult(int x, int n) { int r = 0; // Rsultat while(n != 0) { r += x; n--; } return r; }

Dans le programme ci-dessous, les registres R0 et R1 contiennent respectivement x et n. Le registre R2 contient les valeurs successives de r.
; @param R0 x ; @param R1 n ; @return R2 x n .ORIG x3000 AND R2,R2,0 AND R1,R1,R1 BRz fini loop: ADD R2,R2,R0 ADD R1,R1,-1 BRnp loop fini: NOP .END

; r = 0 ; Mise jour de lindicateur z pour le test ; r += x ; n-; Boucle si n != 0

11.2.3.2 Multiplication nave signe


Le programme prcdent fonctionne encore si la valeur de x est ngative. Par contre, il ne fonctionne plus si la valeur de n est ngative. Les dcrmentations successives de n ne conduisent pas 0 en le nombre dtapes voulues. Le programme suivant rsout ce problme en inversant les signes de x et n si n est ngatif. Ensuite, il procde de manire identique au programme prcdent.
; @param R0 x ; @param R1 n ; @return R2 x n .ORIG x3000 AND R2,R2,0 AND R1,R1,R1

; r = 0 ; Mise jour de lindicateur z pour le test

- 81 -

loop:

fini:

BRz fini BRp loop ; Changement de signe de x et n NOT R0,R0 ; x = -x ADD R0,R0,1 NOT R1,R1 ; n = -n ADD R1,R1,1 ADD R2,R2,R0 ; r += x ADD R1,R1,-1 ; n-BRnp loop ; Boucle si n != 0 NOP .END

11.2.3.3 Mutiplication logarithmique non signe


Le problme majeur des deux programmes prcdents est leur temps dexcution. En effet, le nombre ditrations de la boucle est gal la valeur de R1 et le temps est donc proportionnel cette valeur. Le programme ci-dessous donne une meilleure implmentation de la multiplication de nombres non signs. Ce programme pourrait tre tendu aux nombres signs de la mme faon que pour limplmentation nave. Son temps dexcution est proportionnel au nombre de bits des registres. On commence par donner un algorithme rcursif en C pour calculer une multiplication qui est inspir de lexponentiation logarithmique.
// Programme sous forme dune fonction rcursive en C // Calcul de x * n de faon logarithmique float mult(float x, int n) { if (n == 0) return 0; // Calcul anticip de la valeur pour n/2 afin // davoir un seul appel rcursif. float y = mult(x, n/2); if (n%2 == 0) return y + y; else return y + y + x; }

Pour viter dcrire un programme rcursif, on exprime le problme dune autre faon. On suppose que lcriture binaire du contenu de R1 est b k-1 b 0 o k est le nombre de bits de chaque registre, cest--dire 16 pour le LC-3. On a alors la formule suivante qui exprime le produit x n avec uniquement des multiplications par 2 et des additions. Cette formule est trs semblable au schma de Horner pour valuer un polynme. x n = ((((xb k-1 2 + xb k-2 )2 + xb k-3 )2 + )2 + xb 1 )2 + xb 0 . On note x 1 , , x k les rsultats partiels obtenus en valuant la formule ci-dessus de la gauche vers la droite. On pose x 0 = 0 et pour 1 j k, le nombre x j est donn par la formule suivante. x j = ((((xb k-1 2 + xb k-2 )2 + xb k-3 )2 + )2 + xb k-j+1 )2 + xb k-j . Le nombre x k est gal au produit x n. Il est de plus facile de calculer x j en connaissant x j-1 et b k-j . On a en effet les relations suivantes.

- 82 -

x j = 2x j-1 si b k-j = 0 x j = 2x j-1 + x si b k-j = 1 Le programme suivant calcule le produit x n en partant de x 0 = 0 puis en calculant de proche en proche les nombres x j grce aux formules ci-dessus. Les registres R0 et R1 contiennent respectivement x et n. Le registre R2 contient les valeurs successives x 0 , , x k et le registre R3 est utilis comme compteur. Pour accder aux diffrents bits b k-1 , , b 0 de n, on utilise le procd suivant. Le signe de n vu comme un entier sign donne la valeur de b k-1 . Ensuite, lentier n est dcal vers la gauche dune position chaque itration. Le signe des contenus successifs de R2 donne les valeurs b k-2 , , b 0 .
; @param R0 x ; @param R1 n ; @return R2 x n .ORIG x3000 AND R2,R2,0 LD R3,cst16 AND R1,R1,R1 BRzp bit0 bit1: ADD R2,R2,R0 bit0: ADD R3,R3,-1 BRz fini ADD R2,R2,R2 ADD R1,R1,R1 BRn bit1 BR bit0 fini: NOP cst16: .FILL 16 .END

; Initialisation x 0 = 0 ; Initialisation du compteur

; Addition de x si b k-j = 1 ; Dcrmentation du compteur ; Calcul de 2x j-1 ; Dcalage de n vers la gauche

11.2.4 Addition 32 bits


Dans la majorit des micro-processeurs rels, il y a outre les flags n, z et p un flag c qui reoit la retenue (Carry) lors dune addition par une instruction ADD. Cela permet de rcuprer facilement cette retenue en testant le flag c. Certains micro-processeurs possdent aussi une instruction ADC qui ajoute au rsultat de laddition la valeur du flag c. Ceci permet denchaner facilement des additions pour faire des calculs sur des entiers cods sur plusieurs mots. Le micro-processeur LC-3 na pas de telles facilits et il faut donc exploiter au mieux ses possibilits.
; @param R1,R0 poids fort et poids faible du premier argument ; @param R3,R2 poids fort et poids faible du second argument ; @return R5,R4 poids fort et poids faible du rsultat .ORIG x3000 ; Addition des poids faibles ADD R4,R2,R0 ; Addition des poids forts ADD R5,R3,R2 ; Test sil y a une retenue sur les poids faibles AND R0,R0,R0 BRn bit1 ; Cas o le bit de poids fort de R0 est 0 AND R2,R2,R2 ; Si les deux bits de poids fort de R1 et R0 sont 0, ; il ny a pas de retenue. BRzp fini

- 83 -

; Si un seul des deux bits de poids fort de R1 et R0 est 1, ; il faut tester le bit de poids fort de R4 pour savoir ; sil y a eu une retenue. testR4: AND R4,R4,R4 BRzp carry BR fini ; Cas o le bit de poids fort de R0 est 1 bit1: AND R2,R2,R2 ; Si le bit de poids fort de R1 est 0, on est ramen au cas ; un seul des deux bits de poids fort de R1 et R0 est 1. BRzp testR4 ; Si les deux bits de poids fort de R1 et R0 sont 1, ; il y a ncessairement une retenue. ; Correction de la retenue carry: ADD R5,R5,1 fini: NOP .END

11.2.5 Conversion en hexa du contenu dun registre


; @param R0 valeur convertir ADD R1,R0,0 ; ld R2,cst4 ; loopo: ld R3,cst4 ; ; Rotation de 4 bits loopi: AND R1,R1,R1 BRn $1 ADD R1,R1,R1 BR $2 $1: ADD R1,R1,R1 ADD R1,R1,1 $2: ADD R3,R3,-1 BRp loopi ; Recupration de 4 bits AND R0,R1,0xf ADD R0,R0,-0xa BRn $3 ; Chiffres de 0 9 ld R3,cst40 ; BR $4 ; Chiffres de A F $3: ld R3,cst51 ; $4: ADD R0,R0,R3 TRAP 0x21 ; ADD R2,R2,-1 BRp loopo NOP TRAP 0x25 ; cst4: .fill 4 cst40: .fill 0x40 cst51: .fill 0x51 R1 <- R0 Nombre de caractres Nombre de bits par caractre

0x40 = 0 + 0xa

0x51 = A + 0xa Affichage

Arrt

- 84 -

12 Les sous-routines et la pile


12.1 Instruction JMP
Linstruction JMP permet de transfrer lexcution du programme une adresse contenue dans un des 8 registres R0,,R7. Ce genre dinstruction est ncessaire tout programme qui gre dynamiquement les appels de fonction. Cest le cas de tout programme en C qui manipule des pointeurs sur des fonctions. Cest aussi le cas des langages objets comme C++ dont les objets contiennent une table des mthodes sous forme de pointeurs de fonctions. Dans le cas du LC-3, cette instruction permet de compenser la faiblesse de linstruction BR qui peut uniquement sauter une adresse loigne dau plus 256 mots (loffset est cod sur 9 bits en complment 2). Linstruction JMP est aussi indispensable pour raliser les retours de sous-routine comme nous allons le voir. La ralisation dune boucle se fait par exemple de la manire suivante.
LD R0,nbiter ; Boucle loop: ... ... ADD R0,R0,-1 BRp loop ; Suite du programme ... ; Nombre ditrations de la boucle ; Dbut de la boucle ; Dcrmentation du compteur ; Retour au dbut de la boucle

12.2 Sous-routines 12.2.1 Appel


Lorsquun programme appelle une sous-routine, il faut dune certaine manire mmoriser ladresse laquelle doit revenir sexcuter le programme la fin de la routine. Dans le micro-processeur LC-3, ladresse de retour, cest--dire ladresse de linstruction suivante est mise dans le registre R7 lors dun appel de sous-routine. Ce registre a donc un rle particulier. Il existe deux instructions JSR et JSRR permettant dappeler une sous-routine. Linstruction JSR est semblable linstruction BR de branchement inconditionnel. Il ny a pas de variante conditionnelle de linstruction JSR. Les trois bits utiliss pour la condition dans le codage linstruction BR sont rcuprs pour avoir un offset de 11 bits au lieu de 9 bits pour BR. Un bit est aussi ncessaire pour distinguer JSR et JSRR qui utilisent le mme op-code (cf. codage des instructions du LC-3). Ladresse de la sous-routine est stocke dans le code linstruction sous-forme dun offset de 11 bits. Linstruction JSRR est semblable linstruction JMP. Elle permet dappeler une sous-routine dont ladresse est contenue dans un des 8 registres. Cette deux instructions ont en commun de transfrer la valeur du compteur de programme PC incrment (adresse de linstruction suivante) dans le registre R7 avant de charger PC avec ladresse de la sous-routine.

12.2.2 Retour
Lors dun appel une sous-routine, ladresse de retour est mise dans le registre R7. La sous-routine se termine donc par un saut cette adresse avec linstruction JMP R7. Cette instruction peut aussi tre dsigne par le mnmonique RET.

- 85 -

; Appel de la sous-routine sub ... JSR sub ; Adresse de linstruction suivante dans R7 ... ; Sous-routine sub sub: ... ... RET

; JMP R7

12.2.3 Exemple
On reprend le fragment de programme pour calculer la longueur dune chane sous la forme dune sous-routine appele par un programme principal.
.ORIG x3000 ; Programme principal ... ; Premier appel LEA R0,chaine ; Chargement dans RO de ladresse de la chane JSR strlen ; Appel de la sous-routine ... ; Autre appel JSR strlen ... ; Chaine chaine: .STRINGZ "Hello World" .END ; Sous-routine pour calculer la longueur dune chane termine par \0 ; @param R0 adresse de la chaine ; @return R0 longueur de la chane ; Ladresse de retour est dans R7 strlen: AND R1,R1,0 ; Mise 0 du compteur : c = 0 loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0 BRz fini ; Test de fin de chane ADD R0,R0,1 ; Incrmentation du pointeur : p++ ADD R1,R1,1 ; Incrmentation du compteur : c++ BR loop fini: ADD R0,R1,0 ; R0 = R1 RET ; Retour par JMP R7

La routine strlen utilise le registre R1 pour effectuer ses calculs. Si le programme principal utilise galement ce registre R1, le contenu de ce registre doit tre sauvegard pendant lappel strlen. Cette question est aborde ci-dessous.

12.3 Sauvegarde des registres


Les registres du micro-processeur LC-3 sont en nombre limit. Lorsque quune routine a besoin de registres pour faire des calculs intermdiaires, il est prfrable de sauvegarder le contenu de ces registres. Cela vite de dtruire le contenu du registre qui est peut-tre utilis par le programme appelant la routine. En particulier si une routine doit appeler une autre sous-routine, elle doit prserver le registre R7 qui contient ladresse de retour.

- 86 -

12.3.1 Registres
Une routine sub qui appelle une autre routine subsub peut utiliser un registre, par exemple R5 pour sauvegarder le registre R7 qui contient ladresse de retour de sub. Cette mthode donne un code efficace car il nutilise que les registres. Par contre, on arrive rapidement cours de registres. Il faut donc utiliser dautres techniques.
sub: ADD R5,R7,0 ... JSR subsub ... ADD R7,R5,0 RET ; Sauvegarde de R7 dans R5

; Restauration de R7

subsub: ... RET

12.3.2 Emplacements mmoire rservs


Une autre mthode consiste rserver des emplacements mmoire pour la sauvegarde des registres pendant lexcution dune routine. Les contenus des registres sont rangs dans ces emplacements au dbut de la routine et ils sont restaurs la fin de celle-ci. Cette mthode a deux inconvnients majeurs. Dune part, elle ncessite de rserver de la mmoire pour chaque routine. Cela peut gaspiller beaucoup de mmoire si le programme est consquent. De plus, lespace rserv pour les routines non appeles est perdu. Dautre part, cette mthode conduit du code qui nest pas rentrant.
; Sous-routine sub sauvegardant R0 et R1 sub: ST R0,saveR0 ; Sauvegarde de R0 ST R1,saveR1 ; Sauvegarde de R1 ... LD R1,saveR1 LD R0,saveR0 RET saveR0: .BLKW 1 saveR1: .BLKW 1 ; Corps de la procdure ; Restauration de R1 ; Restauration de R0 ; Emplacement de sauvegarde de R0 ; Emplacement de sauvegarde de R1

; Appel de la sous-routine ; Le registre R7 est dtruit JSR sub

12.3.3 Utilisation dune pile


La meilleure mthode est dutiliser une pile. Cela lapparente la mthode des emplacements rservs mais dans le cas dune pile, cest un espace global qui est partag par toutes les sous-routines. Par contre, cette mthode ncessite de rserver un des registres la gestion de la pile. Dans le cas du micro-processeur LC-3, cest le registre R6 qui est gnralement utilis.

- 87 -

Pile en mmoire

12.3.3.1 Utilisation du registre R6


Le registre R6 est utilis comme pointeur de pile. Pendant toute lexcution du programme, le registre R6 donne ladresse de la dernire valeur mise sur la pile. La pile crot vers les adresses dcroissantes. Nimporte quel autre registre (hormis R7) aurait pu tre utilis mais il est prfrable dutiliser R6 en cas dinterruption.

12.3.3.2 Empilement dun registre


Un empilement est ralis en dplaant vers les adresses basses le pointeur de pile pour le faire pointer sur le premier emplacement libre. Ensuite le contenu du registre y est rang en employant un rangement avec adressage relatif avec offset de 0.
ADD R6,R6,-1 STR Ri,R6,0 ; Dplacement du haut de pile ; Rangement de la valeur

12.3.3.3 Dpilement dun registre


Le dpilement est bien sr lopration inverse. Le contenu du registre est rcupr avec un chargement avec adressage relatif. Ensuite le pointeur de pile est incrment pour le faire pointer sur le haut de la pile.
LDR Ri,R6,0 ADD R6,R6,1 ; Rcupration de la valeur ; Restauration du haut de pile

Aucune vrification nest faite pour savoir si la pile dborde. Il appartient au programmeur de vrifier que dans chaque routine, il effectue autant de dpilements que dempilements.

12.3.3.4 Empilement ou dpilement de plusieurs registres


Lors de lempilement ou du dpilement de plusieurs registres, loffset de ladressage relatif permet de faire en une seule instruction les diffrentes incrmentations ou dcrmentations du registre de pile. Lempilement des registres R0, R1 et R2 (dans cet ordre peut par exemple tre ralis de la manire suivante.

- 88 -

ADD STR STR STR

R6,R6,-3 R0,R6,2 R1,R6,1 R2,R6,0

; ; ; ;

Dplacement du haut de pile Empilement de R0 Empilement de R1 Empilement de R2

Le fait de placer la dcrmentation du registre de pile R6 avant de placer les contenus des registres R0, R1 et R2 sur la pile nest pas anodin. Il semble premire vue que linstruction ADD R6,R6,-3 pourrait tre place aprs les trois instructions STR en changeant bien sr les offsets utiliss par ces trois dernires par les valeurs -1, -2 et -3. Ceci est en fait faux. Si une interruption survient entre le placement des contenus des registres sur la pile et la dcrmentation de R6, le contenu de la pile peut tre altr par de valeurs que linterruption mettrait sur la pile. Le fait de dcrmenter dabord R6 peut tre considr comme une faon de rserver sur la pile les emplacements pour les contenus de R0, R1 et R2. Dans le cas du LC-3, les programmes utilisateur sont en quelque sorte protgs de ce type de problmes car les interruptions utilisent la pile systme qui est distincte de la pile utilisateur. Par contre, le code excut en mode privilgi doit respecter cette contrainte. Le dpilement des registres R2, R1 et R0 se fait la mme manire. Lordre des trois dpilements effectus par les instructions LDR nest pas impos. Le rsultat serait le mme en les mettant dans un ordre diffrent. Par contre, on a respect lordre inverse des empilements pour bien montrer quil sagit de lutilisation dune pile.
LDR LDR LDR ADD R0,R6,2 R1,R6,1 R2,R6,0 R6,R6,3 ; ; ; ; Dpilement de R0 Dpilement de R1 Dpilement de R2 Restauration du haut de pile

La raison pour laquelle lincrmentation de R6 est place aprs le chargement des registres avec les valeurs sur la pile est identique la raison pour laquelle la dcrmentation de R6 est place avant le placement des contenus des registres sur la pile. La pile permet en particulier dchanger les contenus de deux registres sans utiliser de registre supplmentaire autre que le pointeur de pile R6. Le morceau de code suivant change par exemple les contenus des registres R1 et R2.
ADD STR STR LDR LDR ADD R6,R6,-2 R1,R6,1 R2,R6,0 R2,R6,1 R1,R6,0 R6,R6,2 ; ; ; ; ; ; Dplacement du haut de pile Empilement de R1 Empilement de R2 Dpilement du contenu de R1 dans R2 Dpilement du contenu de R2 dans R1 Restauration du haut de pile

Si un micro-processeur possde une opration de ou exclusif bit bit appele XOR, lchange des contenus de deux registres peut aussi se faire de la manire complique suivante.
XOR R1,R1,R2 XOR R2,R1,R2 XOR R1,R1,R2 ; ; ; ; R1 R1 R1 R1 : : : : x x ^ y x ^ y y R2 R2 R2 R2 : : : : y y x x

12.3.3.5 Appels de sous-routine imbriqus


Dans le cas dappels de sous-routine imbriqus, cest--dire dune sous-routine sub appelant une (autre) sous-routine subsub, il est ncessaire de sauvegarder sur la pile ladresse de retour de sub contenue dans le registre R7. lappel de la seconde sous-routine subsub, le registre R7 reoit ladresse de retour de celle-ci et son contenu prcdent est cras.

- 89 -

sub:

ADD STR STR ... JSR ... LDR LDR ADD RET

R6,R6,-2 R7,R6,1 R0,R6,0 subsub R0,R6,0 R7,R6,1 R6,R6,2

; Sauvegarde sur la pile de ; - ladresse de retour ; - registre R0

; ; ; ;

Restauration de la pile de - registre R0 - ladresse de retour Retour par JMP R7

subsub: ...

; R7 contient ladresse de retour ; cest--dire ladresse de linstruction ; suivant JSR subsub ; Retour par JMP R7

RET

12.3.3.6 Initialisation de la pile


Linitialisation de la pile se fait en mettant dans le registre R6 ladresse du haut de la pile. Il sagit en fait de ladresse du premier emplacement mmoire aprs lespace rserv la pile. Comme tout utilisation de la pile commence par dcrmenter le registre R6, cet emplacement nest normalement jamais utilis par la pile.
; Initialisation de la pile au dbut du programme psp: .FILL stackend main: LD R6,psp ; quivalent LEA R6,stackend ...

; Rservation de lespace pour la pile .ORIG 0x6000 .BLKW 0x100 ; Taille de la pile : 256 octets stackend: ; Adresse de mot mmoire suivant

12.4 Programmation
Pour illustrer lutilisation de la pile, un programme rcursif (source) calculant la solution du problme des tours de Hano est donn ci-dessous.
; Tours de Hano .ORIG x3000 ; Programme principal ; Le pointeur de pile R6 est initialis par le simulateur hanoim: LD R0,nbrdisk ; Nombre de disques LD R1,startst ; Piquet de depart LD R2,endst ; Piquet darrive JSR hanoi TRAP x25 ; HALT ; Constantes nbrdisk:.FILL 3 ; Nombre de disques startst:.FILL 1 ; Piquet de depart endst: .FILL 2 ; Piquet darrive ; Calcul ; @param ; @param ; @param hanoi: du R0 R1 R2 piquet nombre piquet piquet intermdiaire avant de lancer la procdure rcursive de disques de dpart darrive

- 90 -

; Calcul du troisime piquet : R3 = 6 - R1 - R2 ADD R3,R2,R1 NOT R3,R3 ADD R3,R3,7 ; 7 = 6 + 1 ; Procdure rcursive ; @param R0 nombre de disques ; @param R1 piquet de dpart ; @param R2 piquet darrive ; @param R3 piquet intermdiaire hanoirec: ; Dcrmentation du nombre de piquets ADD R0,R0,-1 ; Test si le nombre de piquets est 0 BRn hanoiend ; Empilement de ladresse de retour ADD R6,R6,-1 STR R7,R6,0 JSR swapR2R3 JSR hanoirec JSR swapR2R3 JSR print JSR swapR1R3 JSR hanoirec JSR swapR1R3 ; Dpilement de ladresse de retour LDR R7,R6,0 ADD R6,R6,1 ; Restauration du nombre de piquets hanoiend: ADD R0,R0,1 RET ; change des contenus de R1 et R3 swapR1R3: ADD R4,R3,0 ADD R3,R1,0 ADD R1,R4,0 RET ; change des contenus de R2 et R3 swapR2R3: ADD R4,R3,0 ADD R3,R2,0 ADD R2,R4,0 RET ; Affichage de R1 -> R2 print: ; Empilement de R7 et R0 ADD R6,R6,-2 STR R7,R6,1 STR R0,R6,0 ; Affichage du caractre 0 + R1 LD R0,char0 ADD R0,R0,R1 TRAP x21 ; Appel systme putc ; Affichage de la chane " --> " LEA R0,arrow TRAP x22 ; Appel systme puts ; Affichage du caractre 0 + R2 LD R0,char0 ADD R0,R0,R2 TRAP x21 ; Appel systme putc

- 91 -

; Retour la ligne LD R0,charnl TRAP x21 ; Appel systme putc ; Dpilement de R0 et R7 LDR R0,R6,0 LDR R7,R6,1 ADD R6,R6,2 RET ; Constantes pour laffichage char0: .FILL 0 charnl: .FILL \n arrow: .STRINGZ " --> " .END

12.5 Comparaison avec dautres micro-processeurs


Beaucoup de micro-processeurs (surtout CISC comme le 80x86) possdent un registre, gnralement appel SP, ddi la gestion de la pile. Il y a alors des instructions spcifiques pour manipuler manipuler la piles. La pile est alors systmatiquement utilise pour les appels des sous-routines. Certaines instructions permettenent en effet les appels et les retours de sous-routines. Dautres instruction permettent dempiler ou de dpiler un ou plusieurs registres afin de simplifier la sauvegarde des registres.

12.5.1 Instructions CALL et RET


Les instructions dappels de sous-routine empilent alors ladresse de retour plutt que de la mettre dans un registre particulier. Comme ladresse de retour dune sous-routine se trouve toujours sur la pile, il existe une instruction spcifique, gnralement appele RET pour terminer les sous-routines. Cette instruction dpile ladresse de retour puis la met dans le compteur de programme PC. Ceci explique pourquoi linstruction JMP R7 du LC-3 est aussi appele RET.

12.5.2 Instructions PUSH et POP


Les micro-processeurs ayant un registre ddi la pile possdent des instructions, gnralement appeles PUSH et POP permettant dempiler et de dpiler un registre sur la pile. Ces instructions dcrmentent et incrmentent automatiquement le registre de pile pour le mettre jour. Certains micro-processeurs comme le 80x86 ont mme des instructions permettant dempiler et de dpiler tous les registres ou un certain nombre dentre eux.

12.6 Appels systme


Linstruction TRAP permet de faire un appel au systme. Les mots mmoire des adresses 0x00 0xFF contiennent une table des appels systme. Chaque emplacement mmoire contient ladresse dun appel systme. Il y a donc 256 appels systme possibles. Linstruction TRAP contient le numro dun appel systme, cest--dire lindice dune entre de la table des appels systmes. Comme linstruction JSR, linstruction TRAP sauvegarde le compteur de programme PC dans le registre R7 puis charge PC avec lentre de la table des appels systme dont le numro est indiqu par linstruction. Le retour dun appel systme se fait par linstruction RET.

- 92 -

La table des appels systme procure une indirection qui a lintrt de rendre les programmes utilisateurs indpendant du systme. Dans la mesure o lorganisation (cest--dire la correspondance entre les numros de la table et les appels systme) de la table reste identique, il nest pas ncessaire de changer (recompiler) les programmes utilisateurs. Sur les micro-processeurs usuels, linstruction TRAP fait passer le micro-processeur en mode privilgi (aussi appel mode systme). Cest dailleurs souvent la seule instruction permettant de passer en mode privilgi. Ceci garantit que seul le code du systme dexploitation soit excut en mode privilgi. Par contre, il faut une instruction capable de sortir du mode privilgi avant deffectuer le retour au programme principal. Le processeur LC-3 ne possde pas de telle instruction.

12.7 Interruptions
Les interruptions sont un mcanisme permettant un circuit extrieur au micro-processeur dinterrompre le programme en cours dexcution afin de faire excuter une routine spcifique. Les interruptions sont en particulier utilises pour la gestion des entres/sorties et pour la gestion des processus.

12.7.1 Initiation dune interruption


Le micro-processeur possde une ou plusieurs broches permettant de recevoir des signaux provenant des circuits extrieurs susceptibles de provoquer des interruptions. Avant dexcuter chaque instruction, le micro-processeur vrifie sil y a un signal (de valeur 1) sur une de ces broches. Si aucun signal nest prsent, il continue le programme et il excute linstruction suivante. Si au contraire un signal est prsent, il interrompt le programme en cours et il commence excuter une sous-routine spcifique appele sous-routine dinterruption. Lorsque cette sous-routine se termine, le micro-processeur reprend lexcution du programme en cours linstruction o il en tait. Lexcution dune sous-routine dinterruption sapparente lexcution dune sous-routine du programme. Par contre elle nest initie par aucune instruction du programme. Elle est initie par le signal dinterruption et elle peut intervenir nimporte quel moment de lexcution du programme interrompu. Pour cette raison, cette sous-routine dinterruption ne doit modifier aucun des registres R0,,R6 et R7 du micro-processeur. De la mme faon, elle ne doit pas modifier aucun des indicateurs n, z et p car linterruption peut intervenir entre une instruction qui positionne ces indicateurs (comme LD et ADD) et une instruction de branchement conditionnel (comme BRz) qui les utilise.

12.7.2 Retour dune interruption


Afin de pouvoir revenir linstruction excuter, le micro-processeur doit sauvegarder le compteur de programme. Comme aucun registre ne peut tre modifi, le compteur de programme ne peut tre transfr dans le registre R7 comme les instructions JSR, JSRR et TRAP le font. Le compteur de programme est empil sur la pile ainsi que le registre PSR qui contient les indicateurs n, z et p. Ensuite le compteur de programme est charg avec ladresse de la routine dinterruption. La routine dinterruption se charge elle-mme dempiler les registres dont elle a besoin afin de les restaurer lorsquelle se termine. La routine dinterruption se termine par une instruction spcifique RTI (pour ReTurn Interrupt). Il faut dabord dpiler le registre PSR puis sauter linstruction dont ladresse est sur la pile. Comme le registre R7 doit tre prserv, linstruction RET ne peut tre utilise. Linstruction RTI se charge de dpiler PSR et de dpiler ladresse de retour pour la charger dans le registre PC.

- 93 -

12.7.3 Vecteurs dinterruption


Dans les micro-processeurs trs simples, ladresse de la routine dinterruption est fixe. Sil y a plusieurs circuits extrieurs susceptibles de provoquer une interruption, le premier travail de la routine dinterruption est de dterminer quel est le circuit qui a effectivement provoqu linterruption. Ceci est fait en interrogeant les registres dtat (Status Register) de chacun de ces circuits. Sil y a beaucoup de circuits pouvant provoquer une interruption, il peut tre long de dterminer lequel a provoqu linterruption. Comme le temps pour grer chaque interruption est limit, les micro-processeurs possdent plusieurs routines dinterruption. Chacune dentre elles gre un des circuits extrieurs. Comme pour les appels systmes, il existe une table des interruptions qui contient les adresses des diffrentes routines dinterruption. Pour le micro-processeur LC-3, celle-ci se trouve aux adresses de 0x100 0x1FF. Lorsquun circuit engendre une interruption, il transmet au micro-processeur via le bus de donnes un vecteur dinterruption. Ce vecteur est en fait lindice dune entre de la table des interruptions. Pour le micro-processeur LC-3, il sagit de la dune valeur 8 bits auquel le micro-processeur ajoute 0x100 pour trouver lentre dans la table. Chaque circuit externe reoit le vecteur dinterruption qui lui est attribu lors de son initialisation par le micro-processeur.

Tables des appels systmes et interruptions

12.7.4 Priorits
Dans le micro-processeur LC-3, chaque programme est excut avec une certaine priorit allant de 0 7. Celle-ci est stocke dans 3 bits du registre PSR. Lorsquune interruption est demande par un circuit extrieur, celle-ci a aussi une priorit. Elle est alors effectivement effectue si sa priorit est suprieure la priorit du programme en cours dexcution. Sinon, elle est ignore. Lorsquune interruption est accepte, la routine dinterruption est excute avec la priorit de linterruption. Cette priorit est mise dans le registre PSR aprs la sauvegarde de celui-ci sur la pile. la fin de la routine, linstruction RTI restaure le registre PSR en le dpilant. Le programme interrompu retrouve ainsi sa priorit. Il est possible quune demande dinterruption intervienne pendant lexcution dune autre routine dinterruption. Cette interruption est prise en compte si elle a une priorit suprieure celle en cours. Ce mcanisme permet de grer les urgences diffrentes des interruptions. Une interruption lie un

- 94 -

dfaut de cache est nettement plus urgente quune autre lie larrive dun caractre dun clavier.

Imbrications des interruptions

12.7.5 Contrleur dinterruption


Certains micro-processeurs comme le 8086 ne disposent que de deux interruptions. Chacune de ses deux interruptions correspond une broche du circuit du micro-processeur. Une premire interruption appele NMI (Non Maskable Interrupt) est une interruption de priorit maximale puisquelle ne peut pas tre ignore par le micro-processeur. Celle-ci est gnralement utilise pour les problmes graves comme un dfaut de mmoire. Une seconde interruption appele INTR est utilise par tous les autres circuits extrieurs. Afin de grer des priorits et une file dattente des interruptions, un circuit spcialis appel PIC (Programmable Interrupt Controler) est adjoint au micro-processeur. Ce circuit reoit les demandes dinterruption des circuits et les transmet au micro-processeur. Le micro-processeur dispose dune sortie INTA (Interrupt Acknowledge) pour indiquer au PIC quune interruption est traite et quil peut en envoyer une autre.

Contrleur dinterruptions

- 95 -

12.7.6 Sparation des piles systme et utilisateur


Pour plusieurs raisons, il est prfrable que la pile utilise par le systme soit distincte de la pile de chacun des programmes utilisateurs. Dabord, si un programme gre mal sa pile et que celle-ci dborde, cela nempche pas le systme de fonctionner correctement. Dautre part, si la pile est partage, un programme peut en inspectant sa pile trouver des informations de scurit quil ne devrait pas avoir. Pour ces raisons, le micro-processeur LC-3 permet dutiliser deux piles distinctes. Ceci est mis en uvre de la manire suivante. Le micro-processeur dispose de deux registres USP (User Stack Pointer) et SSP (System Stack Pointer) qui sauvegardent le registre R6 utilis comme pointeur de pile. Lorsque le micro-processeur LC-3 passe en mode privilgi (lors dune interruption), le registre R6 est sauvegard dans USP et R6 est charg avec le contenu de SSP. Lorsquil sort du mode privilgi, R6 est sauvegard dans SSP et R6 est charg avec le contenu de USP. Ce mcanisme impose bien sr que le pointeur de pile soit le registre R6.

- 96 -

13 Entres/Sorties
Un micro-processeur ne communique pas directement avec lextrieur. Toutes les entres/sorties se font par lintermdiaire de circuits spcialiss qui dchargent ainsi le processeur de certaines tches. Il existe des circuits spcialiss dans les diffrents types de connexions : srie, parallle, SCSI, IDE, USB, . Un circuit pour une connexion srie se charge par exemple de surveiller les signaux de la ligne et de le traduire en un octet disponible pour le processeur.

13.1 Adressage des circuits dentres/sorties


Ces diffrents circuits rsident sur la carte mre et communiquent avec le processeur par lintermdiaire du bus de donne. La communication est en gnral linitiative du micro-processeur. Hormis les exceptions, ces circuits se contentent de rpondre aux demandes du micro-processeur et dexcuter ses instructions. Les circuits les plus simples ont gnralement un registre de contrle et un registre de donne qui peuvent tre lus ou chargs par le micro-processeur. Le registre de contrle permet au micro-processeur de connatre ltat du circuit et ventuellement de le configurer. Le registre de donne permet lchange des donnes en entre et/ou en sortie. Le micro-processeur lit dans ce registre les donnes en entre et y crit les donnes en sortie.

Circuits dentres/sorties Afin de rpondre aux demandes du micro-processeur, les circuits doivent tre slectionns par celui-ci. Il existe deux mthodes classiques pour faire cet adressage. La premire mthode tait plutt utilise par les processeurs anciens alors que la seconde est plus frquente sur les micro-processeurs modernes. La premire mthode consiste sparer ladressage de la mmoire et ladressage des entres/sorties. En plus du bus de dadresse, il y a une ligne supplmentaire o le processeur indique sil sadresse la mmoire ou aux circuits dentres/sorties. Cette mthode a lavantage daugmenter dune certaine faon lespace dadressage. Cest pourquoi les premiers micro-processeurs lutilisaient car leur espace dadressage tait souvent rduit. Cette mthode a par contre linconvnient de ncessiter des instructions spcifiques pour accder aux circuits dentres/sorties.

- 97 -

Adressage distinct des circuits dentres/sorties La seconde mthode consiste rserver une partie de ladressage de la mmoire aux entres/sorties. On parle dentres/sorties en mmoire. Cette mthode rduit donc lespace dadressage disponible pour la mmoire mais ce nest pas gnant sur les micro-processeurs modernes qui disposent dun (trs) large espace dadressage. Elle permet aussi lutilisation des instructions de chargement et rangement pour accder aux circuits dentres/sorties et de bnficier ainsi des diffrents modes dadressage. Cette mthode est toujours utilise sur les micro-processeurs RISC car elle diminue le nombre dinstructions et simplifie le dcodage de celles-ci.

13.2 Scrutation des circuits dentres/sorties


Lorsquun circuit dentre/sortie a reu une donne, le micro-processeur doit venir la lire pour la rcuprer. Les buffers de ces circuits sont gnralement assez petits. Ceci implique que la donne doit tre lue rapidement. Sinon, des donnes qui arrivent risquent dtre perdues. Il existe essentiellement deux mthodes pour viter que des donnes soient perdues. La premire consiste faire en sorte que le micro-processeur interroge rgulirement les diffrents circuits dentre/sortie pour savoir si une donne est disponible. Cette mthode est la plus simple. Par contre, elle utilise beaucoup le micro-processeur mme quand il na aucune entre/sortie. La seconde utilise les interruption qui permettent aux circuit dentre/sortie de prvenir le micro-processeur lorsquune donne est disponible. Le micro-processeur interrompt alors la tche en cours pour lire la donne et la placer dans un buffer en mmoire o elle est mise en attente pour une tche.

13.3 Entres/Sorties du LC-3


Cdeux circuits dentre/sortie sont adjoints au micro-processeur. Le premier circuit permet de connecter un clavier et le second de le relier un terminal pour afficher du texte. Chacun de ces circuits peut par exemple tre un circuit pour une connexion srie. Le micro-processeur LC-3 utilise des entres/sorties en mmoire. Deux adresses mmoire sont rserves pour chacun des deux circuits dentres/sorties. Une premire adresse sert pour le registre de contrle et une seconde sert pour le registre de donne. Un permet circuit extrieur marqu Logic sur la figure ci-dessous dtermine si ladresse prsente dans le registre MAR (Memory Address Register) est une adresse en mmoire ou une adresse dun circuit dentre/sortie. Dans le premier cas, il active la mmoire. Dans le second cas, il active le circuit correspondant ladresse.

- 98 -

Chemins de donnes du LC-3 avec les entres/sorties

- 99 -

13.3.1 Lecture et criture dun caractre


13.3.1.1 Lecture
Le circuit pour le clavier utilise ladresse 0xfe00 pour le registre de contrle et ladresse 0xfe02 pour le registre de donne. Le registre de contrle permet uniquement de savoir si un caractre est disponible. La valeur du bit de poids fort (numro 15) de ce registre indique si un caractre est disponible. La lecture de ce caractre se fait alors dans le registre de donne. La routine ci-dessous effectue une lecture bloquante dun caractre du clavier.
DEFINE KBSR 4xfe00 DEFINE KBDR 4xfe02 getc: waitkb: LDI R2,pKBSR BRzp waitkb LDI R0,pKBDR RET ; Registre de contrle (Status) du clavier ; Registre de donne du clavier

pKBSR: .FILL KBSR pKBDR: .FILL KBDR

; Pointeur sur le registre de contrle ; Pointeur sur le registre de donne

13.3.1.2 criture
Le circuit pour lcran utilise ladresse 0xfe04 pour le registre de contrle et ladresse 0xfe06 pour le registre de donne. Le registre de contrle permet uniquement de savoir si le dernier caractre crit a t envoy et si le circuit est prt envoyer un nouveau caractre. Lenvoi dun caractre sur une ligne srie prend un certain temps. Le micro-processeur doit attendre que lmission dun caractre est termine avant den crire un autre dans le registre de donne. La valeur du bit de poids fort (numro 15) du registre de contrle indique si le circuit est prt envoyer. Lmission du caractre est initie en lcrivant dans le registre de donne du circuit. La routine ci-dessous effectue une criture bloquante dun caractre sur lcran.
DEFINE DPSR 4xfe04 DEFINE DPDR 4xfe06 putc: waitdp: LDI R2,pDPSR BRzp waitdp STI R0,pDPDR RET pDPSR: .FILL DPSR pDPDR: .FILL DPDR ; Pointeur sur le registre de contrle ; Pointeur sur le registre de donne ; Registre de contrle (Status) de lcran ; Registre de donne de lcran

- 100 -

14 Autres architectures
processeurs 80x86 comparaison CISC/RISC architecture IA-64

- 101 -

14.1 Processeurs 80x86 14.1.1 Registres

Registres du micro-processeur 8086

14.1.2 Mmoire

Mmoire du micro-processeur 8086

14.1.3 Adressage par segments

- 102 -

Adressage du micro-processeur 8086

14.1.4 Instructions 14.1.5 Instruction de chargement et rangement


MOV chargement et rangement PUSH empilement POP dpilement

14.1.6 Instructions arithmtiques


Le micro-processeur possde un jeu dinstruction deux oprandes. Ceci signifie que dans les opration arithmtiques et logiques, la destination est ncessairement une des deux operandes. INC incrmentation DEC dcrmentation ADD addition ADC addition avec retenue SUB soustraction CMP comparaison (soustraction sans rangement) NEG oppos

14.1.7 Instructions logiques


NOT ngation OR, XOR ou logique et ou exclusif AND, TEST et logique et et logique sans rangement SHL, SHR, SAL, SAR dcalages gauche et droite ROL, ROR, RCL, RCR rotations gauche et droite (avec injection de la retenue)

- 103 -

14.1.8 Branchements
JMP branchement JZ, JNZ branchement si zro ou non JO, JNO branchement si dbordement (Overflow) ou non JS, JNS branchement si ngatif ou non JA, JAE, JG, JGE branchement si plus grand (ou gal) ou non JB, JBE, JL, JLE branchement si plus petit (ou gal) ou non

14.1.9 Appel et retour de sous-routine


CALL et CALLF appel et appel lointain RET et RETF retour et retour lointain INT appel systme

14.1.10 Modes dadressages


absolu indirect avec les registres BX, SI ou DI base + offset avec les registres BP, BX, BI ou SI avec offset 8 ou 16 bits index laddresse est la somme de deux registres. Les paires possibles sont BX+SI, BX+DI, BP+SI et BP+DI base + index + offset identique au mode prcdent avec en plus un offset 8 ou 16 bits

14.1.11 Instructions complexes


PUSHA, POPA empilement et dpilement de tous les registres ECHG change de deux valeurs MOVS dplacement de chane : mem[ES:DI] mem[DS:SI]; DI DI+1; SI SI+1. Cette instruction peut tre prcde dun prfixe comme REP, REPZ ou REPNZ qui donne le nombre de fois la rpter. LOOP label dcrmentation et saut : DEC CX et JNZ label

14.1.12 Programmation
Voici un petit exemple de programme qui calcule la longueur dune chane de caractres
; Segment de donnes data SEGMENT chaine DB Hello world\0 data ENDS ; Segment de code code SEGMENT ASSUME DS:data, CS:code

- 104 -

main:

; Initialisation du registre de segment de donnes MOV AX,data MOV DS,AX ; Chargement de ladresse de la chane dans BX ; Il sagit de ladresse relative au dbut du segment MOV BX,offset chaine ; Initialisation compteur MOV CX,0

loop:

MOV AL,[BX] CMP AL,0 JZ fini INC BX INC CX JMP loop

; Test de fin de chane ; Incrmentation pointeur ; Incrmentation compteur

fini:

code

; Retour au DOS MOV AH,4CH INT 21H ENDS END main ; Adresse de lancement

- 105 -

14.2 Comparaison CISC/RISC


Les processeurs gnraux actuels se rpartissent en deux grandes catgories appeles CISC pour Complex Instruction Set Computer et RISC pour Reduced Instruction Set Computer. Les processeurs de ces deux catgories se distinguent par la conception de leurs jeux dinstructions. Les processeurs CISC possdent un jeu tendu dinstructions complexes. Chacune de ces instructions peut effectuer plusieurs oprations lmentaires comme charger une valeur en mmoire, faire une opration arithmtique et ranger le rsultat en mmoire. Au contraire, les processeurs RISC possdent un jeu dinstructions rduit o chaque instruction effectue une seule opration lmentaire. Le jeu dinstructions dun processeur RISC est plus uniforme. Toutes les instructions sont codes sur la mme taille et toutes sexcute dans le mme temps (un cycle dhorloge en gnral). Lorganisation du jeu dinstructions est souvent appel ISA pour Instruction Set Architecture La rpartition des principaux processeurs dans les deux catgories est la suivante. CISC RISC

Alpha (DEC) S/360 (IBM) PowerPC (Motorola) VAX (DEC) MIPS 68xx, 680x0 (Motorola) PA-RISC (Hewlett-Packard) x86, Pentium (Intel) SPARC

14.2.1 Historique
Dans les premiers temps de linformatique, les ordinateurs taient programms en langage machine ou en assembleur. Pour faciliter la programmation, les concepteurs de micro-processeurs dotrent ceux-ci dinstructions de plus en plus complexes permettant aux programmeurs de coder de manire plus concise et plus efficace les programmes. Lorsque les premiers langages de haut niveau remplacrent lassembleur, cette tendance saccentua. Les concepteurs de micro-processeurs sefforcrent de combler le foss entre le langage machine et les langages de haut niveau. Des instructions proches des constructions typiques des langages de haut niveau furent ajouts aux micro-processeurs. Lide tait de faciliter la compilation des langages de haut niveau au dtriment de la complexit des micro-processeurs. On ajouta par exemple des instructions spcifiques pour les appels/retours de fonctions ou des instructions spciales pour les boucles pour dcrmenter un registre et faire un saut si le rsultat est non nul, tout a en une seule instruction machine. Un lment qui favorisa cette complexification des micro-processeurs tait le manque ( cause du prix) de mmoire et la lenteur de celle-ci. Labsence de beaucoup de mmoire force les programmes tre le plus compacts possible. Pour rduire le nombre dinstructions ncessaires un programme, il faut que chaque instruction fasse plusieurs oprations lmentaires. La lenteur relative de la mmoire pousse aussi avoir des instructions complexes. Il ny a alors moins de codes dinstructions lire en mmoire et le programme en est acclr. Comme la densit dintgration des transistors tait encore faible, les micro-processeurs possdaient trs peu de registres internes. De plus, un grand nombre de registres auraient ncessit plus de bits pour coder les instructions. Pour compenser cette lacune en registres, certaines instructions taient capables, par exemple, de charger deux valeurs en mmoire, de faire la somme et de ranger le rsultat

- 106 -

en mmoire. Il y avait de nombreux modes dadressage et tous les modes dadressages taient possibles toutes les instructions. On parle alors dorthogonalit lorsque toutes les instructions peuvent utiliser tous les modes dadressages. Laboutissement de ce type de jeux dinstructions est celui du VAX. La complexification des jeux dinstructions a pour effet de compliquer notablement la phase de dcodage des instructions. On peux constater que sur certains micro-processeurs jeu dinstructions complexe, la moiti des transistors sur la puce de silicium est consacre au dcodage des instructions et au contrle de lexcution de celles-ci. Comme le dcodage des instructions est rendu difficile par un jeu dinstructions complexes, lexcution des instructions simples est ralenti par un dcodage compliqu. Lorsque le jeu dinstructions est complexe, la plupart des compilateurs nutilisent pas tout le jeu dinstructions. Il se contentent souvent dun nombre rduit dinstructions. Le rsultat est que les instructions les plus puissantes sont trs rarement utilises. On arrive alors au paradoxe suivant. Les instructions complexes qui ne sont pratiquement pas utilises ralentissent les instructions simples qui sont utilises la plupart du temps. Des tudes statistiques sur des programmes tels des systmes dexploitation ou des applications relles ont montr les faits suivants. 80 % des programmes nutilisent que 20 % du jeu dinstructions. Les instructions les plus utilises sont : les instructions de chargement et de rangement, les appels de sous-routines. Les appels de fonctions sont trs gourmands en temps : sauvegarde et restitution du contexte et passage des paramtres et de la valeur de retour. 80 % des variables locales sont des entiers. 90 % des structures complexes sont des variables globales. La profondeur maximale dappels imbriqus et en moyenne de 8. Une profondeur plus importante ne se rencontre que dans 1 % des cas. Lapparition de larchitecture RISC vint de la volont de favoriser au maximum les instructions simples qui constituent la grande partie des programmes. Lide est de supprimer les instructions complexes et les modes dadressage labors afin daugmenter la frquence dhorloge et daugmenter ainsi la vitesse dexcution de toutes les instructions. La frquence dhorloge dun micro-processeur est souvent dicte par les instructions les plus complexes qui prennent plus de temps. La philosophie essentielle des processeurs RISC est davoir un nombre important de registres. Des instructions de chargement et de rangement avec quelques modes dadressage sont les seules faire les changes avec la mmoire. Toutes les autres instructions travaillent uniquement avec les registres. Lapparition des micro-processeurs RISC est en partie due laugmentation de la mmoire disponible sur les ordinateurs. Celle-ci nest plus une limitation la taille des programme. Un autre facteur important est le foss qui sest creus entre la vitesse des processeurs et celle de la mmoire. Les processeurs ont une frquence dhorloge leve par rapport la vitesse de la mmoire. Chaque accs la mmoire les pnalise. Ceci accentue le rle dun nombre important de registres qui vitent les accs la mmoire. La lenteur de la mmoire est en partie compense par la prsence de cache fait de mmoires rapides. Ceux-ci sont trs efficaces pour lire les instructions des programmes puisque ces accs la mmoire se font des cases mmoire contigus.

- 107 -

14.2.2 Caractristiques
Les principales caractristiques des processeurs RISC sont les suivantes. Codage uniforme des instructions Toutes les instructions sont codes avec un mme nombre de bits, gnralement un mot machine. Lop-code se trouve la mme position pour toutes les instructions. Ceci facilite le dcodage des instructions. Registres indiffrencis et nombreux Tous les registres peuvent tre utiliss dans tous les contextes. Il ny a par exemple pas de registre spcifique pour la pile. Les processeurs sparent cependant les registres pour les valeurs flottantes des autres registres. Limitation des accs mmoire Les seules instructions ayant accs la mmoire sont les instructions de chargement et de rangement. Toutes les autres instructions oprent sur les registres. Il en rsulte une utilisation intensive des registres. Nombre rduit de modes dadressage Il ny pas de mode dadressage complexe. Les modes dadressages possibles sont gnralement immdiat, direct, indirect et relatifs. Un registre est souvent fix la valeur 0 afin dobtenir certains modes dadressages simples comme cas particulier dautres modes dadressage. Nombre rduit de types de donnes Les seuls types de donnes supports sont les entiers de diffrentes tailles (8, 16, 32 et 64 bits) et des nombres flottants en simple et double prcision. Certains processeurs CISC comportent des instructions pour le traitement des chanes de caractres, des polynmes ou des complexes La simplification du jeu dinstructions a report une partie du travail sur le compilateur. Ce dernier joue un rle essentiel dans loptimisation du code engendr. Il doit en particulier grer les points suivants. allocation optimale des registres, limination des redondances, optimisation des boucles en ne conservant lintrieur que ce qui est modifi, optimisation du pipeline, optimisation du choix des instructions,

- 108 -

14.3 Architecture IA-64


Larchitecture IA-64 (Intel Architecture 64 bits) est larchitecture des processeurs 64 bits Itanium et Itanium 2 dvelopps conjointement par Intel et Hewlett-Packard. Elle utilise une technique appele EPIC (Explicitly Parallel Instruction Computing). Larchitecture de ce micro-processeur se distingue des autres architectures car elle introduit plusieurs concepts novateurs. Bien que lItanium soit un (semi-)chec commercial, il est intressant den tudier les caractristiques essentielles. Le principe de la technique EPIC est davoir une paralllisation explicite des instructions. Dans un programme dun micro-processeur classique, les instructions sont disposes de manire squentielle. Le micro-processeur peut essayer den excuter certaines en parallle mais il ne dispose daucune indication pour laider. Il doit donc la vole grer les dpendances des instructions et leur affecter une unit dexcution. Les instructions du processeur Itanium sont au contraire disposes en paquets (appels bundles), prtes tre paralllises. Chaque paquet dispose en plus dindications sur les units ncessaires lexcution de ses instructions. La paralllisation des instructions est donc prpare au moment de la compilation et de lassemblage. Voici quelques caractristiques essentielles de larchitecture IA-64. Nombre important de registres pour faciliter la paralllisation des instructions. Certains registres sont statiques et dautres sont grs sous forme dune pile pour faciliter les appels de fonctions. Instruction de chargement anticip pour masquer la latence de la mmoire Regroupement des instructions en paquets (bundles) avec des indications explicites des units ncessaires Excution par prdicats des instructions.

14.3.1 Organisation
Lorganisation de larchitecture IA-64 est base sur un nombre important de registres et sur de multiples units dexcution. Ces deux caractristiques permettent un degr lev de paralllisme. Dans un micro-processeur classique, le nombre de registres rellement disponibles peut tre suprieur au nombre de registres utiliss par lassembleur. Le micro-processeur effectue la vole un renommage des registres afin dutiliser au mieux tous les registres. Dans larchitecture IA-64, tous les registres sont visibles de lassembleur.

14.3.1.1 Registres
Les registres dont dispose larchitecture IA-64 sont les suivants. 128 registres gnraux de 64 bits 128 registres applicatifs de 64 bits 128 registres flottants de 82 bits 64 bits de prdictions

- 109 -

14.3.1.2 Units dexcution


Le nombre dunits dexcution peut varier et dpend du nombre de transistors disponibles pour une implmentation donne. Le micro-processeur sarrange pour utiliser au mieux les units dont il dispose. Larchitecture distingue les quatre types suivants dunits dexcution. Unit I unit arithmtique et logique sur les entiers (additions, soustractions, oprations logiques, dcalage) Unit M unit de chargement et de rangement entre les registres et la mmoire, plus quelques oprations sur les entiers Unit B unit de branchement Unit F unit doprations sur les nombres flottants

14.3.1.3 Type dinstructions


Larchitecture distingue aussi des types dinstructions qui correspondent plus ou moins aux units qui peuvent les excuter. Type dinstruction A I M F B L+X Description UAL Entier non UAL Accs mmoire Branchement tendu Unit dexcution Unit I ou unit M Unit I Unit M Unit B Unit I/Unit B

Opration sur flottants Unit F

14.3.2 Format des Instructions


Les instructions sont regroupes en paquets (bundles) de 128 bits contenant chacun trois instructions et des indications de paralllisations appeles champ gabarit. Chaque instruction est code sur 41 bits. Il reste donc 5 = 128 - 341 bits pour le champ gabarit. Le format dun paquet est le suivant.

Format dun paquet de 128 bits Chaque instruction est code sur 41 bits. Les 4 premiers bits donnent le code-op principal et les 6 derniers bits donnent le numro du registre prdicatif qui conditionne lexcution de linstruction. Lutilisation des 31 = 41 - 4 - 6 bits restant dpend du code-op principal. Une utilisation typique est

- 110 -

cependant de coder un code-op supplmentaire sur les 10 premiers bits puis de coder 3 registres sur 7 bits chacun.

Format dune instruction sur 41 bits Linterprtation du code-op principal dpend du champ gabarit car celui-ci indique dj lunit dexcution ncessaire linstruction. Pour que cette information ne soit pas redondante avec le code-op, cest le code-op combin avec le champ gabarit qui dtermine linstruction prcise. Le gabarit indique dabord une catgorie dinstructions, le code-op donne ensuite linstruction dans la catgorie et le code-op supplmentaire peut encore prciser linstruction. Il sagit en fait dune organisation hirarchique des codes-op.

14.3.2.1 Champ gabarit


Le champ gabarit code deux informations distinctes. Dune part, il donne lunit dexcution ncessaire chacune des trois instructions du paquet. Dautre part, il prcise les positions dventuelles limites. Ces limites sparent des blocs dinstructions qui peuvent chevaucher plusieurs paquets. Le micro-processeur peut en effet charger plusieurs paquets simultanment pour essayer dexcuter un maximum dinstructions en parallle. Les blocs sont des suites dinstructions conscutives dans le flot dinstructions. Une limite indique quune instruction aprs elle peut avoir une dpendance avec une instruction avant elle. Autrement dit, toutes les instructions entre deux limites conscutives ne prsentent pas de dpendance. Elles peuvent donc tre excutes en parallle. Ces deux informations sont regroupes dans un modle dont le numro est donn par le champ gabarit. Parmi les 32 codes possibles, seuls 24 sont assigns des modles. Les 8 codes restants sont rservs pour une utilisation ultrieure. La table suivante donne les modles prvus. Les limites sont indiques par une double barre verticalle ||.

- 111 -

Modle Instruction 0 Limite Instruction 1 Limite Instruction 2 Limite 00 01 02 03 04 05 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 16 17 18 19 1C 1D Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit M Unit B Unit B Unit M Unit M Unit M Unit M || || Unit I Unit I Unit I Unit I Unit L Unit L Unit M Unit M Unit M Unit M Unit M Unit F Unit M Unit M Unit I Unit I Unit B Unit B Unit B Unit B Unit M Unit M Unit F Unit F || || Unit I Unit I Unit I Unit I Unit X Unit X Unit I Unit I Unit I Unit I Unit I Unit I Unit F Unit F Unit B Unit B Unit B Unit B Unit B Unit B Unit B Unit B Unit B Unit B || || || || || || || || || || || ||

Il est la charge du compilateur de regrouper au mieux les instructions en paquets puis en blocs afin doptimiser lutilisation des units dexcution du micro-processeur.

14.3.3 Excution prdicative


Les registres prdicatifs sont des registres binaires qui sont positionns par les instructions de comparaison. Ils sapparentent donc aux indicateurs binaires comme n, z et p prsents dans la plupart des micro-processeurs. Par contre, ils sont tous indiffrencis et chacun dentre eux peut tre positionn par une comparaison. En fait, chaque comparaison positionne deux registres prdicatifs avec des valeurs opposes. Lexcution de chaque instruction est conditionne par la valeur dun des registres prdicatifs dtermin par les 6 derniers bits de linstruction. Celle-ci est excute seulement si ce registre prdicatif vaut 1. Sinon, elle nest pas excute. Le registre prdicatif p0 a toujours la valeur 1. Une instruction indique donc ce registre prdicatif si elle doit toujours tre excute.

- 112 -

La compilation dune structure de contrle if-then-else dun langage de haut niveau se traduit par des sauts en langage dassembleur. La compilation du morceau de code ci-dessous
if (cond) { bloc 1 } else { bloc 2 }

conduit au code dassembleur LC-3 suivant.


; Calcul de cond ... BRz bloc2 ; Condition fausse ; Dbut du bloc 1 ... BR finif ; Fin du bloc 1 ; Dbut du bloc 2 ... ; Suite du programme

bloc2: finif:

Si les blocs dinstructions 1 et 2 sont relativement courts, la prsence des sauts pnalise lexcution du programme. Le principe dutilisation des registres prdicatifs est le suivant. La calcul de la condition positionne deux registres prdicatifs p1 et p2 de manire oppose. Si la condition est vraie, p1 est positionn vrai et p2 faux et si la condition est fausse, p1 est positionn faux et p2 vrai. Ensuite, le programme excute les instructions du bloc 1 conditionnes par p1 et les instructions du bloc 2 conditionnes par p2. Cela donne le code en assembleur suivant o les sauts ont disparu. La syntaxe (p) instr signifie que linstruction instr est conditionne par le registre prdicatif p. Le micro-processeur excute plus dinstructions mais cela est largement compens par la disparition des sauts si les blocs 1 et 2 sont assez courts.
; Calcul de cond ... ; Positionnement de p1 et p2 ; Dbut du bloc 1 (p1) instr1 (p1) instr2 ... ; Dbut du bloc 2 (p2) instr1 (p2) instr2 ... ; Suite du programme

14.3.4 Chargement spculatif


Lide du chargement spculatif est danticiper le chargement de valeurs partir de la mmoire afin dviter que le calcul reste bloqu en attente dune valeur. Le chargement dune valeur est scind en deux actions. La premire est de demander le chargement sans attendre que celui-ci soit termin. La seconde est de vrifier que le chargement a t effectivement accompli au moment o la valeur doit tre utilise. Le principe est de placer la demande bien avant lutilisation de la valeur. Le chargement a alors largement le temps de seffectuer. La vrification est ensuite faite juste avant dutiliser la valeur. Si la valeur nest pas encore charge, le calcul est bloqu mais cet vnement survient rarement.

- 113 -

15 Pipeline
15.1 Principe
Le pipeline est un mcanisme permettant daccrotre la vitesse dexcution des instructions dans un micro-processeur. Lide gnrale est dappliquer le principe du travail la chane lexcution des instructions. Dans un micro-processeur sans pipeline, les instructions sont excutes les unes aprs les autres. Une nouvelle instruction nest commence que lorsque linstruction prcdente est compltement termine. Avec un pipeline, le micro-processeur commence une nouvelle instruction avant davoir fini la prcdente. Plusieurs instructions se trouvent donc simultanment en cours dexcution au cur du micro-processeur. Le temps dexcution dune seule instruction nest pas rduit. Par contre, le dbit du micro-processeur, cest--dire le nombre dinstructions excutes par unit de temps, est augment. Il est multipli par le nombre dinstructions qui sont excutes simultanment.

15.2 tages du pipeline


Afin de mettre en uvre un pipeline, la premire tche est de dcouper lexcution des instructions en plusieurs tapes. Chaque tape est prise en charge par un tage du pipeline. Si le pipeline possde n tages, il y a n instructions en cours dexcution simultane, chacune dans une tape diffrente. Le facteur dacclration est donc le nombre n dtages. On verra que plusieurs problmes rduisent ce facteur dacclration. Sur les micro-processeurs actuels, le nombre dtages du pipeline peut atteindre une douzaine ou mme une vingtaine. La frquence dhorloge est limite par ltape qui est la plus longue raliser. Lobjectif des concepteurs de micro-processeurs est dquilibrer au mieux les tapes afin doptimiser la performance. Pour le micro-processeur LC-3, on va dcouper lexcution des instructions en les cinq tapes suivantes. On va donc construire un pipeline cinq tages. Lecture de linstruction (Instruction Fetch) La prochaine instruction excuter est charge partir de la case mmoire pointe par le compteur de programme PC dans le registre dinstruction IR. Ensuite le compteur de programme est incrment pour pointer sur linstruction suivante. Dcodage de linstruction (Instruction Decode) Cette tape consiste prparer les arguments de linstruction pour ltape suivante o ils seront utiliss. Ces arguments sont placs dans deux registres A et B. Si linstruction utilise le contenu de un ou deux registres, ceux-ci sont lus et leurs contenus sont rangs en A et B. Si linstruction contient une valeur immdiate, celle-ci est tendue (signe ou non signe) 16 bits et place dans le registre B. Pour les instructions de branchement avec offset, le contenu de PC est rang en A et loffset tendu dans B. Pour les instructions de branchement avec un registre, le contenu de ce registre est rang en A et B est rempli avec 0. Les instructions de rangement ST* mettent le contenu du registre qui doit tre transfr en mmoire dans le registre C. Excution de linstruction (Instruction Execution) Cette tape utilise lunit arithmtique et logique pour combiner les arguments. Lopration prcise ralise par cette tape dpend du type de linstruction. Instruction arithmtique ou logique (ADD, AND et NOT) Les deux arguments contenus dans les registres A et B sont fournis lunit arithmtique et logique pour calculer le rsultat.

- 114 -

Instruction de chargement et rangement (LD* et ST*) Le calcul de ladresse est effectu partir de ladresse provenant du registre A et de loffset contenu dans le registre B. Instruction de branchement (BR*, JMP, JSR, JSRR et TRAP) Pour les instructions contenant un offset, laddition avec le contenu du PC est effectue cette tape. Pour les instructions utilisant un registre, le contenu du registre est juste transmis. Accs la mmoire (Memory Access) Cette tape est uniquement utile pour les instruction de chargement et de rangement. Pour les instructions arithmtiques et logiques ou les branchements, rien nest effectu. Ladresse du mot mmoire est contenue dans le registre R. Dans le cas dun rangement, la valeur ranger provient du registre C. Dans le cas dun chargement, la valeur lue en mmoire est mise dans le registre R pour ltape suivante. Rangement du rsultat (Write Back) Le rsultat des oprations arithmtiques et logiques est rang dans le registre destination. La valeur lue en mmoire par les instructions de chargement est aussi range dans le registre destination. Les instructions de branchement rangent la nouvelle adresse dans PC. Ce schma ne sapplique pas aux deux instructions LDI et STI qui ncessitent deux accs la mmoire. Les processeurs utilisant un pipeline ne possdent pas dinstruction avec ce mode dadressage indirect. Dans la suite, on ignore ces deux instructions. Le pipeline a rduit le nombre dadditionneurs puisque le mme est utilis pour les calculs arithmtiques et les calculs dadresses. Par contre, certains registres ont d tre multiplis. Le registre dinstruction IR est prsent chaque tage du pipeline. En effet, lopration effectuer chaque tage dpend de linstruction en cours. Cette multiplication de certains lments est le prix payer pour lexcution simultane de plusieurs instructions. Le tableau ci-dessous reprsente lexcution dun programme pendant quelques cycles dhorloge. Chacune des instructions commence son excution un cycle aprs linstruction prcdente et passe par les cinq tapes dexcution pendant cinq cycles conscutifs. Programme 1 2 3 Inst. n 1 Inst. n 2 Inst. n 3 Inst. n 4 Inst. n 5 Inst. n 6 4 Cycles dhorloge 5 6 7 8 9 10 IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB

15.3 Ralisation du pipeline


Le pipeline est ralis comme la figure ci-dessous.

- 115 -

Pipeline

15.4 Alas
Le bon fonctionnement du pipeline peut tre perturb par plusieurs vnements appels alas (pipeline hazard en anglais). Ces vnements sont classs en trois catgories. alas structurels Ce type de problmes survient lorsque deux instructions dans des tages diffrents du pipeline ncessitent la mme ressource.

- 116 -

alas de donnes Ce type de problmes survient lorsquune instruction ncessite une donne qui na pas encore t calcule par une instruction prcdente. Ceci provient du fait que les instructions lisent leurs arguments dans les premiers tages du pipeline alors quelles produisent leur rsultat dans les derniers tages. alas de contrle Ce type de problmes survient ds quune instruction de branchement est excute. Si le branchement est effectu, les instructions qui suivent dans le pipeline ne doivent pas tre excute. Ceci provient du fait que la nouvelle adresse est calcule alors que les instructions qui suivent ont dj t charges La solution gnrale pour rsoudre un ala est de bloquer linstruction qui pose problme et toutes celles qui suivent dans le pipeline jusqu ce que le problme se rsolve. On voit alors apparatre des bulles dans le pipeline. De manire pratique, la bulle correspond lexcution de linstruction NOP qui ne fait rien. Programme 1 2 3 Inst. n 1 Inst. n 2 Inst. n 3 Inst. n 4 Inst. n 5 Inst. n 6 4 Cycles dhorloge 5 6 7 8 9 10 11 12 IF ID IE MA WB IF ID IE MA WB IF ID IF Bulle Bulle IE MA WB ID IE MA WB IF ID IE MA WB IF ID IE MA WB

15.4.1 Alas structurels


Considrons par exemple le morceau de code suivant.
LDR ADD ADD ADD R7,R6,0 R6,R6,1 R0,R0,1 R1,R1,1

Le droulement de lexcution des quatre premires instructions dans le pipeline devrait tre le suivant. Programme Cycles dhorloge 1 2 3 ADD R6,R6,1 ADD R0,R0,1 ADD R1,R1,1 4 5 6 7 8

LDR R7,R6,0 IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB

- 117 -

Ltape MA (accs mmoire) de linstruction LDR R7,R6,0 a lieu en mme temps que ltape IF (chargement de linstruction) de linstruction ADD R1,R1,1. Ces deux tapes ncessitent simultanment laccs la mmoire. Il sagit dun ala structurel. Comme cela est impossible, linstruction ADD R1,R1,1 et celles qui suivent sont retardes dun cycle. Programme 1 2 3 ADD R6,R6,1 ADD R0,R0,1 ADD R1,R1,1 Inst. n 5 Inst. n 6 4 Cycles dhorloge 5 6 7 8 9 10 11

LDR R7,R6,0 IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB

Le conflit daccs la mmoire se produit chaque fois quune instruction de chargement ou de rangement est excute. Celle-ci rentre systmatiquement en conflit avec le chargement dune instruction qui a lieu chaque cycle dhorloge. Ce problme est gnralement rsolu en sparant la mmoire o se trouvent les instructions de celle o se trouvent les donnes. Ceci est ralis au niveau des caches de niveau 1. Le micro-processeur doit alors avoir deux bus distincts pour accder simultanment aux deux caches. Comme le micro-processeur LC-3 est trs simple, les seuls alas structurels possibles sont ceux ds des accs simultans la mmoire. Les registres sont utiliss aux tapes ID (dcodage) et WB (rangement du rsultat) mais les premiers accs sont en lecture et les seconds en criture. Ceci ne provoque pas dala.

15.4.2 Alas de donnes


Considrons le morceau de code suivant.
ADD R1,R1,1 ADD R0,R1,R2

Le droulement de lexcution de ces deux instructions dans le pipeline devrait tre le suivant. Programme Cycles dhorloge 1 2 3 ADD R2,R1,R0 4 5 6

ADD R1,R1,1 IF ID IE MA WB IF ID IE MA WB

Le problme est que le rsultat de la premire instruction est crit dans le registre R1 aprs la lecture de ce mme registre par la seconde instruction. La valeur utilise par la seconde instruction est alors errone. Le rsultat de la premire instruction est disponible ds la fin de ltape IE (excution de linstruction) de celle-ci. Il est seulement utilis ltape IE de la seconde instruction. Il suffit alors de le fournir en entre de ladditionneur la place de la valeur lue dans R1 par la seconde instruction. Ceci est ralis

- 118 -

en ajoutant un chemin de donnes. Programme Cycles dhorloge 1 2 3 ADD R2,R1,R0 4 5 6

ADD R1,R1,1 IF ID IE MA WB IF ID IE MA WB

Considrons un autre morceau de code assez semblable.


LDR R1,R6,0 ADD R0,R1,R2

Le droulement de lexcution de ces deux instructions dans le pipeline devrait tre le suivant. Programme Cycles dhorloge 1 2 3 ADD R2,R1,R0 4 5 6

LDR R1,R6,0 IF ID IE MA WB IF ID IE MA WB

Dans cet exemple encore, le rsultat de la premire instruction est crit dans le registre R1 aprs la lecture de ce mme registre par la seconde instruction. Par contre, le rsultat nest pas disponible avant ltape MA (accs mmoire) de la premire instruction. Comme cette tape a lieu aprs ltape IE de la seconde instruction, il ne suffit pas dajouter un chemin de donnes pour faire disparatre lala. Il faut en outre retarder la seconde instruction. Ceci introduit une bulle dans le pipeline. Programme 1 2 3 ADD R2,R1,R0 Inst. n 3 Inst. n 4 IF ID IF Cycles dhorloge 4 5 6 7 8 9

LDR R1,R6,0 IF ID IE MA WB IE MA WB ID IE MA WB IF ID IE MA WB

15.4.2.1 Optimisation du code par le compilateur


Considrons le morceau de programme suivant crit dans un langage comme C.
x = x1 + x2; y = y1 + y2;

La compilation de ce morceau de code pourrait produire les instructions suivantes o x, x1, , y2 dsignent alors les emplacements mmoire rservs ces variables.

- 119 -

LD R1,x1 LD R2,x2 ADD R0,R1,R2 ST R0,x LD R1,y1 LD R2,y2 ADD R0,R1,R2 ST R0,y

Lexcution de ces instructions provoque des alas de donnes entre les instructions de chargement et les instructions daddition. Ces alas introduisent des bulles dans le pipeline. Ces bulles peuvent tre vites si le compilateur ordonne judicieusement les instructions comme dans le code ci-dessous. Plus de registres sont alors ncessaires.
LD R1,x1 LD R2,x2 LD R3,y1 ADD R0,R1,R2 LD R4,y2 ST R0,x ADD R0,R1,R2 ST R0,y

15.4.3 Alas de branchement


Lors de lexcution dune instruction de branchement conditionnel, on dit que le branchement est pris si la condition est vrifie et que le programme se poursuit effectivement la nouvelle adresse. Un branchement sans condition est toujours pris. Lorsquun branchement est pris, ladresse de celui-ci est calcule ltape IE (excution de linstruction) et range dans le registre PC ltape WB (rangement du rsultat). Toutes les instructions qui suivent linstruction de branchement ne doivent pas tre excutes. Au niveau du pipeline, on obtient le diagramme dexcution suivant. Programme 1 2 3 Branchement Inst. suivante n 1 Inst. suivante n 2 Inst. suivante n 3 Inst. cible n 1 Inst. cible n 2 Inst. cible n 3 4 Cycles dhorloge 5 6 7 8 9 10 11 12 IF ID IE MA WB IF ID IE IF ID IF IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB

On constate que lexcution dun branchement pris dgrade notablement la performance du pipeline puisque quatre cycles sont perdus. Comme les branchements constituent en gnral 20 30% des instructions excutes par un programme, il est primordial damliorer leur excution.

- 120 -

Dans le cas du micro-processeur LC-3, les instructions de branchement sont relativement simples. Une faon simple doptimiser les branchements est de ne pas leur faire suivre toutes les tapes du pipeline afin que la nouvelle adresse soit crite le plus tt possible dans le registre PC. Pour les branchements conditionnels, la condition ne dpend que des indicateurs n, z et p et du code de linstruction. Cette condition peut donc tre calcule ltape ID (dcodage de linstruction). De mme, ladresse du branchement est soit le contenu dun registre soit la somme de PC et dun offset. Dans les deux cas, cette valeur peut tre rendue disponible la fin de ltape ID. Le prix payer est lajout dun nouvel additionneur ddi ce calcul. La nouvelle adresse est alors crite dans le registre PC la fin de ltape ID. Le diagramme prcdent devient alors le diagramme ci-dessous qui montre quil ne reste plus quun seul cycle dhorloge de perdu. Programme Branchement Inst. suivante n 1 Inst. cible n 1 Inst. cible n 2 Inst. cible n 3 IF ID IF IF ID IE MA WB IF ID IE MA WB IF ID IE MA WB Cycles dhorloge 1 2 3 4 5 6 7 8 9

- 121 -

16 Mmoire virtuelle
16.1 Principe
Lors de la compilation dun programme crit dans un langage de haut niveau, toutes les rfrences des variables locales ou globales sont transformes en des rfrences des emplacements mmoire allous ces variables. Les variables globales sont gnralement alloues dans la zone des donnes alors que les variables locales sont plutt alloues sur la pile. Les pointeurs de certains langages comme C ou C++ ou les rfrences de Java sont aussi des adresses qui sont manipules de manire explicites. Dans un ordinateur sans mmoire virtuelle, les adresses manipules implicitement ou explicitement par les programmes correspondent aux adresses relles des donnes en mmoire. Le principe de mmoire virtuelle est de sparer les adresses manipules par les programmes et les adresses relles des donnes en mmoire. Les adresses manipules par les programmes sont appeles adresses virtuelles et les adresses des donnes en mmoire sont appeles adresses physiques. Chaque programme dispose dun espace dadressage virtuel constitu de toutes les adresses virtuelles. Pour que les programmes fonctionnent correctement, il doit y avoir une correspondance entre les adresses virtuelles et les adresses physiques. Cette correspondance est assure conjointement dune part au niveau matriel par un circuit adjoint au processeur appel MMU (Memory Management Unit) et dautre part au niveau logiciel par le systme dexploitation. Dans les micro-processeurs rcents, ce circuit MMU est souvent intgr au processeur.

16.2 Fonctionnement
Lespace dadressage virtuel de chaque programme ainsi que lespace mmoire sont diviss en blocs appels pages de mme taille. Cette taille est trs souvent de lordre 4 Ko mais peut aussi tre de 8 ou 16 Ko sur des micro-processeurs 64 bits. Un bloc de lespace dadressage virtuel est appel page virtuelle et un bloc de lespace mmoire est appel page physique. Larticle wikipedia utilise les termes page et frame. Pour chaque page virtuelle utilise par un programme correspond une page physique. Le systme maintient pour chaque programme une table de correspondance entre les pages virtuelles et les pages physiques. Cette table est appele table des pages. Elle est bien sr propre chaque programme. Deux programmes fonctionnant simultanment peuvent utiliser la mme adresse virtuelle, par exemple 0x1234, pour des donnes diffrentes qui doivent donc se trouver des adresses physiques diffrentes.

- 122 -

Principe de la mmoire virtuelle

16.3 Translation Lookaside Buffer

Fonctionnement du Translation Lookaside Buffer

- 123 -

16.4 Swap

Principe de la mmoire virtuelle avec swap

16.5 Table des pages hirarchique

- 124 -

Table des pages hirarchique

Structure des entres (Dword) de la table des pages (80x86)

16.6 Linux
Cet article dveloppe entre autre lorganisation propre linux pour la mmoire virtuelle.

- 125 -

17 Caches mmoire
17.1 Hirarchie de mmoire
Un ordinateur dispose de diffrents types de mmoires qui se distinguent par leurs vitesses daccs. Plus la mmoire est rapide plus elle cote cher et plus la quantit disponible sur lordinateur est rduite. Les registres internes entiers ou flottants du micro-processeur constituent la mmoire laquelle celui-ci accde le plus rapidement mais ils sont en nombre trs limit. Il y a ensuite la mmoire vive, les disques durs puis les bandes qui sont trs lentes mais qui permettent de stocker des quantits trs importantes de donnes. Les caches sont intermdiaires entre les registres internes du micro-processeur et la mmoires vive. Ils sont faits de mmoire rapide mais ils sont de taille rduite par rapport la mmoire centrale.

Hirarchie de mmoire

17.2 Principe
Quand il est question de vitesse daccs la mmoire, il faut distinguer la latence et le dbit. La latence est le temps qui scoule entre la demande des donnes et larrive de la premire donne. Le dbit mesure ensuite le flux de donnes transmises pendant le rgime stable cest--dire une fois la latence coule. Pour un disque dur, le temps de latence est relativement long car la tte de lecture doit tre positionne mcaniquement puis il faut encore attendre que le bon secteur se trouve sous la tte. Depuis quelques temps, il sest creus un foss entre la vitesse des micro-processeurs et la vitesse des mmoires dynamiques qui sont utilises comme mmoire centrale des ordinateurs. Les mmoires SDRAM augmentent le dbit mais rduisent peu la latence. Pour viter que le micro-processeur perde du temps attendre les donnes de la mmoire, des caches mmoire forms de mmoires statiques plus rapides sont intercals entre le micro-processeur et la mmoire centrale. Le but est semblable celui des caches disques permettant dacclrer les accs aux disques durs.

- 126 -

Principe du cache Le bon fonctionnement des caches est bas sur le principe de localit qui dit que le code et les donnes des programmes ne sont pas utilises de manire uniforme. On constate souvent que 10% du code dun programme contribue 90% des instructions excutes. On distingue deux types de localit. La localit temporelle indique que des lments auxquels on a eu accs rcemment seront probablement utiliss dans un futur proche. La localit spatiale indique que des lments proches ont tendances tre rfrencs des instants proches.

17.3 Fonctionnement
Le cache contient des copies de donnes qui sont en mmoire centrale. Avant tout accs la mmoire, le processeur vrifie si les donnes ne sont pas prsentes dans le cache. Auquel cas, le processeur utilise les donnes contenues dans le cache et naccde pas la mmoire. Sinon, il est ncessaire daller chercher les donnes en mmoire centrale.

17.3.1 Organisation
Le cache est organis par lignes. Chaque ligne contient une portion de 8 512 octets des donnes en mmoires et une tiquette (tag en anglais) qui est ladresse de ces donnes en mmoire. Lorsque le micro-processeur veut accder la mmoire, il compare ladresse avec les tiquettes des lignes du cache. Sil trouve ladresse parmi les tiquettes, le micro-processeur utilise directement les donnes du cache. On parle alors de succs de cache. Sinon on parle de dfaut de cache ou dchec de cache (cache miss).

Organisation du cache

- 127 -

17.3.2 Dfauts de cache


La rponse un dfaut de cache dpend de la nature de laccs aux donnes. Dans le cas dune lecture, les donnes sont charges de la mmoire centrale dans le cache puis envoyes au micro-processeur. Ce chargement ncessite de librer au pralable une ligne du cache pour y placer les nouvelles donnes. Le choix de la ligne librer est contrl par la politique de remplacement. Le chargement dans le cache des donnes partir de la mmoire centrale implique un dlai puisque cette dernire est beaucoup plus lente que le cache. Ce dlai est parfois augment par le fait quil faille copier en mmoire le contenu de la ligne libre. Dans le cas dun dfaut de cache lors dune criture, deux techniques sont utilises. La premire technique est de faire comme pour une lecture en chargeant les donnes dans le cache puis de laisser le processeur crire dans le cache. La seconde technique est dcrire directement les donnes en mmoire. Lide est que lors dune criture, le processeur na pas besoin dattendre que celle-ci soit termine pour continuer travailler. Dans ce cas, les critures sont mises en attentes dans un buffer afin de permettre ces critures de seffectuer sans ralentir le processeur mme en cas de plusieurs critures conscutives.

17.3.3 Politiques dcriture


Il existe plusieurs faons appeles politiques dcriture de grer les critures dans les caches. La politique appele write-through consiste rpercuter en mmoire centrale chaque criture dans le cache. Chaque criture dans le cache provoque alors une criture en mmoire centrale. loppos, la politique write-back retarde au maximum les critures en mmoire centrale. Les donnes qui ont t crites dans le cache sont crites en mmoire centrale au moment o la ligne qui contient ces donnes est libre. Pour savoir si cette criture est ncessaire, chaque ligne contient un bit appel dirty bit qui indique sil y a eu au moins une criture dans cette ligne. Il existe aussi des politiques intermdiaires. Dans le cas de la politique write-through, les critures faire peuvent tre mises en attente temporairement dans une file. Plusieurs critures conscutives la mme adresse peuvent ainsi tre rpercutes par une seule criture en mmoire. Ce mcanisme rduit les changes avec la mmoire centrale. Dans le cas dune politique write-back, le cache peut anticiper lcriture en mmoire de certaines lignes modifies du cache. Il profite de priodes sans change avec la mmoire pour crire certaines lignes dont le dirty bit est positionn. Cette technique permet dviter lcriture de la ligne au moment celle-ci est libre.

17.4 Associativit
Un lment crucial de lefficacit du cache est de retrouver rapidement si des donnes une adresse mmoire sont dj dans le cache. Afin dacclrer cette recherche, le nombre de lignes o peuvent tre mises les donnes une adresse mmoire fixe est souvent rduit. Ce nombre ne dpend pas de ladresse et il est appel lassociativit du cache. Lorsque ce nombre est rduit 1, cest--dire que les donnes de chaque adresse peuvent tre mises dans une seule ligne du cache, on parle de cache direct. Si au contraire lassociativit est gale au nombre de ligne du cache, cest--dire que chaque donne peut tre mise dans nimporte quelle ligne du cache, le cache est dit compltement associatif. Si lassociativit est un entier n, on parle de cache n-associatif (n-way en anglais). Les caches sont trs souvent directs, 2-, 3- ou 4-associatifs mais rarement plus. Le cache de niveau 1 de lAthlon est par exemple 2-associatif.

- 128 -

17.4.1 Caches directs


Dans le cas des caches directs, la ligne o sont places les donnes une adresse sont gnralement dtermins par des bits de poids faible de ladresse. Cette approche a plusieurs avantages. Dune part le numro de la ligne est trs facile dterminer partir de ladresse. Dautre part, les bits utiliss pour dterminer la lignes nont pas tre stocker dans ltiquette, ce qui offre un gains de quelques bits. Soit un cache direct compos de 256 lignes contenant chacune 16 octets. Comme chaque ligne contient 16 octets, les 4 bits de poids faible de chaque adresse servent uniquement donner la position (offset) des donnes dans la ligne. Comme le cache a 256 lignes, les 8 bits suivants dterminent la ligne o les donnes doivent tre places.

Cache direct Lavantage des caches directs est de simplifier au maximum la recherche des donnes dans le cache. Il suffit en effet de comparer ltiquette de la ligne correspondante avec une partie de ladresse. Comme la ligne est unique, il est mme possible de commencer la lecture du cache pendant la comparaison de ltiquette avec ladresse. Si cette comparaison rvle un dfaut de cache, cette lecture anticipe du cache est annule. Les caches directs souffrent par contre dun problme. Si un programme utilise simultanment deux parties de la mmoire qui doivent aller dans la mme ligne de cache, il peut se produire de nombreux dfauts de cache.

- 129 -

17.4.2 Caches n-associatifs


Dans le cas des caches n-associatifs, lorganisation du cache est similaires aux caches directs. chaque adresse correspond n lignes conscutives du cache au lieu dune. Lindice de la premire ligne est encore dtermin par des bits de poids faible de ladresse. On appelle gnralement ensemble les blocs de mmoire ayant mme indice. Pour n gal 2 ou 4, un cache n-associatif se rvle presquaussi performant quun cache direct ayant 2 ou 4 fois plus de mmoire. Par contre, au del de 8, le cache est pnalis par le temps pris par la recherche des donnes dans le cache puisquil faut comparer une partie de ladresse avec n tiquettes. On remarque en outre que les caches compltement associatifs ont des perfomances comparables aux caches 8-associatifs.

17.5 Politiques de remplacement


Lorsque le cache nest pas direct et que survient un dfaut de cache, les donnes doivent tre places dans une des lignes du cache dtermines par ladresse. Il reste alors choisir quelle ligne librer pour les nouvelles donnes. Il existe plusieurs faons de procder ce choix qui sont appeles politiques de remplacement. Lobjectif de ces politiques est de minimiser le nombre de dfauts de cache, en essayant de prvoir au mieux les donnes qui seront utilises par le micro-processeur. Ces diffrentes politiques de remplacement sont bien sr un compromis entre leur performance et le surcot de calculs quelles impliquent. Comme ces calculs doivent tre raliss au niveau des circuits du cache, ils sont ncessairement simples. Les politiques favorisent la libration dune ligne o il ny a eu aucune criture. Ce choix conomise lcriture en mmoire centrale des donnes contenues dans la ligne libre. Les deux politiques les plus couramment utilises sont le tirage alatoire et la politique dite du moins rcemment utilis (Least Recently Used). Le tirage alatoire consiste choisir au hasard une des lignes possibles. Lavantage de cette politique est de minimiser le surcot de calcul tout en donnant des performances raisonnables. La seconde politique choisit la ligne laquelle le dernier accs est le plus ancien. Lide sous-jacente est que cette ligne a une probabilit plus faible dtre utilise lavenir. En particulier, les donnes qui ne sont plus utilises par le micro-processeur disparaissent du cache. En fait, ce sont le plus souvent des approximations de cette politique qui sont utilises en pratique.

17.6 Dfauts de cache


Lorsquil y a trop de dfauts de cache, les performances seffondrent. Le cache fonctionne alors alors la vitesse de la mmoire centrale ou mme plus lentement en raison des surcots de traitement. Beaucoup de recherche a t consacr la rduction du nombre de dfauts de cache. Les dfauts de caches sont gnralement classs en trois catgories. dfauts de premire rfrence (compulsory misses) la premire rfrence un bloc, celui-ci doit tre charg dans le cache. Ces dfaut sont en quelque sorte invitables. dfauts de capacit (capacity misses) Ces dfauts sont d au fait que le cache ne peut pas contenir tous les blocs rfrencs pendant lexcution du programme. Le nombre de ces dfauts peut tre rduit en augmentant la taille du cache.

- 130 -

dfauts de conflit (conflict misses) Ces dfauts interviennent en plus des deux prcdents types. Un bloc a pu tre charg puis enlev du cache car dautres blocs avec le mme indice ont t chargs. Le nombre de ces dfauts peut tre rduit en augmentant lassociativit du cache.

17.7 Hirarchie de cache


Pour un meilleur compromis entre le prix de la mmoire cache et son efficacit, on utilise plusieurs niveaux de cache. On parle alors de hirarchie de cache. La plupart des ordinateurs performants utilisent 3 4 niveaux de cache. Le cache de niveau 1 est le plus prs du micro-processeur. Il est petit mais fait de mmoire trs rapide. Le cache de niveau 2 est de taille plus grande mais fait de mmoire moins rapide. Le cache de niveau 3 est encore plus grand mais fait de mmoire encore mois rapide. Le cache de niveau 1 est directement intgr au processeur. Le cache de niveau 2 est souvent dans le mme botier que le micro-processeur ce qui permet un large bus entre les deux. Le bus de niveau 3 est en gnral sur la carte mre du processeur.

Hirarchie de caches

17.8 Sparation des caches


Le cache de niveau 1 est souvent organis en deux caches distincts, un pour les instructions et un autre pour les donnes. Deux bus permettent alors au micro-processeur daccder simultanment aux deux caches. Dans le cas dune architecture avec un pipeline, cette organisation est indispensable pour viter certains alas structurels. En outre, les accs aux instructions ou aux donnes se comportent de manire assez diffrente. La sparation des caches autorise des optimisations diffrentes pour les deux caches. La figure ci-dessous prsente larchitecture trois niveaux de caches du micro-processeur Alpha 21164.

- 131 -

Hirarchie de caches du micro-processeur Alpha 21164

- 132 -

18 Bibliographie
1. J. L. Hennessy and D. A. Patterson, Architecture des machines. Thomson Publishing, 1996, ISBN 2-84180-022-9. 2. W. Stallings, Organisation et architectures des machines. Pearson Education, 2003, ISBN 2-7440-7007-6. 3. Y. N. Patt and S. J. Patel, Introduction to computing systems: from bits and gates to C and beyond. McGraw Hill, 2004, ISBN 0-07-121503-4. 4. A. Tanenbaum, Architecture de lordinateur. Pearson Education, 2005, ISBN 2-7440-7122-6. 5. B. Goossens, Architecture et micro-architecture des processeurs. Springer, 2002, ISBN 2-287-59761-1. 6. D. Harris and S. Harris, Digital design and computer architecture. Morgan Kaufmann Publishers, 2007, ISBN 0-123704979.

- 133 -

Table des matires


Circuits et architecture des ordinateurs . . 1 Circuits et architecture des ordinateurs en M1 Historique . . . . . . . . . 2 Historique . . . . . . . . 2.1 Historique gnral . . . . . 2.2 Historique des micro-processeurs . . Reprsentation des donnes . . . . . 3 Reprsentation des donnes . . . . 3.1 Entiers . . . . . . . . 3.2 Nombres en virgule fixe . . . . 3.3 Nombres en virgule flottante . . . 3.4 Caractres . . . . . . . Transistors et portes logiques . . . . 4 Transistors et portes logiques . . . . 4.1 Semi-conducteurs . . . . . 4.2 Diode . . . . . . . . 4.3 Transistors . . . . . . . 4.4 Conventions dans les schmas . . . 4.5 Portes not, nand et nor . . . . 4.6 Portes or et and . . . . . . 4.7 Portes nand et nor trois entres . . 4.8 Portes and et or entres multiples . . 4.9 Porte xor . . . . . . . Circuits lmentaires . . . . . . 5 Circuits lmentaires . . . . . . 5.1 Dcodeurs . . . . . . . 5.2 Multiplexeurs . . . . . . 5.3 Construction de circuits . . . . Additionneurs . . . . . . . . 6 Additionneurs . . . . . . . 6.1 Semi-additionneur . . . . . 6.2 Additionneur complet 1 bit . . . 6.3 Additionneur par propagation de retenue 6.4 Calcul des indicateurs . . . . 6.5 Additionneur par anticipation de retenue 6.6 Additionneur rcursif . . . . . 6.7 Additionneur hybride . . . . . 6.8 Additionneur par slection de retenue . 6.9 Soustracteur . . . . . . . Mmoires . . . . . . . . . 7 Mmoires . . . . . . . . 7.1 Mmoire dynamique . . . . . 7.2 Mmoire statique . . . . . 7.3 Organisation de la mmoire . . . 7.4 Mmoires associatives . . . . Circuits squentiels . . . . . . . 8 Circuits squentiels . . . . . . 8.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 3 3 3 4 7 7 7 13 13 15 16 16 16 18 19 21 21 23 24 25 26 28 28 28 31 33 38 38 38 38 40 41 41 46 49 50 51 52 52 52 53 55 58 60 60 60

-i-

8.2 Horloge . . . . . . . . . 8.3 Exemple . . . . . . . . . 8.4 Automate . . . . . . . . . Architecture dun micro-processeur . . . . 9 Architecture dun micro-processeur . . . . 9.1 Modle de von Neumann . . . . . 9.2 Organisation interne des composants . . . 9.3 Instructions . . . . . . . . 9.4 Cycle dexcution . . . . . . . 9.5 Registres PC et IR . . . . . . . 9.6 Codage des instructions . . . . . Micro-processeur LC-3 . . . . . . . 10 Micro-processeur LC-3 . . . . . . 10.1 Registres . . . . . . . . 10.2 Indicateurs N, Z et P . . . . . . 10.3 Mmoire . . . . . . . . 10.4 Instructions . . . . . . . . 10.5 Codage des instructions . . . . . 10.6 Schma interne du LC-3 . . . . . Programmation du micro-processeur LC-3 . . . 11 Programmation du LC-3 . . . . . . 11.1 Programmation en assembleur . . . . 11.2 Exemples de programmes . . . . . Les sous-routines et la pile . . . . . . . 12 Les sous-routines et la pile . . . . . . 12.1 Instruction JMP . . . . . . . 12.2 Sous-routines . . . . . . . 12.3 Sauvegarde des registres . . . . . 12.4 Programmation . . . . . . . 12.5 Comparaison avec dautres micro-processeurs 12.6 Appels systme . . . . . . . 12.7 Interruptions . . . . . . . . Entre/Sorties . . . . . . . . . 13 Entres/Sorties . . . . . . . . 13.1 Adressage des circuits dentres/sorties . . 13.2 Scrutation des circuits dentres/sorties . . 13.3 Entres/Sorties du LC-3 . . . . . Autres architectures . . . . . . . . 14 Autres architectures . . . . . . . Processeurs 80x86 . . . . . . . . . 14.1 Processeurs 80x86 . . . . . . Comparaison CISC/RISC . . . . . . . 14.2 Comparaison CISC/RISC . . . . . Architecture IA-64 . . . . . . . . 14.3 Architecture IA-64 . . . . . . Pipeline . . . . . . . . . . . 15 Pipeline . . . . . . . . . . 15.1 Principe . . . . . . . . . 15.2 tages du pipeline . . . . . . 15.3 Ralisation du pipeline . . . . .

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

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

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

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

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

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

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

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

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

60 . 60 . 61 . 62 . 62 . 62 . 62 . 64 . 64 . 64 . 64 . 65 . 65 . 65 . 66 . 66 . 66 . 73 . 75 . 77 . 77 . 77 . 79 . 85 . 85 . 85 . 85 . 86 . 90 . 92 . 92 . 93 . 97 . 97 . 97 . 98 . 98 . 101 . 101 . 102 . 102 . 106 . 106 . 109 . 109 . 114 . 114 . 114 . 114 . 115 .

- ii -

15.4 Alas . . . . . Mmoire virtuelle . . . . . 16 Mmoire virtuelle . . . 16.1 Principe . . . . . 16.2 Fonctionnement . . . 16.3 Translation Lookaside Buffer 16.4 Swap . . . . . 16.5 Table des pages hirarchique 16.6 Linux . . . . . Caches mmoire . . . . . 17 Caches mmoire . . . . 17.1 Hirarchie de mmoire . 17.2 Principe . . . . . 17.3 Fonctionnement . . . 17.4 Associativit . . . . 17.5 Politiques de remplacement 17.6 Dfauts de cache . . . 17.7 Hirarchie de cache . . 17.8 Sparation des caches . . Bibliographie . . . . . . 18 Bibliographie . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

116 . 122 . 122 . 122 . 122 . 123 . 124 . 124 . 125 . 126 . 126 . 126 . 126 . 127 . 128 . 130 . 130 . 131 . 131 . 133 . 133 .

- iii -

Vous aimerez peut-être aussi