141

Pas a Pas Vers l Assembleur Par Lord Noteworthy

Embed Size (px)

Citation preview

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 2

    Table des matires Introduction......6

    Assembleur, philosophieet atouts ...8

    Avantages et inconvnients de lassembleur...9

    Que programmer en Assembleur ? .10

    Chapitre 1 : Notions de base....10

    Les systmes de numration......10

    Dcimale.11

    Binaire....11

    Octal13

    Hexadcimale..13

    Les conversions entre bases numrales..14

    Dcimale Binaire..14

    Binaire Dcimale.16

    Binaire Hexadcimale16

    Hexadcimale Binaire 17

    Ya tils des nombres ngatifs en binaire ?......17

    Oprations Arithmtiques ....19

    Laddition...................19

    La soustraction20

    Astuce20

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 3

    Chapitre 2 : Organisation de l'Ordinateur21

    Un microprocesseur, en deux mots.....22

    Historique..22

    Notations...................25

    Le mode de fonctionnement des x86.....26

    Organisation interne du microprocesseur...27

    Registres gnraux...29

    Registres de segments....31 Registres doffset...31 Registre de flag..32

    Les registres MMX et SIMD...32

    Les registres spcialis.s ..33

    La pile33

    La mmoire..................34 La pagination mmoire.......................34

    Organisation de la mmoire

    35

    Chapitre 3 : Instruction du microprocesseur..37 Anatomie dun programme en assembleur....37

    Structure des instructions.37

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 4

    tiquette.38 Mnmonique.38 Oprandes.38

    Ecrire des commentaires dans le programme39 Lisibilit et prsentation.39

    Notes et abrviations.40 Oprandes.....................41 Liste des instructions par fonctionnalits..41

    Instructions de dplacement et daffectation.....42

    Instructions logiques et arithmtiques..42

    Instructions de manipulation de bits........42 Instructions de dcalage...43 Instructions de traitement..............43

    Instructions de contrle et de test.43

    Saut inconditionnel.................43

    Saut conditionnel....44

    Chapitre 4 : Les outils ncessaires au programmeur.46

    Bon, de quoi d'autre a-t-on besoin ? .47

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 5

    Installation de Masm...51

    Configuration de RadAsm....................53

    Crer son premier projet

    Prsentation rapide de l'interface..60

    ..57

    Squelette dun programme en Assembleur.63

    Chapitre 5 : Lenvironnement Windows......65

    Chapitre 6 : Structure de donnes70

    Les variables et les constantes..................70

    Porte des variables

    Directive ALIGN...73

    ..73

    Directive dgalit (=)...76

    Loprateur PTR..................77

    Loprateur TYPE...78

    Les tableaux

    Loprateur LENGTHOF80

    .78

    Les structures..80

    Les unions.82

    Les pointeurs...83

    Les oprateurs ADDR & OFFSET84

    Les crochets.85

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 6

    Chapitre 7 : Principe de base de la programmation Windows.88

    Communication par le biais de message...

    Programmation vnementielle...89

    .89

    La notion dindpendance vis--vis des priphriques..90

    Stockage des informations des programmes sous forme de ressources.....90

    Des types de donnes tranges90

    Convention spciale de nommage.91

    La programmation Windows en pratique

    ..91

    Chapitre 8 : Une simple fentre.92

    La classe de fentre..93

    Cration dune fentre...98

    Les Tests.................102

    La directive conditionnelle .IF ............102

    Gnration automatique du code ASM..103

    Comparaison signes et non signs..103

    Comparaisons d'entiers signs.103

    Comparaisons de registres104

    Expressions composes.104

    Les boucles.105

    Directives .REPEAT et .WHILE.............106

    Sortir de la boucle107

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 7

    La directive Goto..107

    Traitement des messages..108

    La procdure de fentre

    .....................109

    Conclusion et remerciement..137

    Annexes......138

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 8

    Bonjour et bienvenue dans ce Guide !

    Je me nomme Lord Noteworthy et je suis lauteur de ce Guide. galement le webmaster du site http://LordNoteworthy.c.la .

    Alors a y est ? Vous avez dcid de se lancer la programmation en Assembleur mais vous ne savez pas trop par o commencer ? Bon, je vais essayer de vous donner quelques bases, ce qui croyez-moi, n'est pas vident ...

    Mon obsession pour lAssembleur ma normment incit cerner ce qui est juste savoir, car pour tout expliquer, cela demanderait quelque milliers de pages, crites en tous petits caractres. Nanmoins, partir de nombreux exemples, vous allez vous familiariser avec la syntaxe de ce langage et apprendre travailler avec les instructions. Vous ferez connaissance de quelques principes de base sur larchitecture des systmes informatiques, dans le cadre concret de la famille des processeurs IA-32 Intel et renforcerez vos comptences sur la syntaxe MASM. Enfin vous aurez un aperu de larchitecture Win32. Il nest nullement indispensable davoir une certaine exprience en programmation pour tirer parti de ce Guide, seulement de la patience, de la volont, de la dtermination dapprendre et de comprendre. Certes si vous avez touch tout autre langage de haut niveau que l'assembleur, vous allez vous sentir plus laise, hors langages de balisage tels que lHTML ne vous servira surtout pas.

    Pour finir je tiens prciser certaines petites choses. Tout dabord ce texte, beaucoup de personne auraient pu lcrire. De plus je ne suis pas parfait, il n'est pas improbable que ce Guide contienne quelques erratas, des incohrences ou d'autres petites choses qui m'auraient chappes, si vous en dcelez une, merci de m'en faire part pour que je les corrige au plus vite possible.

    Bon, eh bien sur ce, bonne lecture, et bon apprentissage tous, en gardant l'esprit la profonde maxime du regrett professeur Shadoko : La plus grave maladie du cerveau, c'est de rflchir .

    Introduction

    Le dbut du document aborde des notions importantes en Assembleur et ncessaires pour bien comprendre la suite. Vous serez sans doute un peu du de ne pas faire des choses extrmement puissantes immdiatement, mais patience : qui veut aller loin mnage sa monture. Ainsi, avant de nous

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 9

    plonger dans les arcanes de la programmation en Assembleur au sens large du terme, nous allons commencer par poser un certain nombre de bases.

    Contrairement ce qu'on dit souvent, un ordinateur ce n'est pas une machine trs intelligente, c'est une machine qui donne lillusion dtre intelligente car elle calcule trs vite, part a, un ordinateur a ne sait faire que des calcules trs simple, encore pas avec tous les chiffres, mais uniquement deux chiffres, le 0 et le 1. Le langage de chaque ordinateur est le langage machine o les instructions et les donnes sont reprsentes par des combinaisons de bits, les fameux zros et uns. Lorsquun ordinateur traite du texte, du son, de limage, de la vido, il traite en ralit des nombres.

    Les langages de programmation ont considrablement volu depuis les premiers calculateurs labors pour assister les calculs de trajectoire dartillerie durant la seconde guerre mondiale. A cette poque l, les programmeurs travaillaient en langage machine, ce qui consistait grer des chaines trs longues composes de 1 et de 0, ce fut un vritable travail de fourmi. Bientt, les premiers assembleurs rendirent les instructions machine plus intelligibles et plus facile utiliser. Dans les annes soixante, pour faciliter encore la programmation, on a mis en place d'autres langages de programmation plus abordables, plus comprhensible par lhumain, ces langages sont dits volus parce quils donnent la possibilit aux programmeurs dutiliser une syntaxe proche de la langue anglaise, avec des instructions et des mots comme let variable = 10.

    Dans des discussions passionnes sur les comptences de chacun, il est rare que quelqu'un ne sorte pas l'idiotie suivante :

    Le langage machine c'est plus rapide que l'assembleur ! Ou pire encore : L'assembleur, c'est gnial, c'est plus rapide que le langage machine !

    Rassurer vous, si vous avez faire ce genre de personnes, ne vous sentez pas ignorant, il s'agit de personnes qui ne savent pas de quoi elles parlent, et qui se permettent de porter des jugements. Le langage machine c'est exactement la mme chose que l'assembleur, seule l'apparence diffre. Je m'explique. Si vous voulez mettre la valeur 5 dans EAX vous taperez :

    Nessayer pas den comprendre le contenu, vous navez mme pas encore abord la chapitre 1.

    Cette instruction en assembleur sera quelque chose qui ressemble a en binaire : 1100110 10111000 101

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 10

    Quand votre microprocesseur rencontrera la valeur binaire 1100110 10111000, il saura quil s'agit de l'instruction MOV EAX, ? Et que vous allez lui fournir la suite une valeur immdiate qu'il devra mettre dans EAX. Si vous aviez tap directement les bits un un, le rsultat aurait t exactement le mme, vous auriez simplement beaucoup souffert pour rien, vous auriez alors programm en langage machine. L'assembleur, se limite en fait directement transcrire en code machine votre programme assembleur. L'assembleur ne modifiera en rien vos initiatives, la vitesse d'excution est donc exactement la mme, que le programme ait t programm en langage machine bit par bit, ou en assembleur. Si par contre, vous programmez en Pascal ou en langage C, vous ne saurez pas ce que le compilateur fera de votre programme quand il le transformera en un programme machine directement comprhensible par le microprocesseur. Vous verrez, que, quand vous programmerez si par mgarde vous allez continuer l'excution de votre programme dans des donnes, le microprocesseur se retrouvera alors avec des instructions incohrentes, et plantera assez vite.

    Comme vous avez pu le constater, tout cela nas rien de sorcier, le binaire que traite lordinateur avec facilit ne convient pas au programmeur qui commet souvent, par manque dattention, des erreurs trs difficiles ensuite dtecter, les nombres binaires se ressemblent, surtout aprs travaill avec eux pendant plusieurs heures, prtant confusion et sans signification apparente. Il parait donc vident que ce type d'criture est difficilement lisible pour nous, tre humains.... Un programmeur pourra tenter de se souvenir de quelques codes binaires mais il pourrait investir ses efforts dans des tches plus productives. Lide vient davoir un programme qui effectue la traduction langage assembleur langage machine, cest ce programme qui est appel lassembleur.

    Il est bien sur possible de traduire un programme crit en assembleur la main en remplaant chaque instruction son quivalente en binaire ; cest ce quon lappelle lassemblage manuel, mais croyez moi nombreuses sont les difficults associes cette conversion. Voici un petit exemple :

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 11

    Haut niveau

    Langage humain : (Par exemple, langlais)

    Langage de programmation : Haut niveau (Par exemple, le C)

    Compilation

    Langage de programmation : (lAssembleur)

    Langage Machine : Assemblage (code binaire)

    Bas niveau

    Demble on comprend mieux lintrt de lassembleur et des langages volus qui soulagent les programmeurs d'un fardeau norme, et qui prsentent une facilit de programmation bien plus grande que le langage machine.

    Assembleur, philosophie et atouts

    Lassembleur abrg ASM est le langage de programmation (un code de communication, permettant un tre humain de dialoguer avec sa machine) de plus bas niveau. Cela signifie quil est trop proche du matriel, qui oblige le programmeur se soucier de concepts proches du fonctionnement de la machine, comme la mmoire.

    Heureusement, ils existent des langages hauts niveau, linstar de Visual Basic, Delphi, C++, Java..., ce sont les langages les plus utiliss de nos jours, qui permettent au programmeur de s'abstraire de dtails inhrents au fonctionnement de la machine. Il permet de manipuler des concepts bien plus

    If the line is not busy, connect to the internet;

    Else, wait

    If (line ! = busy) connect (Internet);

    Else wait (5)

    01010111010101001110101010101010111110101000101010101111110101010101000100000010101111010101010111010101011010101001

    CMP EAX, EBX JNE Failed ; JMP end Failed: End:

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 12

    labors. En fait, les avantages qui offrent les langages haut niveau sont normes: Ils assurent une meilleur portabilit, c'est--dire que l'on pourra les faire fonctionner sans gure de modifications sur des machines ou des systmes d'exploitation diffrents, lcriture dun programme est beaucoup plus facile et prend donc beaucoup moins de temps, la probabilit dy faire des fautes est nettement plus faible, la maintenance et la recherche des bugs sont grandement facilits.

    Si nous rsumons, le terme "Assembleur" dsigne tour tour deux choses diffrentes, mais apparentes : le langage de programmation de plus bas niveau accessible facilement un humain et un logiciel transformant un fichier source contenant des instructions, en un fichier excutable que le processeur peut comprendre.

    Avantages et inconvnients de lassembleur

    Evidemment, rien n'est parfait. Jetons un petit coup d'il sur le revers de la mdaille:

    Le programme est long et fastidieux crire.

    Les programmes crits en assembleur sont trs peu portables vers une autre architecture, existante ou future.

    Programmer en assembleur est rserv aux dveloppeurs chevronns. Raliser un programme complet avec demande normment d'efforts et d'exprience. Difficult de localisation d'erreurs au cours de la mise au point du programme. Pendant longtemps, la principale proccupation des programmeurs tait de concevoir des

    applications trs courtes pouvant sexcuter rapidement. Il faut dire que la mmoire cotait chaire, tout comme le traitement de la machine. Avec la miniaturisation des ordinateurs, laugmentation de leur performance et la chute des prix, les priorits ont chang. A lheure actuelle, le cot de dveloppement dpasse largement celui dun ordinateur, limportant de faire des programmes performants, bien construis et faciles mettre jour, on na plus besoin dutiliser lassembleur

    Comme tout langage de programmation, lassembleur a ses inconvnients, mais aussi ses avantages:

    Tous les langages de programmation sont des hritiers plus ou moins directs de ce langage lmentaire quest lassembleur, ce dernier peut vous donner la logique ncessaire pour programmer en nimporte quels langages, ce langage trouve sa place dans l'ensemble des applications, sans oublier que n'importe quel programme, crit dans n'importe quel langage est finalement traduit en langage machine pour tre excut.

    On a la possibilit de faire tout et n'importe quoi avec la mmoire. L'ASM n'a pas de limite et de scurit. Autant il peut tre utile, autant il peut dtruire ;)

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 13

    Les programmes faits en ASM sont plus petits, plus rapides et beaucoup plus efficaces que ceux fait avec des compilateurs, pourvu quil soit bien crit. Une des raisons de cette rapidit d'excution rside dans le compilateur. En fait, quand on code de quoi en C++, le compilateur doit convertir toutes les instructions en assembleurs, puis par la suite le convertir en langage machine tandis que si on code en ASM, le compilateur a juste besoin de le convertir en langage machine. Jusque l a change rien puisque les deux finissent en langage machine mais les compilateurs de C++, quand ils convertissent des trucs en assembleur, ils rajoutent pleins d'instructions inutiles au fonctionnement de base du programme (c'est comme faire un document html avec un diteur html). Tout le code qui rajoute va ralentir l'excution du programme.

    C'est le seul langage permettant de modifier un programme compil dont on na pas les sources (utiles pour le Reverse Engineering entre autres).

    On peut l'insrer dans des langages de plus haut niveau pour les parties ncessitant d'tre optimiser, d'ailleurs bon nombre de langages de programmation permettent, afin de combler leurs lacunes (vitesse d'excution, accs aux priphriques, etc.), d'appeler des routines crites en assembleur.

    Vous voulez apprendre quelque chose de nouveau, que vous allez trouver du fun le faire et lapplique et que vous nallez jamais le dplorer

    Et, cerise sur le gteau, le fait que l'ASM est trs complique n'est pas vraiment vrai.

    L'assembleur se rvle tre un langage bien part, son apprentissage poursuit double objectif, dune part avoir une comprhension plus profonde de la faon dont fonctionne lordinateur, dautre part vous donnez des atouts considrables pour la comprhension et la matrise de tous les autres langages de programmation.

    Que programmer en Assembleur ?

    Il est important de savoir ou et quand il faut utiliser l'ASM afin d'avoir un programme le plus performant tout en conservant des temps de dveloppement les plus courts possibles, lASM

    pourra vous tre utile dans plusieurs cas :

    Tout ce qui doit tre optimis au niveau de la taille, par exemple pour programmer un virus... Lorsque la vitesse dexcution est un facteur critique et que la moindre microseconde est prcieuse, ou ne peut pas tre fait avec autre chose que de l'assembleur, par exemple un driver de disque dur, un secteur de boot, ou une routine d'affichage de polygones/triangles en 3D...

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 14

    Bref, lassembleur est au programmeur ce que la cl de 12 est au mcano, le micro au chanteur, la plume l'crivain, ce que le sens de la chute tait Pierre Desproges ^^

    Chapitre 1 : Notions de base

    Vu que lassembleur est qualifi comme tant le langage de programmation le plus bas niveau, il dpend donc fortement du type de processeur. Ainsi il n'existe pas un langage assembleur, mais un langage assembleur par type de processeur. Il est donc primordial davoir un minimum de connaissances techniques. Nous verrons ensemble certains points essentiels la bonne comprhension de la suite dinformations dveloppes dans ce guide savoir les termes techniques, les conventions, les bases numrales, les diffrents types de reprsentations, la mmoire et le microprocesseur. Cest l en effet que se trouvent les principales difficults pour le dbutant. Ne soyez pas rebut par labstraction des concepts prsents dans les premiers paragraphes : il est normal que durant la lecture, beaucoup de choses ne soient pas claires travers vos esprits. Tout vous semblera beaucoup plus simple quand nous passerons la pratique dans le langage assembleur.

    Ces informations permettront de rafrachir ou denrichir vos connaissances dans ce domaine.

    Les systmes de numration Nous allons aborder un aspect trs important de la programmation en assembleur : le systme de numration. En informatique et en lectronique numrique, on emploie plusieurs formes de numration. Les quatres bases les plus employes sont les suivantes : binaire, octale, dcimale, hexadcimale. Voyons en dtail ces diffrentes bases.

    Dcimale

    Depuis la nuit des temps, l'homme a eu besoin de compter et de calculer. Selon les civilisations, divers systmes de numration on t mis en place puis abandonns.

    A l'heure actuelle, nous utilisons le systme de numration dcimal. Ce systme s'est impos en Europe partir du 10me sicle. Aujourd'hui le systme dcimal est quasiment universel. Lide de ce systme rside dans le fait que nous possdons dix doigts, lcriture dcimale ncessite donc lexistence de 10 chiffres qui sont 0, 1, 2, 3, 4, 5, 6, 7, 8, et 9.Lorsque nous crivons un nombre en mettant certains de ces chiffres les uns derrire les autres, lordre dans lequel nous mettons les chiffres est capital. Ainsi,

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 15

    par exemple, 4678 nest pas du tout le mme nombre que 8647. Et pourquoi ? Quelle opration, quel dcodage mental effectuons nous lorsque nous lisons une suite de chiffres reprsentant un nombre ?

    Le problme est que nous sommes tellement habitus faire ce dcodage de faon instinctive que gnralement nous nen connaissons plus les rgles. Mais ce nest pas trs compliqu de les reconstituer. Considrons par exemple le nombre 4678. Il est compos des chiffres des milliers (4), des centaines (6), des dizaines (7), et des units (8).

    On peut donc crire :

    4687 = 4000 + 600 + 80 + 7

    Ou bien encore :

    4687 = 4 1000 + 6 100 + 8 10 + 7

    Dune manire lgrement diffrente, mme si cela parat un peu bbte :

    4687 = (4 1000) + (6 100) + (8 10) + 7

    Arriv ce stade de la comptition, les matheux notent la ligne ci-dessus laide du symbole de puissance. Cela donne :

    4687 = (4 103) + (6 x 102) + (8 x 101) + (7 x 100

    En rappel, tout nombre lev la puissance 0 est gal 1.

    )

    Et voil, nous y sommes. Un nombre peut donc tre dcompos sous la forme de la somme de chacun des chiffres qui le composent, multiplis par la dimension de la base l'exposant de leur rang. Cette mthode n'est pas valable uniquement pour les nombres dcimaux.

    Binaire

    Un ordinateur n'ayant pas de doigts, compter en base dcimale ne lui est pas particulirement adapt. La base 2, plus connue sous le nom de la base binaire, l'est par contre beaucoup plus. Pour des raisons technologiques, lordinateur ne peut traiter quune information code sous forme binaire. Le courant lectrique passe ou ne passe pas, quon peut interprter en 0 ou 1. Dans la ralit physique il ny a pas de 0 de 1 qui se balade au cur de lordinateur. Le choix du 0 et de 1 est une pure convention, une image commode, que lon utilise pour parler de toute information binaire, et on aurait pu choisir nimporte quelle paire de symboles leur place, quelque chose qui ne peut avoir que de tats : par exemple, ouvert ou ferme, vrai ou faux, militaire ou civil, libre ou occup

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 16

    En base 2, tout nombre scrit laide des deux chiffres 0 et 1, appels bits (BInary digiT). C'est la plus petite unit d'information manipulable par une machine numrique. Or un bit n'est pas suffisant pour coder toutes les informations que l'on souhaitera manipuler. On va donc employer des groupements de plusieurs bits.

    Un groupe de 4 bits sappelle un quartet (Nibble en anglais). Un groupe de 6 bits sappelle un hexet. Un groupe de 8 bits sappelle un octet (Byte). Un groupe de 16 bits, soit deux octets, est appel un mot (Word). Un groupe de 32 bits, soit deux mots, est appel un double mot (Dword). Un groupe de 64 bits, soit deux doubles mots, est appel un (Qword).

    Notez l'utilisation d'un B majuscule pour diffrencier Byte et bit. Il existe des units de manipulation pour les trs grandes valeurs. Mme si elles ne sont pas employes par les micro-ordinateurs actuels, il est bon den connatre lexistence.

    Un kilo-octet (Ko) = 1000 octets. Un Mgaoctet (Mo) = 1000 Ko = 1000000 octets. Un Gigaoctet (Go) = 1000 Mo = 1000000000 octets. Un Traoctet (To) = 1000 Go = 1000000000000 octets.

    Les bits sont gnralement regroups par 4 ou 8 bits. Dans la reprsentation binaire, on distingue les deux bits dextrmit dun nombre :

    Le bit de poids fort (Most Significant Bit, ou MSB) est le bit, dans une reprsentation binaire donne, ayant la plus grande valeur, celui le plus gauche. Exactement comme dans le nombre 189, c'est le chiffre le plus gauche qui le plus de poids, la valeur la plus forte.

    Le bit de poids faible (Least Significant Bit, ou LSB) est pour un nombre binaire le bit ayant dans une reprsentation donne la moindre valeur, celui le plus droite. Exactement comme dans le nombre 189, c'est le chiffre le plus droite qui le moins de poids, la valeur la plus faible.

    De mme, si lon dcoupe un nombre en deux, le premier paquet gauche est appel paquet de poids faible, le second paquet droite est appel paquet de poids fort. Ainsi un mot est compos de 2 octets :

    1 octet de poids fort (Least Significant Byte).

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 17

    1 octet de poids faible (Most Significant Byte). Si on fait un schma de ce quon vient de dire, on se retrouve avec ce qui suit :

    10100101011010110101001000010101 M.S.Bit l.S.B Les oprations arithmtiques simples telles que l'addition, la soustraction, la division et la multiplication sont facile effectuer en binaire. Octale Compter en octal, cest comme compter en dcimal, si on nutilise pas ses pouces - Tom Lehrer. Comme vous le devinez srement, tous comme on peut dire que le binaire constitue un systme de codage en base 2, le dcimal un systme de base 10, vous laurez compris loctal est un systme de base 8. Ce systme utilise 8 symboles : 0, 1, 2, 3, 4, 5, 6, 7. Il nest plus gure employ aujourdhui, puisquil servait au codage des nombres dans les ordinateurs de premire gnration. Le systme octal a cd la place au systme hexadcimal. Etant donne que ce systme de numration nest plus vraiment employ, on ne sattardera pas davantage sur le sujet !

    Hexadcimale La notation hexadcimale consiste compter non pas en base 2, 8, ou 10, mais en base 16. Cela ncessite d'avoir 16 chiffres. En dcimale vous comptez comme a : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, Et bien en hexadcimale on compte de cette manire : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, Pour les dix premiers, on na t pas cherch bien loin : on a recycl les dix chiffres de la base dcimale, l il nous manque encore 6 chiffres, plutt quinventer de nouveaux symboles, on a alors convenu de les reprsenter par les premiers lettres de lalphabet. Ainsi par convention, A vaut 10, B vaut 11 et ainsi de suite jusqu F qui vaut 15.

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 18

    La raison pour laquelle l'hexa est utile est que la conversion entre l'hexa et le binaire est trs simple. Avec lavancement de la technologie, les nombres binaires sont devenus de plus en plus longs et rapidement incomprhensibles. Le systme hexadcimal est venu pour freiner l'accroissement en longueur des nombres binaires, il fournit une faon beaucoup plus compacte pour reprsenter le binaire, vous le voyez lhexadcimal comporte de nombreux avantages, on peut reprsenter 16 valeurs avec seulement un chiffre, alors quil en faut deux pour la dcimal, et quatre pour le binaire. Voyons voir cela de plus prs, avec 4 bits, nous pouvons coder 2 2 2 2 = 16 nombres diffrents. En base seize, 16 nombres diffrents se reprsentent avec un seul chiffre, de mme quen base 10, dix nombres se reprsentent avec un seul chiffre. Afin d'viter tout risque d'erreur entre bases, il est recommand d'crire un :

    "b" la fin d'un nombre binaire. "d" la fin d'un nombre dcimal (base par dfaut). "o" la fin d'un nombre octal. "h" la fin d'un nombre hexadcimal, toujours en minuscules, afin de ne pas confondre avec

    les "chiffres" hexadcimaux B et D. Par exemple : 11011b = 27d = 33o =1Bh

    Et enfin, la numration binaire, comme les autres systmes de numration, noblige pas la reprsentation des valeurs nulles ou inutiles, par exemple :

    Le nombre 220d = 11011100b est reprsentable sur 8 bits. Le nombre 16d = 00010000b est reprsentable sur 5 bits, ce qui donne rellement en

    omettant les chiffres zro inutiles 10000b. Le tableur ci-dessous montre lquivalence de reprsentation de nombre allant de 0 17 :

    Dcimal Binaire Octale Hexadcimal

    0 0000 0 0

    1 0001 1 1

    2 0010 2 2

    3 0011 3 3

    4 0100 4 4

    5 0101 5 5

    6 0110 6 6

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 19

    7 0111 7 7

    8 1000 10 8

    9 1001 11 9

    10 1010 12 A

    11 1011 13 B

    12 1100 14 C

    13 1101 15 D

    14 1110 16 E

    15 1111 17 F

    16 10000 20 10

    17 10001 21 11

    Les conversions entre bases numrales Il est indispensable de savoir faire ce genre de conversion pour tre capable de se dbrouiller avec un simple crayon pointe de graphite et une feuille de papier (on na pas toujours sous la main une calculatrice quipe de ce genre de fonction) Dcimale Binaire Prenons un nombre au hasard : 13d = 1101b. Bain, comment le 13 devient t'il 1101? Et bien c'est un petit peu comme si l'ordinateur rangeait treize boules dans une boite, une boite avec des colonnes, dans la premire colonne, en peut mettre qu'une seule boule, dans la deuxime : deux boules, dans la troisime : 4 boules, dans la quatrime : 8 boules.

    |______||_______||_______||_______| 8 4 2 1

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 20

    Attention l'ordinateur commence toujours par la plus grande colonnes et il ne fait que des colonnes pleines.

    Chaque fois qu'on a une colonne pleine c'est un 1. Chaque fois qu'on a une colonne vide c'est un 0.

    Voyons ce que ca donne avec 13 boules :

    La colonne de 8 pas de problme, on peut la remplir, ca donne un 1, il nous reste cinq boules. La colonne de 4 on peut la remplir, c'est un 1, il nous reste une boule. La colonne de 2 on ne peut pas la remplir, c'est un 0. La colonne de 1 on peut la remplir c'est un 1.

    |___1___||___1___||___0___||___1___|

    8 4 2 1 Donc, le nombre 13d correspond linformation binaire 1101b. Jusqu prsent, nous avons vu diffrents moyens de codage de nombres. Mais il est ncessaire de savoir galement comment coder des caractres alphanumriques. Par exemple lors de leur entr partir dun clavier. La mmoire de l'ordinateur conserve toutes les donnes sous forme numrique. Il n'existe pas de mthode pour stocker directement les caractres. Dans les annes 60, le code ASCII (American Standard Code for Information Interchange), qui est actuellement le plus connue et le plus largement compatible, est adopt comme standard, chaque caractre possde donc son quivalent en code numrique, par exemple la lettre M correspond au nombre 77d. Un nouveau code, plus complet, qui supplante l'ASCII est l'Unicode. Une des diffrences cls entre les deux codes est que l'ASCII utilise un octet pour encoder un caractre alors que l'Unicode en utilise deux (ou un mot). Par exemple, l'ASCII fait correspondre l'octet 41h (65d) au caractre majuscule A; l'Unicode y fait correspondre le mot 0041h. Comme l'ASCII n'utilise qu'un octet, il est limit 256 caractres diffrents au maximum. L'Unicode tend les valeurs ASCII des mots et permet de reprsenter beaucoup plus de caractres. C'est important afin de reprsenter les caractres de tous les langages du monde. Jai inclus la liste des diffrents codes ASCII ainsi que leur signification en annexe Mais comment tu fais pour faire 77 !! Regarde bien ton boulier, il n'a que (8 + 4 + 2 + 1) a fait 15. Bien cette fois ci, il suffit d'agrandir le boulier et voil:

    |______||______||______||______||______||______||______||______|

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 21

    128 64 32 16 8 4 2 1

    Avec 77 boules, on ne peut pas remplir la colonne de 128, c'est un 0. On rempli en revanche la colonne de 64, cest un 1, il nous reste 13 boules. Pas assez pour remplir la colonne de 32, c'est un 0. Pas assez non plus pour rempli la colonne de 16, c'est un 0. Assez pour remplir la colonne de 8, c'est un 1, il nous reste deux boules. Je remplis la colonne de 4, l cest un 1. Pas assez pour remplir la colonne de 2, c'est un 0. Et comme jai plus quune seule boule, je remplis la dernire colonne, cest un 1.

    |___0___||___1___||___0___||___0___||___1___||___1___||___0___||___1___|

    128 64 32 16 8 4 2 1

    Donc, la lettre M correspond linformation binaire 01001101b. Il existe une autre mthode classique pour transformer un nombre du systme dcimale dans un autre systme, par divisions successives. La mthode de dcomposition par divisions successives consiste diviser le nombre plusieurs fois (si ncessaire) dans la base choisie jusqu' obtenir un quotient nul. Tant quil sagit dune conversion dcimale binaire, on divise par 2. Les restes successifs des divisions, pris dans leur ordre inverse, forment le nombre dsir. Reprenons le mme exemple. La division entire de 77 par 2 donnes : 77 | _2_ _ | 38 |_2_ _ 1 | | 19 |_2_ _ 0 | | 9 |_2_ _ 1 | | 4 |_2_ _ 1 | | 2 |_2_ _ 0 | | 1 0 |

    1 Attention au sens de lecture

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 22

    Lcriture binaire de 77d est donc : 01001101b. Binaire Dcimale Une fois que le systme binaire est bien compris, il est facile de transposer ses principes pour comprendre le systme binaire. Je rappelle, pour trouver la valeur dun nombre binaire, il faut, linstar des bits dcimaux, multiplier la valeur du bit par la valeur de 2 expos par la position du bit moins un. Cependant, dans ce cas-ci, puisque le bit peut seulement tre 1 ou 0, le calcul revient plus une dcision dinclure la valeur ou non dans le nombre binaire qu une multiplication. Ainsi, pour trouver la valeur dun nombre binaire vous pouvez utiliser le tableau suivant :

    ------------------------------------------------------------------ 0 1 0 0 1 1 0 1 ------------------------------------------------------------------ 27 26 25 24 23 22 21 2-----------------------------------------------------------------

    0

    Do 01001101b correspond : (0 27) + (1 x 26) + (0 x 25) + (0 x 24) + (1 x 23) + (1 x 22) + (0 x 21) + (0 x 20

    En suivant les principes noncs dans la conversion binaire. Cependant il ne s'agit plus, de puissances de 2 mais de puissances de 16 puisque la base est 16.

    ) = 77d.

    Binaire Hexadcimale Pour convertir un nombre en hexadcimale, il yen a deux mthodes lune consiste faire un grand dtour, en repassant par la base dcimale. Lautre mthode consiste faire le voyage direct du binaire vers lhexadcimale. La premire mthode :

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 23

    Prenons un octet au hasard : 1011 1101. A partir de ce quon vient de voir, notre 1011 1101 deviendront : (1 27) + (0 x 26) + (1 x 25) + (1 x 24) + (1 x 23) + (1 x 22) + (0 x 21) + (1 x 20

    ) = 189d. De l, il faut repartir vers la base hexadcimale.

    Dcimale hexadcimale On utilise la mthode des divisions successives, mme principe que pour le systme binaire, sauf que lon divise par 16. On note les restes des divisions successives puis on lit ces restes en remontant. Exemple : 189 | _16_ | 11 |_16_ 13 | | 0 11 | On y est le nombre scrit donc en hexadcimal : BDh Hexadcimale Dcimale : Inversement il est ais de passer d'un nombre en hexadcimal un nombre dcimal par multiplications successives, en suivant les principes noncs dans la conversion binaire. Cependant il ne s'agit plus, de puissances de 2 mais de puissances de 16 puisque la base est 16. Exemple : BDh = (11 x 161) + (13 x 160

    = 176 + 13 )

    = 189d

    La deuxime mthode :

    Plus rapide consiste dcouper le nombre binaire en quartets, partir de la droite, puis remplacer chaque quartet par le symbole hexadcimal correspondant

    Dans l'exemple prcdent, on peut remarquer que 1011 1101 en binaire, nous conduit B D en hexadcimal.

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 24

    1011, cest 8+2+1, donc 11.

    1101, cest 8+4+1, donc 13.

    Le nombre scrit donc en hexadcimal : BD. Cest la mme conclusion quavec la premire mthode.

    Hexadcimale Binaire

    Le passage de l'hexadcimal en binaire peut se faire de la manire inverse, en convertissant les chiffres qui composent le nombre hexadcimal en leur quivalent binaire. Notez que les 0 de tte des 4 bits sont importants ! Si

    Exemple : BDh = B D On trouve donc que BDh = 10111101b.

    1011 1101

    Ya til des nombres ngatifs en binaire ?

    Bien sr que oui, jusqu prsent nous avons parl de mots binaires sans en spcifier le signe. Un nombre tel qu'on appris l'crire est appel un nombre non sign (unsigned en anglais), il est toujours positif. Au contraire, maintenant nous allons apprendre crire des nombres qui peuvent reprsenter des valeurs soit positifs, soit ngatifs. On dira qu'ils sont signs (signed). Un nombre sign nest donc pas forcment ngatif.

    Chaque bit dun octet peut occuper deux tats, il ya donc dans un octet :

    2 2 2 2 2 2 2 2 = 28

    Considrons lopration 0 1 = 1 en dcimal, elle consiste retrancher 1 de 0, et tentons de la raliser en binaire.

    = 256 possibilits. Donc il est possible de coder des nombres allant de 00000000 11111111 en binaire, soit 00 FF en hexadcimal et 0 255 en dcimal.

    0 0 0 0 0 0 0 0 0 - 1 - 0 0 0 0 0 0 0 1 ------ = ----------------------------------------------------------------------------------------- = -1 1 1 1 1 1 1 1 1 Donc 1d sera reprsent par FFh. Recommenons et soustrayons 1 -1 : - 1 1 1 1 1 1 1 1 1

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 25

    - 1 - 0 0 0 0 0 0 0 1 ------ = ----------------------------------------------------------------------------------------- = -2 1 1 1 1 1 1 1 0 So, -2d sera reprsent par FEh. Ceci dit cette mthode de dtermination de la reprsentation binaire d'un nombre ngatif n'est pas trs commode, c'est pourquoi nous allons introduire la notion de notation en complment 2. La procdure est la suivante :

    Si le nombre est positif, conversion identique. Si le nombre est ngatif:

    1. On convertit d'abord sa valeur absolue en binaire.

    2. On inverse tous les bits du nombre: les 0 deviennent des 1, les 1 deviennent des 0 (complment 1).

    3. On ajoute 1 au rsultat.

    Par exemple, pour reprsenter -2 sur 8 bits:

    2 s'crit 00000010b

    -2 s'crit donc 11111101b + 1b = 11111110b.

    Le rsultat trouv est bien le mme que prcdemment. Nous pouvons vrifier que l'opration +2 - 2 donne bien zro sur 8 bits. Le 1 situ gauche nest pas pris en compte. Par cette mthode il est donc possible de coder les nombre dcimaux compris entre -128 et 127. Le bit du poids fort de chaque octet est gal :

    0 si le nombre est positif.

    1 si le nombre est ngatif.

    Notons que cette notation en complment deux n'est pas obligatoire. C'est au programmeur de dcider si les nombres qu'il utilise sont compris entre 0 et 256 ou bien entre -128 et + 127.

    Oprations Arithmtiques

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 26

    On peut tout comme avec le dcimal effectuer des oprations standards tout comme l'addition, la soustraction la division et la multiplication. Laddition Un rappel srement inutile mais qui clarifie des choses... Quand vous faites une addition en dcimal, vous faites la somme des chiffres se trouvant dans une mme colonne :

    Si la somme est infrieure 10, alors vous posez le rsultat obtenu et passez la colonne suivante.

    Si la somme est suprieure 10, alors vous posez le chiffre des units et gardez en retenue le chiffre des dizaines.

    Si vous faites la somme de 2 nombres, alors la retenue ne pourra tre suprieure 1. Le principe est exactement le mme en binaire, on commence additionner les bits de poids faible, les bits de droite, puis on a des retenues, lorsque la somme de deux bits poids dpasse la valeur de lunit la plus grande (dans le ca binaire : 1), cette retenu est report de poids plus fort suivant... En suivant ce principe, on obtient en binaire la table daddition suivante : ___________________________________________________ Rsultat Report ------------------------------------------------------------------- 0 + 0 = 0 0 ------------------------------------------------------------------- 0 + 1 = 1 0 ------------------------------------------------------------------ 1 + 0 = 1 0 ------------------------------------------------------------------ 1 + 1 = 0 1 __________________________________________________ Pour illustrer ce principe, effectuons par exemple les oprations suivantes : 1 1 1 1 1

    1 0 0 1 0 1 1 1

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 27

    + 0 1 0 1 + 1 0 0 1 ------------------------------------- ------------------------------------- 1 1 1 0 1 0 0 0 0

    De mme en hexadcimal, il suffit de procder comme dans le systme dcimale, ainsi nous obtenons :

    A 2 Ah = 10d + 3 C Ch = 12d ---------------------- = D E

    Dsol cet exemple ne comporte pas de retenues, les nombres obtenus tant plus grand que 16 nous additionnons 4 et nous effectuons un report, en voici un qui en comporte:

    2 F Fh = 15d + 5 3 ------------------------- 1 = 7 18 4 ------------------------- = 8 22 ------------------------- = 8 2 Ainsi 2Fh + 53h = 82h. Nous pouvons constater quune table daddition en hexadcimal ou une calculatrice avec la fonction BIN, DEC, OCT, ET HEX se relve un outil prcieux.

    La soustraction

    Pour effectuer une soustraction en binaire, nous procdons de la mme faon que pour une soustraction en dcimale, il ya quatre cas possibles : _______________________________________________ Rsultat Emprunt

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 28

    --------------------------------------------------------------- 0 0 = 0 0 -------------------------------------------------------------- 0 - 1 = 1 1 -------------------------------------------------------------- 1 - 0 = 1 0 -------------------------------------------------------------- 1 - 1 = 0 0 _______________________________________________

    Voyons ce que a donne :

    1 1 1 1 0 0 0 1 0 1 0

    - 0 1 1 1 - 1 0 0 1 ------------------------------------- ------------------------------------- 0 0 0 1 0 0 0 1 En hexadcimal, a marche comme en dcimal. La seule difficult provient de ce que l'on n'apprend pas la table d'addition en hexadcimal. B+F=1A par exemple. Il faut donc rflchir un peu plus qu'en dcimal

    F 9 - A 2 -------------------- 5 7 Vous avez vu ? Ce nest pas si dur ! On pourrait, de la mme faon, illustrer le fonctionnement d'autres oprations arithmtiques en binaire, mais l ce n'est pas notre objectif. Cest tout ce qu'il faut retenir jusquici.

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 29

    Astuce Dornavant, ne vous vous souciez pas de faire ces calculs la main. La solution est beaucoup plus simple que cela. Procurez vous de votre calculatrice Windows. Pour ce faire, le moyen le plus rapide est de cliquer sur touche "Windows" + R, tapez "calc" et cliquer sur OK. Un raccourci est aussi disponible, pour les amants de la souris, dans le menu tous les programmes, dans le sous-menu accessoires. Une fois que vous avez dmarr la calculatrice, rassurez-vous que vous soyez en mode scientifique, (Affichage/Scientifique). Vous pouvez choisir le systme numrique laide des 4 boutons radios encercls (Hex = Hexadcimale, Dc = dcimal, Oct = Octale et Bin pour binaire, ensuite, cliquez sur le systme numral dans lequel vous voulez avoir la conversion.

    Cela fait dj une bonne base pour commencer

    Chapitre 2 : Organisation de l'Ordinateur

    , vous avez appris les systmes de numration. Vous devriez tre en mesure deffectuer de simples conversions facilement.

    Et c'est parti pour l'assembleur, je rassemble mon cerveau et prend mon courage deux pattes... en effet, il va m'en falloir, car aprs les explications de bases, assez facile, et que vous connaissiez sans doute dj, on va s'attaquer un gros morceau trs important dans la programmation en assembleur, puisqu'il s'agit de la gestion de la mmoire. Il est vital de comprendre comment elle est organise, et comment on y accde efficacement. D'ou le titre.

    Nous y voil. Encore un chapitre barbant... Donc comme je l'ai dit plus haut, ce chapitre est extrmement important. Car aprs a, on entrera de plein pied dans la programmation en apprenant des instructions en plus grosse quantit, puis dans les chapitres suivants, nous aborderont la structure des donnes. Donc je le souligne bien, il faut

    Pour dcrire brivement ce chapitre, je peux dj vous dire qu'il traitera de l'organisation de la mmoire, de la faon dont le processeur communique avec, les diffrents registres des processeurs Intel de la famille 80x86, les modes d'adressage de ces processeurs, ensuite nous expliquerons le fonctionnement des registres et des drapeaux ainsi que la pile. Enfin, nous verrons les premires instructions d'assembleur, lies donc la gestion de la mmoire.

    comprendre ce chapitre.

    Un microprocesseur, en deux mots

    Sans entrer dans les dtails qui seront vus en cours, nous prsentons le minimum savoir sur ce quest un microprocesseur.

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 30

    Le microprocesseur, not CPU (Central Processing Unit), est un lment indispensable dans un ordinateur. Il s'agit d'un lment semi-conducteur au silicium dont la fabrication ncessite une prcision extrme. En effet, le microprocesseur regroupe un certain nombre de transistors lmentaires interconnects, caractris par une trs grande intgration et dot des facults fonctionnelles dinterprtation et dexcution des instructions dun programme. Le microprocesseur nest pas uniquement utilis au sein des PC. De plus en plus les objets qui nous entourent sont truffs de microprocesseurs, de la voiture au tlphone portable en passant par la chaudire et la tlvision. Un microprocesseur constitue le cur de tout ordinateur: il excute les instructions qui composent les programmes que nous lui demandons dexcuter. Les instructions sont stockes en mmoire (en dehors du microprocesseur). Ces instructions (dont lensemble compose le langage assembleur) sont trs simples mais nen permettent pas moins, en les combinant, de raliser nimporte quelle opration programmable. Pour excuter un programme, le processeur lit les instructions en mmoire, une par une. Il connat tout instant ladresse (lendroit dans la mmoire) laquelle se trouve la prochaine instruction excuter car il mmorise cette adresse dans son compteur ordinal. Avant de nous intresser plus particulirement larchitecture interne dun microprocesseur, il convient de connatre lvolution impressionnante de ces composants. Historique Le concept de microprocesseur a t cr par la Socit Intel. Cette Socit, cre en 1968, tait spcialise dans la conception et la fabrication de puces mmoire. la demande de deux de ses clients fabricants de calculatrices et de terminaux Intel tudia une unit de calcul implmente sur une seule puce. Ceci donna naissance, en 1971, au premier microprocesseur du monde, le 4004, qui tait une unit de calcul 4 bits fonctionnant 108 kHz. Il rsultait de lintgration denviron 2300 transistors. A partir de cette date, un rythme trs rapide dvolution sest install. De nombreux autres modles sont apparus, de plus en plus puissants et de plus en plus complexes. Ce rythme dvolution sest maintenu sans flchir jusqu aujourdhui. Ces volutions concernent les techniques dintgrations des nombres de transistors et la frquence dhorloge des processeurs. Il y a galement dautres amliorations, comme la largeur de bus mmoire, la taille des registres ou la taille de la mmoire cache. Dans le mme intervalle de temps, leur puissance de traitement est passe de 60 000 instructions excutes par seconde par l'Intel 4004 plusieurs milliards par les machines actuelles les plus puissants. Lhistoire des

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 31

    microprocesseurs sur les trente dernires annes est certainement la plus formidable volution technologique de l'histoire humaine, tant en dure qu'en ampleur. Aujourd'hui, le multimdia puis le 3D et le temps rel. Demain, le monde virtuel ! Ce rythme d'volution effrn est appel loi de Moore (Gordon E. Moore,

    du non du prsident de la compagnie Intel qui l'a formul dans les annes 70). Il prvoyait que les performances des processeurs (par extension le nombre de transistors intgrs sur silicium) doubleraient tous les 12 mois. Cette loi a t rvise en 1975, portant le nombre de mois 18. La loi de Moore se vrifie encore aujourd'hui. Moore estime que cette volution se poursuivra jusquen 2017, date laquelle elle devrait rencontrer des contraintes lies la physique des atomes.

    Le tableau si dessous recense lvolution de la gamme des processeurs compatibles Intel x86, avec les dates des premires versions de chaque modle.

    Date Nom Nombre de transistors

    Finesse de gravure (m)

    Frquence de l'horloge

    Largeur des donnes

    MIPS

    1971 4004 2 300

    108 kHz 4 bits/4 bits

    bus

    1974 8080 6 000 6 2 MHz 8 bits/8 bits

    bus 0,64

    1979 8086 - 8088 29 000 3 5 MHz 16 bits/8 bits

    bus 0,33

    1982 80286 134 000 1,5 6 MHz 16 /16 bits bus 1

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 32

    1985 80386 275 000 1,5 16 40 MHz 32 bits/32 bits

    bus 5

    1989 80486 1 200 000 1 25 100 MHz 32 bits/32 bits

    bus 20

    1993 Pentium 3 100 000 0,8 0.28 60 233 MHz 32 bits/64 bits

    bus 100

    1997 Pentium II 7 500 000 0,35 0.25

    233 450 MHz 32 bits/64 bits

    bus 300

    1999 Pentium III 9 500 000 0,25 0.13

    450 1400 MHz

    32 bits/64 bits bus

    510

    2000 Pentium 4 42 000 000 0,18 0.065

    1,3 3.8 GHz 32 bits/64 bits

    bus 1 700

    2004 Pentium 4D Prescott

    125 000 000 0,09 0.065

    2.66 3.6 GHz 32 bits/64 bits

    bus 9 000

    2006 Core 2 Duo 291 000 000 0,065 2,4 GHz (E6600)

    64 bits/64 bits bus

    22 000

    2007 Core 2 Quad 2*291 000

    000 0,065 3 GHz (Q6850)

    64 bits/64 bits bus

    2*22 000 (?)

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 33

    2008 Core 2 Duo

    (Penryn) 410 000 000 0,045

    3,16 GHz (E8500)

    64 bits/64 bits bus

    ~24 200

    2008 Core 2 Quad

    (Penryn) 2*410 000

    000 0,045

    3,2 GHz (QX9770)

    64 bits/64 bits bus

    ~2*24 200

    Cette miniaturisation a permis: D'augmenter les vitesses de fonctionnement des processeurs, car les distances entre les

    composants sont rduites. De rduire les cots, car un seul circuit en remplace plusieurs. De crer des ordinateurs bien plus petits : les micro-ordinateurs.

    Comme dans tout circuit intgr la technologie de fabrication impose au microprocesseur des caractristiques : Le jeu d'instructions quil peut excuter. Tout microprocesseur contient en lui-mme un jeu

    d'instructions. Ces instructions, trs basiques, se rsument une tche simple, par exemple : Mettre telle valeur dans la mmoire. Ou additionner telle valeur avec telle autre valeur et mettre le rsultat dans la mmoire. Comparer deux nombres pour dterminer sils sont gaux, comparer deux nombres pour

    dterminer lequel est le plus grand, multiplier deux nombres... La complexit de son architecture. Cette complexit se mesure par le nombre de transistors

    contenus dans le microprocesseur. Plus le microprocesseur contiendra de transistors, plus il pourra effectuer des oprations complexes, et/ou traiter des chiffres des grande taille.

    Le nombre de bits que le processeur peut traiter ensemble, autrement la longueur des donnes que peut manipuler un microprocesseur. Les premiers microprocesseurs ne pouvaient traiter plus de 4 bits d'un coup. Ils devaient donc excuter plusieurs instructions pour additionner des nombres de 32 ou 64 bits. Les microprocesseurs actuels (en 2007) peuvent traiter des nombres sur 64 bits ensemble. Le nombre de bits est en rapport direct avec la capacit traiter de grands nombres rapidement, ou des nombres d'une grande prcision (nombres de dcimales significatives).

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 34

    La vitesse de lhorloge. Le rle de lhorloge est de cadencer le rythme du travail du microprocesseur. L'horloge tourne une frquence fixe (appele vitesse d'horloge). Lorsque vous achetez un ordinateur 1,6GHz, 1,6GHz est la frquence de cette horloge. L'horloge ne dcompte pas les minutes et les secondes. Elle bat simplement un rythme constant. Les composants lectroniques du processeur utilisent les pulsations pour effectuer leurs oprations correctement comme le battement d'un mtronome aide jouer de la musique un rythme correct. Le nombre de battements (ou, comme on les appelle couramment cycles) que requiert une instruction dpend du modle et de la gnration du processeur. Le nombre de cycles dpend de l'instruction. Plus la vitesse de lhorloge naugmente, plus le microprocesseur complte de calculs en une seconde.

    Notations x86 ou i86 : est la dnomination de la famille de microprocesseurs compatibles avec le jeu d'instructions de l'Intel 8086. Les diffrents constructeurs de microprocesseurs pour PC se doivent de maintenir une compatibilit ascendante afin que les anciens logiciels fonctionnent sur les nouveaux microprocesseurs. L'architecture de la srie x86 partir du Pentium a t nomme IA-32 par Intel. IA-32 (Intel architecture 32 bits) ou i386 : dsigne l'architecture partir du Intel 80386, 32 bits, qui a enfin permis de sortir du mode rel correctement, et de faire un bon multitches sur les Intel. Et d'avoir un adressage mmoire de 4 Go. IA-64 (Intel Architecture 64 bits) dsigne larchitecture des nouvelles est une architecture de processeurs Intel destines remplacer les x86. Il s'agit d'une rupture totale avec la srie x86, le jeu d'instructions n'ayant plus rien voir, ni les lments de l'architecture du processeur. Le rsultat est quelque chose de globalement nettement plus simple, donc de bien plus rapide, en donnant un contrle plus fin au logiciel sur le matriel.

    Il faut savoir que les familles de processeur ce sont succds en ajoutant leurs lots d'amliorations, et pas uniquement en matire de rapidit. Voici les principaux processeurs x86: 8088/8086, 80188/80186, 80286, 80386, 80486, 80586/pentium. 8088, 8086: Ces processeurs, du point de vue de la programmation sont identiques. Ils taient les processeurs utiliss dans les tous premiers PC. Ils offrent plusieurs registres 16 bits : AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP, FLAGS. Ils ne supportent que jusqu' 1Mo de mmoire et n'oprent qu'en mode rel. Dans ce mode, un programme peut accder n'importe quelle adresse mmoire,

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 35

    mme la mmoire des autres programmes ! Cela rend le dbogage et la scurit trs difficiles ! De plus, la mmoire du programme doit tre divise en segments. Chaque segment ne peut pas dpasser les 64Ko. 80286: Ce processeur tait utilis dans les PC de type AT. Il apporte quelques nouvelles instructions au langage machine de base des 8088/86. Cependant, sa principale nouvelle fonctionnalit est le mode protg 16 bits. Dans ce mode, il peut accder jusqu' 16Mo de mmoire et empcher les programmes d'accder la mmoire des uns et des autres. Cependant, les programmes sont toujours diviss en segments qui ne peuvent pas dpasser les 64Ko. 80386: Ce processeur a grandement amlior le 80286. Tout d'abord, il tend la plupart des registres 32 bits (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP) et ajoute deux nouveaux registres 16 bits : FS et GS. Il ajoute galement un nouveau mode protg 32 bits. Dans ce mode, il peut accder jusqu' 4Go de mmoire. Les programmes sont encore diviss en segments mais maintenant, chaque segment peut galement faire jusqu' 4Go ! 80486/Pentium/Pentium Pro: Ces membres de la famille 80x86 apportent trs peu de nouvelles fonctionnalits. Ils acclrent principalement l'excution des instructions. Le 80586, appel Pentium pour des raisons de protection commerciale, dispose d'un bus de donnes de 64 bits et est muni d'un dispositif de prvision des branchements. Il est constitu de 2 processeurs en pipe-line parallles lui permettant d'excuter deux instructions en mme temps. Son cadencement est envisag (en 1994) jusqu' 150 MHZ. Pentium MMX: Ce processeur ajoute les instructions MMX (MultiMedia eXentions) au Pentium. Ces instructions peuvent acclrer des oprations graphiques courantes. Pentium II: C'est un processeur Pentium Pro avec les instructions MMX (Le Pentium III est grossirement un Pentium II plus rapide). Pourquoi les diffrents microprocesseurs dIntel sont-ils alors compatibles entre eux ? Tout simplement parce que chaque fois que Intel sort un nouveau processeur, toutes les instructions des processeurs prcdents sont incluses. En fait, il ny a gnralement pas beaucoup de nouvelles instructions ajoutes. Ceci nous assure que les vieux programmes (ceux crits pour de plus vieux

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 36

    microprocesseurs compatibles) peuvent parfaitement rouler (fonctionner) sur les nouveaux processeurs. Par contre, les nouveaux programmes, sils emploient les nouvelles fonctions plus performantes des nouveaux microprocesseurs, ne pourront pas fonctionner sur les microprocesseurs plus anciens. Cest ce quon appelle la compatibilit ascendante. Les nouveaux PC sont compatibles avec les anciens, mais pas le contraire. Les nouveaux Macintosh sont compatibles avec les anciens, mais pas le contraire. Les PC ne sont pas compatibles avec les Macintosh. Le mode de fonctionnement des x86 Le 8086, 8088, 80186 et 80188 nont quun mode de fonctionnement, le mode rel : 1 Mo au maximum et ils sont monotches. A partir du 80286 et surtout du 80386, il y a eu trois modes de fonctionnement. En voici le dtail :

    Le mode rel : mode par dfaut du microprocesseur, celui dans lequel est le processeur au dmarrage, et dans lequel s'excute DOS. Il fournit les mmes fonctionnalits que le 8086. Cela a plusieurs consquences, dont lune est quil nest pas possible dadresser plus que 1 Mo mmoire.

    Le mode protg : exploit par Windows partir de la version 3.1. Il tire son nom de "protg" de ses nombreuses fonctions de protection. Le terme protection signifie ici "protection contre les bugs ou les programmes malveillants". Eh oui, en mode protg, les programmes sont soumis des rgles trs strictes, qui ne sont pas rellement astreignante pour des programmeurs normaux, mais qui sont terribles ds que le programme tente de sortir de l'espace qui lui est rserv. Pourquoi donc ? Le mode protg t conu pour permettre l'existence de systmes multitches stables. Imaginons qu'une des tches commette une "erreur de protection", le systme d'exploitation la ferme, et le systme de plante pas - du moins en thorie... Par exemple, il est n'est pas possible une tche de faire des E/S sur certains ports, donc de modifier anarchiquement l'tat du matriels, ce qui pourrait entraner un plantage - seul le systme d'exploitation est autoris le faire, mais il a pour mission de contrler scrupuleusement le processus... (Et l, on voit que Windows 95 a t fait lgrement la va-vite...). Il n'est pas non plus possible de lire des portions de mmoires rservs d'autres programmes ou au systme d'exploitation, question de confidentialit et de scurit. Ce qui est trs apprciable, c'est que toutes les erreurs qui pourraient survenir dclenchent ce que l'on nomme une Exception, c'est dire une interruption dclenche par le processeur, intercepte par le systme d'exploitation, qui prend les mesures ncessaires (fermer l'application en question). Consquence immdiate : les plantages, c'est du pass !

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 37

    Le mode virtuel est un mode qui permet des programmes raliss pour le 8086 de tourner

    sur un systme multiutilisateur, comme sil y avait plusieurs processeurs dans le mme. Organisation interne du microprocesseur Maintenant que nous savons ce qu'est un microprocesseur, penchons-nous sur son organisation intrieure. En effet, un nombre trs important de divers lments est compris dans la puce de silicium que vous avez pu observer ci-dessus. En fait, un microprocesseur x86 nest pas uniquement un bloc de n millions de transistors, mais bien un assemblage intelligent et fortement optimis de blocs de transistors nomms units. Chaque unit est ddie une tche prcise. On peut les regrouper en trois parties principales. Il s'agit de :

    l'UAL (Unit Arithmtique et Logique) ; de l'Unit de commande ; et du jeu de registres ;

    L'unit arithmtique et logique est un lment particulirement important au cur du microprocesseur. L'unit arithmtique et logique est commande par l'unit de commande. Son rle et d'effectuer des oprations mathmatiques de base, comme des additions, des soustractions, des multiplications ou des divisions. L'unit arithmtique et logique est galement capable d'effectuer des oprations logiques, comme les fonctions NON, ET-Logique, OU-inclusif, OU-Exclusif, etc. Les lments que l'UAL doit traiter proviennent du jeu de registres. Le jeu de registre contient l'ensemble des registres du microprocesseur. On appelle registres des cellules mmoires qui sont loges non pas dans la mmoire RAM de l'ordinateur, mais directement sur le processeur lui mme dans le but de recevoir des informations spcifiques, notamment des adresses et des donnes stockes durant l'excution d'un programme. Il existe plusieurs types de registres, mais ils sont en nombre trs limite. Certains d'entre eux sont affects des oprations d'ordre gnral et sont accessibles au programmeur tout moment. Nous disons alors qu'il s'agit de registres gnraux. D'autres registres ont des rles bien plus spcifiques et ne peuvent pas servir un usage non spcialis. Enfin, d'autres registres sont invisibles et par consquent inaccessible au programmeur. Ces registres ne sont accessibles qu'au microprocesseur. Lorsque nous excutons un programme, l'UAL

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 38

    toujours accs ces registres. Nous verrons plus loin qu'il est possible d'affecter des valeurs notre guise aux registres gnraux. Les registres prsentent l'avantage de permettre un accs beaucoup plus rapide qu'un accs la RAM. Le microprocesseur et la mmoire RAM constituent en effet deux lments distincts d'un systme informatique et le processeur doit tout d'abord charg travers un canal toutes les donnes auxquelles il veut accder. Cela entrane naturellement un certain dlai qui peut tre vit en stockant les donnes directement dans le microprocesseur. C'est justement cela que servent les registres. Les instructions agissent sur des donnes qui sont situes soit en mmoire, soit dans des registres du processeur. Pour accder une donne en mmoire, il faut spcifier son adresse. Pour accder une donne dans un registre, il faut spcifier son nom (chaque registre possde un nom qui est une chane de caractres). On peut les regrouper en quatre catgories.

    Registres gnraux (ou de travail). Registres doffset (de dplacement, de pointeur, ou dindex). Registres de segment. Registres de flag (dtats, des indicateurs, dexceptions ou de drapeaux).

    Si lon schmatise :

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 39

    Registres gnraux Chaque gnration tant un amalgame et une amlioration des prcdents, excepts pour les 8088, 8086, 80188, 80186, et 80286 pour lesquels le registre est identique. C'est pourquoi quand je parlerai de 8086, il sera en fait question de ces 5 processeurs. Le processeur 8086 original fournissait quatre registres gnraux de 16 bits:

    AX (Accumulateur) ; BX (Base) ; CX (Compteur) ; et DX (Donnes).

    Ils ne sont pas rservs un usage trs prcis, aussi les utilise-t-on pour manipuler des donnes diverses. Ce sont en quelque sorte des registres tout faire. Chacun de ces quatre registres peut servir pour la plupart des oprations, mais ils ont tous une fonction principale qui les caractrisent. Le registre AX sert souvent de registre d'entre-sortie : on lui donne des paramtres avant d'appeler une fonction ou une procdure. Il est galement utilis pour de nombreuses oprations arithmtiques, telles que la multiplication ou la division de nombres entiers. Lorsque vous devez utiliser un registre pour une opration quelconque et que vous ne savez pas lequel utiliser, privilgiez celui-ci cest le plus optimis au niveau de la rapidit dexcution des oprations. Il est appel "accumulateur". Exemple :

    Le registre BX peut servir de base. Il est utilis pour ladressage indirect, nous verrons plus tard ce que ce terme signifie. Le registre CX est utilis comme compteur dans les boucles. Par exemple, pour rpter 10 fois une instruction en assembleur, on peut mettre la valeur 10 dans CX, crire l'instruction prcde d'une tiquette qui reprsente son adresse en mmoire, puis faire un LOOP cette adresse. Lorsqu'il

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 40

    reconnat l'instruction LOOP, le processeur "sait" que le nombre d'itrations excuter se trouve dans CX. Il se contente alors de dcrmenter CX, de vrifier que CX est diffrent de 0 puis de faire un saut "jump" ltiquette mentionne. Si CX vaut 0, le processeur ne fait pas de saut et passe linstruction suivante. Exemple :

    Chacun de ces registres peut tre dcompos en deux sous registres de 8 bits. Par exemple, le registre AX pouvait tre dcompos en AH et AL comme le montre la Figure si dessus. Le registre AH contient les 8 bits de poids fort de AX, et AL contient les 8 bits de poids faible. (H pour High et L pour Low). Au lancement des processeurs 80386 et plus rcents, tous ces registres ont t tendus 32 bits. Ainsi, le registre AX est devenu EAX (Extended AX). Pour la compatibilit ascendante, AX fait toujours rfrence au registre 16 bits et on utilise EAX pour faire rfrence au registre 32 bits. AX reprsente les 16 bit de poids faible de EAX tout comme AL reprsente les 8 bits de poids faible de AX (et de EAX). Il n'y a pas de moyen d'accder aux 16 bit de poids fort de EAX directement. Mais alors, pour travailler sur la partie haute des 32 bits, il faut employer le registre EAX ou faire une rotation des bits pour la ramener sur les 16 bits du bas accessibles via AX. Il est vident que ces quatre registres sont lis. Il lon modifie par exemple AH, cela changera AX, et par consquent EAX. Seuls AH et AL sont indpendant lun de lautre. Pour modifier la partie haute des 32 bits du registre EAX, il faut procder via le registre EAX. Par contre, pour modifier la partie basse des 32 bits, on peut procder laide du registre AX. Il est galement possible de modifier la partie haute du registre de 16 bits AX avec le registre AH, et la partie basse avec le registre AL. Il est intressant de travailler avec ces registres (AH et AL) pour la manipulation de caractres ou des donnes dont la taille ne dpasse pas un octet. Dans le tableau suivant, vous pouvez visualisez cette dcomposition :

    Registre(s) Taille

    EAX 32 bits

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 41

    AX 16 bits

    AH AL 8 bits chacun

    Les autres registres tendus sont EBX, ECX, EDX, ESI et EDI. La plupart des autres registres sont galement tendus. BP devient EBP; SP devient ESP; IP devient EIP; et FLAGS devient EFLAGS. Registres de segments Les registres 16 bits CS, DS, SS et ES sont des registres de segment. Ils indiquent quelle zone de la mmoire est utilise pour les diffrentes parties d'un programme. Contrairement aux registres gnraux, ces registres ne peuvent servir pour les oprations courantes : ils ont un rle trs prcis. On ne peut dailleurs pas les utiliser aussi facilement que AX ou BX, et une petite modification de lun deux peut suffire planter le systme. Eh oui !

    CS pour segment de code, registre permettant de fixer ou de connaitre ladresse du dbut des instructions dun programme.

    DS pour segment de donnes, ce registre est ddi la localisation de vos donnes.

    SS pour segment de pile, ce registre pointe sur la pile. Comme je ne vous ai pas encore expliqu ce qu'est la pile, j'y reviendrai plus tard.

    ES pour segment extra, ce registre est utile pour la manipulation de donnes entre plusieurs

    segments en parallle des registres DS, FS et GS.

    FS et GS pour segment extra, ces registres ont les mmes fonctionnalits que le registre DS. Il est disponible partir des processeurs 80386.

    Dans le registre CS est stocke ladresse de segment de la prochaine instruction excuter. La raison pour laquelle il ne faut surtout pas changer sa valeur directement est vidente. De toute faon, vous ne le pouvez pas. Le seul moyen viable de le faire est dutiliser des instructions telles que des sauts "JMP"

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 42

    ou des appels "CALL" vers un autre segment. CS sera alors automatiquement actualis par le processeur en fonction de ladresse darrive. Le registre DS est quant lui destin contenir ladresse du segment des donnes du programme en cours. On peut le faire varier condition de savoir exactement pourquoi on le fait. Par exemple, on peut avoir deux segments de donnes dans son programme et vouloir accder au deuxime. Il faudra alors faire pointer DS vers ce segment. ES est un registre qui sert adresser le segment de son choix. On peut le changer aux mmes conditions que DS. Par exemple, si on veut copier des donnes dun segment vers un autre, on pourra faire pointer DS vers le premier et ES vers le second. Le registre SS adresse le segment de pile. Il est rare quon doive y toucher car le programme na quune seule pile. On ne peut pas mettre directement une valeur immdiate dans un registre de segment, le microprocesseur ne le permet pas:

    Par contre :

    Registres doffset Il y a deux registres d'index et trois de pointeurs de 16 bits : SI (Index de source) et DI (Index de destination). Ils sont souvent utiliss comme des pointeurs, mais peuvent tre utiliss pour la plupart des mmes choses que les registres gnraux. Cependant, ils ne peuvent pas tre dcomposs en registres de 8 bits. Les registres 16 bits BP (Pointeur de base) et SP (Pointeur de pile) sont utiliss pour pointer sur des donnes dans la pile du langage machine et sont appels le pointeur de base et le pointeur de pile, respectivement. Nous en reparlerons plus tard. Le registre IP (Pointeur dinstruction) contient le dplacement entre le dbut du registre CS et la prochaine instruction que doit excuter le processeur (Il peut tre dangereux de manipuler ce registre car, de par sa fonction, une mauvaise utilisation risque dentraner un plantage de votre programme).

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 43

    Le registre de pointeur d'instruction IP est utilis avec le registre CS pour mmoriser l'adresse de la prochaine instruction excuter par le processeur. Normalement, lorsqu'une instruction est excute, IP est incrment pour pointer vers la prochaine instruction en mmoire. Pour ces registres, on trouve galement la capacit de dcoupage des registres de 32 16 bits prcdemment nonc dans sur la section des registres gnraux. Registre de flag Un programme doit pouvoir faire des choix en fonction des donnes dont il dispose. Pour cela, il lui faut par exemple comparer des nombres, examiner leur signe, dcouvrir si une erreur a t constate, etc. Il existe cet effet de petits indicateurs, les flags qui sont des bits spciaux ayant une signification trs prcise. De manire gnrale, les flags fournissent des informations sur les rsultats des oprations prcdentes. Ils sont tous regroups dans un registre: le registre des indicateurs. Comprenez bien que chaque bit a un rle qui lui est propre et que la valeur globale du registre ne signifie rien. Le programmeur peut lire chacun de ces flags et parfois modifier leur valeur directement. En mode rel, certains flags ne sont pas accessibles. Nous nen parlerons pas. Nous ne commenterons que les flags couramment utiliss. Nous verrons quelle utilisation on peut faire de ces indicateurs dans la troisime partie de ce tutoriel. Le registre flags permet de fixer et ce connatre ltat du processeur grce aux diffrents bits qui le composent, ce qui permet ainsi davoir tout instant ltat rsultant de lexcution dune opration par le microprocesseur. La plupart des instructions affectent ce registre. Chaque bit relate ltat spcifique de la dernire instruction excut. Aprs lutilisation de certaines instructions, il est affect et ltat de ses diffrents bits permet de prendre des dcisions, par exemple choix lors de branchement conditionnel (boucle et saut) pour vrifier sil y a une retenue aprs une opration arithmtique. Le registre FLAGS est compos de 32 bits galement appel indicateur :

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Bit 0 NT IOPF OF DF IF TF SF ZF 0 AF 0 PF 1 CF Appellation

    Les 16 premiers bits (0 15) sont considrs comme les bots de drapeau.

    31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ID VIP VIF AC VM RF

    Les case qui sont grises correspond aux bits rservs ou non dfinis par Intel. EFLAGS est un registre en deux groupes de bits indicateurs.

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 44

    CF (Carry Flag), en franais indicateur de retenue. Ce bit est positionn ltat haut 1 sil y a

    une retenue lissue de lexcution dune opration arithmtique.

    PF (Party Flag), indicateur de parit. Ce bit est positionn ltat haut 1 si le rsultat dune opration est un nombre pair de bit mis 1.

    AF (Auxiliary Flag), retenue auxiliaire. Ce bit est positionn ltat haut 1 si, aprs une opration, il y a une retenue.

    ZF (Zero Flag), indicateur de zro. Ce bit est positionn ltat haut 1 si, aprs une opration, le rsultat est nul.

    SF (Sign Flag), indicateur de signe. Ce bit est positionn ltat haut 1 si, aprs une opration,

    le rsultat est ngatif.

    IF (Interrupt Flag), sert empcher les appels dinterruptions lorsquil est positionn 1. Cependant, toutes les interruptions ne sont pas masquables.

    OF (Overflow Flag), indicateur de dbordement de capacit. Ce bit est positionn ltat haut 1

    si, aprs une opration, le rsultat dborde la capacit du registre. Prenons, par exemple, laddition de la valeur 0FFFFh maximale qui peut tre stocks dans un mot de 16 bits avec une valeur 1 quelconque : 0FFFFh + 1h = 10000h. Le rsultat de cette addition est la valeur 10000h et ce nombre ne tient pas sur 16 bits ! Il y a donc un dpassement ! Cet indicateur sert galement signaler des dbordements lors de lutilisation darithmtique sign (-32767 32768 contre 0 65535).

    Il en existe dautres part ceux quon a vu prcdemment, ce sont les registres MMX et SIMD mais nous ne les utiliserons pas ici.

    Les registres MMX et SIMD

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 45

    Les applications multimdias et de communication devenant de plus en plus gourmandes en calcul, les fondeurs de microprocesseurs ont t obligs de penser une nouvelle faon d'utiliser les donnes. Ces registres sont ddis la manipulation des donnes multimdias, ils sont en virgule flottante. Les registres MMX sont disponibles depuis les Pentium MMX, ils ont une capacit de 64 bits. Les registres SIMD sont des versions tendues 128 bits des registres 64 bits MMX. Les registres SIMD ne sont disponibles que depuis les Pentium III.

    Les huit registres MMX MM0 MM7 ; Les huit registres SIMD XMM0 XMM7.

    A noter que certains assembleurs ne grent pas les dernires volutions des processeurs 80x86 dIntel, et en particulier la gestion des 8 registres SIMD, et des 47 instructions qui en permettent la manipulation.

    Les registres spcialiss Il existe un certain nombre de registres qui sont faiblement documents. Ces registres existent depuis le 386, ils servent entre autre pour la gestion du mode protg et la mise au point des programmes.

    Les cinq registres de contrle sont CR0 CR4 (Control Register). Les huit registres de mise au point (Debug) sont DR0 DR7 (Debug Register). Les cinq registres de teste sont TR3 TR7 (Test Register). Le registre GTDR (Global Descriptor Table Register). Le registre ITDR (Interrupt Descriptor Table Register). Le registre LDTR (Local Descriptor Table Register). Le registre TR (Task Register).

    La pile La programmation d'un ordinateur ncessite l'usage (d'au moins) une pile. Une pile est une rgion de la RAM o lon va stocker ou retirer des informations, elle est structure linairement et dont on ne peut manipuler que le sommet, l'image d'une pile d'assiettes : vouloir retirer une assiette du milieu conduit la catastrophe. La seule mthode d'accs consiste empiler ou dpiler des assiettes partir du sommet de la pile. Une telle structure permet de conserver en mmoire l'ordre selon lequel on y a stock des informations. En les dpilant, l'ordinateur se retrouve dans l'tat ou il y tait avant les oprations qui ont conduit des empilements successifs. L'assembleur vous fera manipuler une pile qui

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 46

    est stocke "en fond de panier", cest dire dans les adresses les plus hautes de la mmoire. (Correspondant aux 640 Ko). Une petite particularit : La base de la pile se trouv l'adresse maximale, et elle s'accrot vers les adresses basses. A l'inverse, les programmes se dveloppent sur le "tas", en bas de mmoire, juste au dessus de la zone rserve pour le systme. Pile et Tas croissent donc l'inverse l'un de l'autre. Lutilisation de la pile est trs frquente pour la sauvegarde temporaire du contenu des registres et pour le passage de paramtres lorsquun langage de haut niveau fait appel une routine en assembleur. La taille de la pile varie en fonction de la quantit dinformations quon dpose ou quon en retire. Dans l'architecture x86 32bits, le registre ESP sert indiquer l'adresse du sommet d'une pile dans la RAM. Les instructions "PUSH" et "POP" permettent respectivement d'empiler et de dpiler des donnes. Les instructions "CALL" et "RET" utilisent la pile pour appeler une fonction et la quitter par la suite en retournant l'instruction suivant immdiatement l'appel. En cas d'interruption, les registres EFLAGS, CS et EIP sont automatiquement empils. Dans le cas d'un changement de niveau de priorit lors de l'interruption, les registres SS et ESP le sont aussi.

    La mmoire La mmoire est la partie de lordinateur dans laquelle les programmes et les donnes sont rangs. Sans mmoire, dans laquelle le processeur lit et crit de linformation, il ny aurait pas dordinateurs tels que nous les connaissons. Une mmoire est form dun certain nombre de cellules (ou cases), chacune de

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 47

    ces cellules contenant une certaines quantit dinformations. Chaque cellule a un numro, que nous appellerons son adresse, qui permet un programme de la rfrencer. Une analogie consiste comparer la mmoire une longue range de tiroirs alignes les un derrire les autres. Si on donne chaque tiroir un numro, en commenant par 0 pour le 1r tiroir, on dira que ce numro est l'adresse de la mmoire, dans la suite on parlera d'adresse mmoire. La coutume est (de nombreux avantages la justifie) de noter les adresses mmoires en hexadcimal. L'unit mmoire de base est l'octet. Un ordinateur avec 3 Go de mmoire peut stocker jusqu' environ 3 milliards d'octets d'informations.

    0 1 2 3 4 5 N - 1

    3A 11 B1 8A EF 6A AB

    Adresses Mmoire Ce qu'il est important d'avoir l'esprit, c'est que le microprocesseur a besoin de mmoire pour travailler : c'est dans la mmoire qu'il va lire son programme, crire des valeurs... La pagination mmoire Les processeurs IA-32 sont dots dune fonction appele pagination. Elle permet un segment dtre divis en blocs mmoire, appels pages et mesurant tous 4096 octets. Le mcanisme de pagination permet lexploitation par tous les programmes qui fonctionnent En mme temps en espace mmoire apparemment plus vaste que la mmoire physiquement install sur lordinateur. Lensemble des pages est parfois appel la mmoire virtuelle. Un systme dexploitation moderne dispose normalement dun programme appel le gestionnaire de mmoire virtuelle (VMM, Virtual Memory Manager). La pagination constitue une solution technique de premire importance un problme rencontrent sans cesse les programmeurs et les concepteurs de matriels. En effet, pour pouvoir excuter un programme, il faut le charger en mmoire, mais la mmoire est coteuse. Lutilisateur veut pouvoir lancer plusieurs programmes la fois et basculer entre lun et lautre. En revanche, lespace disque est beaucoup mois coteux. La pagination donne lillusion de disposer dune quantit quasi illimite de mmoire vive. En revanche, une partie de la mmoire tant remise sur disque dur, les accs sont beaucoup moins rapides quavec la mmoire relle.

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 48

    Pendant lexcution dune tche, il est possible de stocker certaines parties du programme sur disque si elles ne sont pas en cours dexcution. Le rsultat de cette opration est le remisage disque (swapping) de pages. La portion de la tche qui est en cours dexcution doit rester en mmoire. Lorsque le processeur besoin dexcuter les instructions qui se trouvent dans une page qui a t remise sur disque, il provoque une faute de page, ce qui force relire depuis le disque la page de code ou de donnes pour la placer en mmoire. Pour voir comment fonctionne ce systme, vous devez disposer dun ordinateur dans la quantit de mmoire vive nest pas suffisante (32 ou 64 Mo) puis lancer entre cinq et dix applications. Vous remarquerez un ralentissement des performances lorsque vous basculez dun programme lautre, car le systme dexploitation doit dporter des portions des applications de la mmoire vers le disque. Cest pour cette raison quun ordinateur fonctionne plus vite lorsquil est dot dune plus grande quantit de mmoire vive : cela vite de recouvrir trop souvent au mcanisme de pagination en laissant une plus grande portion de chaque application en mmoire.

    Organisation de la mmoire

    La mmoire des x86 est organise selon deux principes :

    Le mode segment.

    Le mode protg.

    Le premier style est le mode par dfaut de tous les processeurs x86. Ce style est contraignant dans son fonctionnement, mais il nest pas ncessaire, contrairement au mode protg, de se lancer dans de lourdes routines dinitialisation mal matrises. Ce style par dfaut pourrait tre nomm mode dadressage segment. En effet, la mmoire dans ce mode nest pas un long et unique bloc, mais une suite de "segment" Les segments ont une taille limite de 64Ko. Cette capacit dadressage de 65 535 octets est due la limite des 16 bit des premiers processeurs 8086. A lpoque, en 1981, un processeur qui tait capable dadresser plus de 64 ko, ctait trs fort, et le prix de la RAM tait prohibitif ! Pour trouver ladresse relle de la mmoire, il faut une valeur de positon appel en anglais "offset" (dcalage). Cet offset est donc le dplacement qui existe entre le premier octet du segment et loctet de la mmoire qui est pointe.

    A partir de ces deux valeurs SEGMENT: OFFSET, on peut localiser nimporte quel octet dans la mmoire adressable par le processeur. Exemple A000h:0000h

  • B y : L o r d N o t e w o r t h y / F A T A s s e m b l e r T e a m

    Page 49

    Le second style dadressage de la mmoire de ces nouveaux processeurs est spcifique du mode protg. Une fois que le processeur est initialis en mode protg, la mmoire est adressable dun seul bloc de 4Go.

    Lorsquils ont conu le mode protg, les ingnieurs dIntel en ont profit pour se dbarrasser dune srieuse limitation de leurs processeurs jusqualors en mode protg : La limitation dadressage mmoire de 1Mo a disparu. Il devient possible dadresser 16Mo sur 80286 et 4Go partir du 80386. Par ailleurs, le 80386, dot dun bus sur 32 bits, dispose de nouveaux modes dadressage mmoire.

    A partir du 80286, le processeur dispose dinstructions pour la commutation des tches; cette opration devient ds lors trs simple programmer et ainsi plus fiable. Ces processeurs comportent aussi une gestion automatique de la mmoire virtuelle, pas trs intressante sur 80286, mais relativement performante sur 80386. Le processeur a aussi la capacit de simuler autant de processeurs en mode rel que lon souhaite et de leur allouer chacun 1 Mo de mmoire. Cest ce qui se passe lorsquon lance un programme DOS sous Windows. Les programmes excuts ont limpression de tourner sur un processeur indpendant, avec un mmoire indpendante.

    Les programmes Win32 fonctionnent en mode protg depuis le 80286. Mais le 80286 c'est maintenant de l'histoire ancienne. Donc nous devons seulement nous intresser au 80386 et ses descendants.

    Windows dirigent chaque programme Win32 sparment. Ceci signifie que chaque programme Win32 aura sa disp