You are on page 1of 63

Facult des Sciences et Techniques Tanger

Dpartement Gnie lectrique

Cours

Architecture des ordinateurs

Par : Karim EL MOKHTARI

Karim.el.mokhtari@menara.ma

A l'usage des tudiants des matrises :

IEEA et Gnie informatique

-1-

Table des matires

CHAPITRE 1 : SYSTEMES DE NUMERATION ET CODAGE 1. LES SYSTEMES DE NUMERATION 1.1. DEFINITION DUNE BASE 1.2. LE SYSTEME DECIMAL 1.3. LES SYSTEMES BINAIRE, HEXADECIMAL ET OCTAL 1.4. REPRESENTATION DES NOMBRES FRACTIONNAIRES 1.5. REPRESENTATION DES NOMBRES NEGATIFS EN BINAIRE 1.6. OPERATIONS ARITHMETIQUES EN BINAIRE 2. LE CODAGE 2.1. CODIFICATION DES NOMBRES ENTIERS 2.2. CODIFICATION DES NOMBRES REELS (NORME IEEE 754) 2.3. CODE BINAIRE REFLECHI OU CODE GRAY 2.4. CODE BCD (BINARY CODED DECIMAL) 2.5. CODE ASCII (AMERICAN STANDARD CODE FOR INFORMATION INTERCHANGE) CHAPITRE 2 : GENERALITES SUR LES MICROPROCESSEURS 1. STRUCTURE D'UN SYSTEME A MICROPROCESSEUR 1.1. LE MICROPROCESSEUR 1.2. LA MEMOIRE ET LE BUS 1.3. LES PERIPHERIQUES 2. ARCHITECTURE D'UN MICROPROCESSEUR 2.1. L'UNITE ARITHMETIQUE ET LOGIQUE 2.2. L'UNITE DE CONTROLE 2.3. LES REGISTRES 2.4. CARACTERISTIQUES D'UN MICROPROCESSEUR CHAPITRE 3 : LE MICROPROCESSEUR INTEL 8086 1. 2. 2.1. 2.2. 3. 4. 4.1. 4.2. CARACTERISTIQUES DU 8086 STRUCTURE INTERNE DU 8086 FONCTIONS DE LA BIU FONCTIONS DE L'EU ORGANISATION DE L'ESPACE MEMOIRE LES REGISTRES DU 8086 LES REGISTRES DE CALCUL LES REGISTRES D'ADRESSAGE
-2-

5 5 5 5 6 8 8 9 10 10 11 12 12 12 15 15 15 15 18 19 19 19 20 20 21 21 21 22 22 22 23 23 23

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

4.3. LES REGISTRES DE SEGMENTATION 4.4. LES REGISTRES DE CONTROLE 5. LES MODES D'ADRESSAGE 5.1. MODE REGISTRE 5.2. MODE IMMEDIAT 5.3. MODE DIRECT 5.4. ADRESSAGE INDIRECT 6. LES INSTRUCTIONS DE LA FAMILLE INTEL 80X86 6.1. RESUME DES PRINCIPALES INSTRUCTIONS 6.2. LES SAUTS 7. CODAGE DES INSTRUCTIONS CHAPITRE 4 : LA PILE ET SES UTILISATIONS 1. STRUCTURE DE LA PILE 2. ACCES A LA PILE 2.1. L'EMPILEMENT 2.2. LE DEPILEMENT 3. UTILISATIONS DE LA PILE 3.1. STOCKAGE TEMPORAIRE 3.2. LES APPELS AUX SOUS-PROGRAMMES ET LA PILE 3.3. PASSAGE DES PARAMETRES A UN SOUS-PROGRAMME CHAPITRE 5 : LES INTERRUPTIONS 1. INTRODUCTION 2. TYPES D'INTERRUPTIONS 2.1. DEFINITION D'UNE INTERRUPTION 2.2. TYPES ET PROPRIETES DES INTERRUPTIONS 3. APPLICATION 3.1. METHODE PAR SCRUTATION 3.2. METHODE PAR INTERRUPTION CHAPITRE 6 : LES ENTREES/SORTIES 1. 2. 3. 4. 5. 6. 6.1. 6.2. INTRODUCTION NOTION DE CONTROLEUR OU DE CIRCUIT D'INTERFACE COMMUNICATION ENTRE LE MICROPROCESSEUR ET UN CIRCUIT D'INTERFACE ACCES AUX REGISTRES D'UN CIRCUIT D'INTERFACE APPLICATION : LE CIRCUIT D'INTERFACE SERIE LE CIRCUIT DINTERFACE PARALLELE 8255 CONNEXION DU 8255 AU MICROPROCESSEUR PROGRAMMATION DU 8255

24 26 27 27 28 28 28 30 31 37 39 41 41 41 41 42 43 43 43 45 48 48 49 49 49 51 51 51 53 53 53 53 54 54 54 55 55

CHAPITRE 7 : INITIATION A LA PROGRAMMATION SYSTEME

57

-3-

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

1. 2. 3. 3.1. 3.2. 3.3. 3.4. 4. 4.1. 4.2. 4.3.

INTRODUCTION ACCES AUX RESSOURCES MATERIELLES STRUCTURE DUN PROGRAMME EN ASSEMBLEUR 80X86 DECLARATION DES SEGMENTS DECLARATION DES DONNEES ET DE LA PILE EXEMPLE DE PROGRAMME APPEL AUX FONCTIONS DU DOS ET DU BIOS COMPILATION DUN PROGRAMME EN ASSEMBLEUR 80X86 EDITION DU PROGRAMME COMPILATION EXECUTION DU PROGRAMME

57 57 57 58 58 61 62 62 63 63 63

-4-

CHAPITRE

Systmes de numration et codage

1.

Les systmes de numration


Un systme de numration est un ensemble de symboles et de rgles permettant la reprsentation de nimporte quel lment dun ensemble de nombres donnes. Exemple Le systme dcimal permet dcrire un nombre laide de dix chiffres 0 9. Tout nombre est reprsent par une combinaison de ces dix symboles.

1.1.

Dfinition dune base


La base dun systme de numration est la rfrence qui permet lcriture dun nombre. Dans le cas du systme dcimal, la base est 10. Exemple 2148 = 2.103 + 1.102 + 4.101 + 8.100 En gnralisant, un nombre A peut tre exprim dans une base B par n chiffres ai : (A)B = an-1an-2...a0 Remarque La notation (A)B signifie que A est exprim dans la base B.

1.2.

Le systme dcimal
C'est le systme que nous utilisons dans la vie courante. Il est bas sur les dix chiffres 0 9. Si nous employons le systme dcimal avec aisance dans tous nos calculs, il n'en va pas de mme pour les machines lectroniques danslesquelles ce systme reste difficile mettre en uvre pour plusieurs raisons d'ordre technique. C'est un autre systme, plus adapt, qui est implant. Le problme de conversion se pose alors du moment que la machine et l'homme parlent deux langages diffrents : La machine ne peut accepter un nombre dcimal et l'homme de son ct reste incapable d'interprter un rsultat fourni par la machine dans sa base sans faire appel une gymnastique lourde desprit. Par consquent, les rgles de passage entre la base dcimale et n'importe quelle base B ont t dfinies :

1.2.1.

Passage dune base B la base dcimale Soit A un nombre exprim dans une base B : (A)B = an-1an-2...a0 avec 0 ai B-1 La valeur dcimale du nombre A est calcule par : -5-

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

(A)10 = an-1.Bn-1 + an-2.Bn-2 + ... + a0.B0


( A)10 =

a B
i i=0

n1

Exemple Soit A un nombre exprim en base 8 : L'quivalent de A en dcimal est : (A)10 = 7.82 + 2.81 +5.80 = 469 1.2.2. Passage de la base dcimale une base B Soit A un nombre exprim dans le systme dcimal. Lquivalent de A dans une base B est calcul en divisant A par B, puis le quotient obtenu par B et ainsi de suite jusqu ce que le quotient soit nul. Les restes de divisions successives lus du bas vers le haut reprsentent le nombre A dans la base B. Soit : (A)B = a3a2a1a0 (A)10 = a3.B3 + a2.B2 + a1.B1 + a0.B0 (A)10 = B.(a3.B2 + a2.B1 + a1) + a0 = B.Q1 + a0 Q1 Q2 Q3 = B.(a3.B + a2) + a1 = B.a3 + a2 = B.0 + a3 A a0 B Q1 a1
Restes successifs

(A)8 = 725

= B.Q2 + a1 = B.Q3 + a2 = B.0 + a3

B Q2 a2 B Q3 a3 B 0

Exemple (31)10 = (11111)2 = (1011)3 Vrifier ces rsultats en appliquant les rgles de passage. Remarque La base dans son propre systme scrit toujours 10.

1.3.
1.3.1.

Les systmes binaire, hexadcimal et octal


Le systme binaire Cest la base 2. Elle est utilise dans tous les systmes lectroniques o les deux tats VRAI et FAUX sont facilement ralisables (interrupteur ferm ou ouvert, transistor bloqu ou satur, lampe allume ou teinte, ...). Cette base comporte uniquement les deux symboles 0 et 1. Ce sont les chiffres binaires appels aussi bits (Binary digit) : (A)2 = an-1an-2...a0 avec ai {0;1} an-1 sappelle le MSB (Most Significant Bit) : Bit de poids le plus fort.

-6-

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

a0 sappelle le LSB (Least Significant Bit) : Bit de poids le plus faible. Vu l'importance de systme, nous allons consacrer plusieurs paragraphes l'tude de certains des ses aspects, notamment le calcul arithmtique (voir 1.6) et les nombres ngatifs (voir 1.5). 1.3.2. Le systme hexadcimal Le systme hexadcimal comporte 16 symboles : les dix chiffres 0 9 et les six lettres A, B, C, D, E et F. Ce systme est trs rpandu pour la simple raison qu'il permet de reprsenter les nombres binaires d'une manire plus compacte. Table de correspondance Dcimal / Binaire / Hexadcimal Dcimal 0 1 2 3 4 5 6 7 Exemples Soit en base hexadcimale : (A)16 = 2AB En dcimal : (A)10 = 2.162 + 10.161 + 11.160 = 683 Vrifiez les rsultats suivants en appliquant les rgles de conversion que vous connaissez : (62)10 = (3E)16 = (111110)2 Prenons le nombre (3E)16 et exprimons chaque chiffre hexadcimal en binaire sur 4 bits (cf. le tableau de conversion ci-dessus) : (3)16 (0011)2 et (E)16 (1110)2 Maintenant, mettons les groupes de bits ensemble en suivant l'ordre des chiffres : (3E)16 (00111110)2 On voit bien qu'on retrouve le mme rsultat obtenu avec les rgles de base. Rgles de conversion Base 16 / Base 2 Pour passer de la base 16 la base 2, on exprime chaque chiffre hexadcimal en binaire sur 4 bits. Pour faire la transformation inverse (Base 2 vers 16), il suffit de prendre les chiffres binaires 4 par 4 en partant de la droite et convertir chaque quartet en hexadcimal. Exemple (N)2 = 00111110 Remarque 3 E donc (N)16 = 3E Binaire 0000 0001 0010 0011 0100 0101 0110 0111 Hexa. 0 1 2 3 4 5 6 7 Dcimal 8 9 10 11 12 13 14 15 Binaire 1000 1001 1010 1011 1100 1101 1110 1111 Hexa. 8 9 A B C D E F

Vu que le passage Base 2 / Base 16 est direct et que la reprsentation hexadcimale est plus compacte, on prfre toujours crire les nombres binaires en hexadcimal. 1.3.3. Le systme octal Il contient 8 symboles : 0 7. Il est moins frquemment utilis dans la reprsentation des nombres binaires.

-7-

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Le passage du systme binaire au systme octal se fait par groupement de 3 bits. Exemple (A)2 = 1100110 donc (A)8 = 146

1 4 6 (A)8 = 253 do (A)2 = 100101011

1.4.

Reprsentation des nombres fractionnaires


On isole la partie entire qu'on convertit selon les rgles dj connues. Ensuite, on multiplie la partie fractionnaire (partie aprs la virgule) par la base et on rpte lopration sur la partie fractionnaire du produit jusqu ce quelle soit nulle (ou que la prcision voulue soit atteinte). Les parties entires des produits obtenus reprsentent les chiffres des la partie fractionnaire du nombre converti. Exemple Trouver lquivalent binaire du nombre dcimal : 35,125 Partie entire : (35)10 = (100011)2 Partie fractionnaire : 0,125 2 = 0,25 0,25 2 0,5 2 0,0 2 Do : (35,125)10 = (100011,001)2 = 0,5 = 1,0 =0 a-1 = 0 a-2 = 0 a-3 = 1 Arrt

1.5.

Reprsentation des nombres ngatifs en binaire


Il existe 3 modes de reprsentation des nombres signs en binaire :

1.5.1.

Reprsentation en valeur absolue et bit de signe On utilise un caractre binaire supplmentaire. Conventionnellement, on attribue la valeur 0 au signe (+) et la valeur 1 au signe (). Exemple La valeur absolue de 12 est (1100)2 : +12 01100 12 11100 Ce systme de reprsentation nest pas couramment employ car il nest pas pratique dans les oprations arithmtiques.
bit de signe

1.5.2.

Reprsentation par complment 1 Le complment 1 dun nombre binaire sobtient en remplaant les 1 par des 0 et vice-versa. Exemple +7 0111 7 1000

-8-

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Inconvnient Le nombre 0 peut tre cod de deux manires : 0000 et 1111. 1.5.3. Reprsentation en complment 2 Le complment 2 sobtient en ajoutant 1 au complment 1. Exemple +7 en binaire naturel sur 4 bits : 0111 le complment 1 : 1000 auquel on ajoute 1 : 1000 + 1 = 1001 (l'quivalent de (7) en code complment 2 sur 4 bits) Remarques Le code complment 2 est le plus utilis car il est adapt aux oprations arithmtiques. Le MSB indique le signe du nombre : 1 () et 0 (+) On doit toujours spcifier le nombre de bits lorsquon travaille en complment 2. Sur n bits, on peut reprsenter les nombres allant de 2n1 2n11. Sur 4 bits par exemple, on ne peut reprsenter que les nombres compris entre 7 et +8 : Dcimal 0 1 2 3 4 5 6 7 Code compl. 2 0000 0001 0010 0011 0100 0101 0110 0111 Dcimal 8 7 6 5 4 3 2 1 Code compl. 2 1000 1001 1010 1011 1100 1101 1110 1111

1.6.
1.6.1.

Oprations arithmtiques en binaire


Laddition Rgles 0+0=0 1+0=1+0=1 1 + 1 = 0 avec retenue 1 + 1 + 1 = 1 avec retenue Exemple 1 0 1 1 + 1 1 0 1 1 1 0 0 0
1 1 1

1.6.2.

La soustraction Pour calculer (M N), on calcule la somme de M et le complment 2 de N. Exemple Pour calculer (7-5), on fait la somme de 0111 (7) et 1011 (complment 2 de 5), do : 0111 + 1011 = 0010 (2 en dcimal) Remarque En gnral, les calculateurs travaillent avec tailles normalises (8, 16, 32, ... bits). Pour quune -9-

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

opration daddition ou de soustraction sur n bits soit cohrente, il faut que le rsultat soit compris entre 2n1 et 2n1-1. Si ce nest pas le cas, il y a un dpassement de la capacit de calcul (Overflow). 1.6.3. Multiplication Nous ne considrons que les oprations sur les nombres positifs, le traitement du signe est fait part. Pour faire une multiplication en binaire, on suit les mme rgles que le systme dcimal : 1 0 1 1 1 0 1

1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1.6.4. Division Elle est ralise comme la division dcimale :


Dividende Diviseur

1 1 0 1 1 1 0 0 1 1 0 1 1
Reste

1 1 1 0 0 1 0
Quotient

2.
2.1.

Le codage
Codification des nombres entiers
Le codage dun nombre entier dans un ordinateur se fait sur un nombre fixe de bits (8, 16, 32, ...) : En binaire non sign (binaire naturel) sur n bits, les nombres sont compris entre 0 et 2n1 En binaire sign (code complment 2) sur n bits, les nombres sont compris entre 2n1 et 2n11 Exemple A = 2 Lquivalent de A en binaire sign est : Sur 8 bits FE Remarque En langage C, les types utiliss occupent 1, 2 ou 4 octets : Type int char unsigned char short unsigned short long unsigned long
(*)

Sur 16 bits FFFE

Sur 32 bits FFFFFFFE

Nombre doctets En fonction du systme (*) 1 1 2 2 4 4

Plage -128 127 0 255 -32 768 32 767 0 65 535 -2 147 483 648 2 147 836 647 0 4 294 967 295

Dans les systmes 16 bits (DOS par exemple) un type int occupe 2 octets alors que dans les systmes 32 bits il occupe 4 octets. Il est donc plus prudent d'utiliser les types short et long pour s'assurer de la taille de la variable.

- 10 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

A propos de signed et unsigned Prenons l'exemple du type char : Ce type occupe un octet dans la mmoire de l'ordinateur. Lorsqu'on affecte une valeur une variable de type char, elle est toujours convertie en binaire avant d'tre range en mmoire. Au moment de la lecture, la valeur binaire est interprte en binaire naturel si la variable a t dclare unsigned ou en binaire sign (code complment 2) si la variable a t dclare signed. Afin de mieux illustrer cette notion, nous allons analyser un petit programme crit en C :
# include <stdio.h> void main (void) { char x; unsigned char y; x=-1; y=x; printf("(x)10 = %d printf("(y)10 = %d }

//signed est pris par dfaut

; ;

(x)16 = %.2X\n",x,x); (y)16 = %.2X\n",y,y);

On dclare deux variable x et y de type char ; y est dfinie unsigned.


x=-1;

On affecte la valeur 1 x. En ralit, la valeur affecte x est le complment 2 du nombre 1, soit 11111111 en binaire (FF en hexadcimal).
y=x;

Ici on affecte la valeur de x y (c'est la valeur binaire FF qui est recopie dans y) Les deux instructions printf servent l'affichage de x et y en dcimal (%d) puis en hexadcimal sur deux chiffre (%.2X). Le rsultat affich par le programme est le suivant :
(x)10 = -1 ; (x)16 = FF (y)10 = 255 ; (y)16 = FF

Le contenu binaire de x et y est le mme (FF), cependant, cette valeur est interprte 1 pour x qui a t dfinie comme un nombre sign et 255 pour y qui a t dfinie non sign (donc en binaire naturel).

2.2.

Codification des nombres rels (norme IEEE 754)


Du moment que les nombres rels peuvent prendre des valeurs trs grandes ou trs petites, ils sont reprsents en virgule flottante (floating point) selon le format normalise IEEE. Il existe deux formats IEEE pour les nombres virgule flottante : le format 32 bits (type single en C) et le format 64 bits (type double en C) : Format 32 bits
31 30 1bit Signe 23 22 8bits Exposant 23bits Mantisse 0

Exemple Soit reprsenter le nombre A = 8,25 sous la format IEEE 32 bits On commence par convertir la valeur absolue du nombre en binaire naturel : (8,25)10 = (1000,01)2 Ensuite, on crit le nombre sous la forme : 1,... 2m. On trouve pour notre exemple : 1000,01 = 1,00001 23 Le format IEEE 32 bits se compose de 3 champs :

- 11 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Le bit de signe (bit 31) indique le signe du nombre : 1 () ; 0 (+) Lexposant est cod sur 8 bits (bits 23 30). Il est gal m+127. La mantisse scrit sur 23 bits (bits 0 22). Elle reprsente la suite des bits aprs la virgule (dans notre cas : 00001) Ainsi, le format IEEE du nombre (8,25)10 est : 01000001000001000000000000000000 (soit 41040000 en hexa) Remarques Lexposant 00000000 signifie que le nombre est dnormalis (trop petit) Lexposant 11111111 signifie un dpassement de capacit (nombre trop grand : NaN (Not a Number)) Par consquent, le plus petit exposant possible est 01 (m=126) et le plus grand est FE (m=+127).

2.3.

Code binaire rflchi ou code GRAY


Cest un code non pondr. Il est diffrent du code binaire naturel. La particularit de ce code est que le passage dun nombre au nombre suivant se traduit par le changement dun seul bit : Dcimal 0 1 2 3 4 5 6 7 Binaire rflchi 0000 0001 0011 0010 0110 0111 0101 0100 Dcimal 8 9 10 11 12 13 14 15 Binaire rflchi 1100 1101 1111 1110 1010 1011 1001 1000

2.4.

Code BCD (Binary Coded Decimal)


On fait correspondre chaque chiffre dcimal un mot binaire cod sur 4 bits. Exemple (5873)10 = (0101100001110011)BCD Ce code est souvent employ dans les systmes de comptage et dans certaines machines calculer. Il permet de raliser des oprations en dcimal avec des chiffres binaires.

2.5.
2.5.1.

Code ASCII (American Standard Code for Information Interchange)


Dfinition L'homme utilise le plus souvent des informations sous forme de texte, de chiffres ou de symboles, c'est ce qu'on appelle en informatique des caractres (A,B,C,...,1,2,3,...,(,@,&,...). Cependant, la mmoire de l'ordinateur ainsi que les supports d'information ne peuvent supporter que les valeurs 0 et 1. Il a donc fallu trouver un codage qui permettrait de reprsenter n'importe quel caractre sous forme d'un nombre binaire afin de faciliter son stockage et sa transmission. Le code ASCII tait parmi les premiers codes utiliss pour ce propos. C'est un code universel qui fait correspondre chaque caractre un code sur 7 ou 8 bits. Sur la page suivante, vous trouverez une table dtaille du code ASCII. Dans sa premire version, le code ASCII tait cod sur 7 bits. Cette taille n'tant pas suffisante pour reprsenter tous les symboles, il a t tendu 8 bits. - 12 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Table du code ASCII entre 0 et 127


Dcimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 Hexa 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Binaire 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 00111010 00111011 00111100 00111101 00111110 00111111 ASCII NUL STX ETX EOT ACK BEL Dcimal 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Hexa 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F Binaire 01000000 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011000 01011001 01011010 01011011 01011100 01011101 01011110 01011111 01100000 01100001 01100010 01100011 01100100 01100101 01100110 01100111 01101000 01101001 01101010 01101011 01101100 01101101 01101110 01101111 01110000 01110001 01110010 01110011 01110100 01110101 01110110 01110111 01111000 01111001 01111010 01111011 01111100 01111101 01111110 01111111 ASCII @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

LF

CR

NAK

ESPACE ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

- 13 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

2.5.2.

Codage dune chane de caractres Une chane de caractres est stocke sous forme dune suite de codes ASCII reprsentant les caractres qui la constituent. Ces codes sont termins par un indicateur de fin (en gnral, le caractre NUL (code ASCII : 0)) Exemple En langage C, le mot "Bonjour" sera stock dans la mmoire de l'ordinateur sous forme de 7 octets suivis du caractre NUL : 42, 6F, 6E, 6A, 6F, 75, 72, 00

- 14 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

CHAPITRE

Gnralits sur les microprocesseurs

1.
1.1.

Structure d'un systme microprocesseur


Le microprocesseur
On appelle processeur tout dispositif lectronique qui permet de raliser : des oprations arithmtiques des oprations logiques des manipulations de bits (dcalage, rotation) des transferts mmoire Le microprocesseur est un processeur qui existe sous forme d'un circuit intgr. C'est le composant de base de tout ordinateur. A un instant donne, le microprocesseur peut raliser une seule instruction. Mais, il faudrait qu'il soit capable de raliser une suite d'instructions (un programme). Question : O faut-il mettre le programme ? Rponse : Dans une mmoire. Question : Comment communiquent ces deux circuits ? Rponse : Pour y rpondre, on va tudier, tout d'abord, l'organisation de la mmoire.

1.2.

La mmoire et le bus
La mmoire est une suite de m cases contenant chacune n bits :
n bits 0 1 m cases 0 1 1 0 1 0 0 0 1 1 1 1 1 0 0 1 Donnes binaires

m-1 Adresse

Pour accder une case, il faut fournir le numro de la case : l'adresse. Soit l'exemple suivant qui illustre une mmoire de 16 cases de 8 bits :

- 15 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

0 1

1 1

0 1

1 1

0 0

0 1

0 0

0 1

0 0

14 15

1 0

1 0

1 0

0 0

0 1

0 1

0 0

0 0

Question : Combien faut-il de fils pour composer l'adresse en binaire ? Rponse : 4 fils car 16 = 24. Ces fils s'appellent : le bus d'adresse. Un bus est un ensemble de fils gnralement partag entre plusieurs dispositifs. Question : O peut on rcuprer la donne existante dans la case dsigne par l'adresse ? Rponse : sur 8 fils s'appelant le bus de donnes.

A0 A1 A2 A3 Mmoire de 16 octets

Bus dadresse

D7 D0 D0 Bus de donnes

1.2.1.

Communication entre un microprocesseur et une mmoire

Bus de contrle Microprocesseur Bus dadresse Bus de donnes Mmoire

Le bus d'adresse est unidirectionnel. Le bus de donnes est bidirectionnel. Il permet au microprocesseur : De lire le contenu de la mmoire D'crire dans la mmoire Question : Comment choisir entre la lecture et l'criture ? Rponse : Le microprocesseur doit tre capable de slectionner le sens de l'change. Ceci s'effectue grce au bus de contrle. Exemple La ligne R/W (Read/Write) fait partie du bus de contrle. Elle permet de fixer le sens de l'change entre le microprocesseur et le dispositif slectionn (une mmoire par exemple).

- 16 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

1.2.2.

Types de mmoires Les mmoires sont classes en deux catgories :

1.2.2.1. Les mmoires vives Appeles aussi RAM (Random Access Memory), elles sont accessibles en lecture et en criture. Elles servent au stockage des donnes et des variables ainsi que du programme excuter. On distingue les RAM statiques (SRAM) et les RAM dynamiques (DRAM) : Les SRAM sont trs rapides mais coteuses. Elles servent la ralisation des mmoires cache des microprocesseurs. Les DRAM sont lentes cause de leur cycle de rafrachissement mais moins coteuses ce qui permet d'atteindre des tailles mmoire leves. Elles constituent la mmoire vive de l'ordinateur. 1.2.2.2. Les mmoires mortes On les appelle aussi ROM (Read Only Memory). Elles sont accessibles uniquement en lecture. Dans un ordinateur, elles contiennent le programme de dmarrage, les donnes systme et le BIOS (Basic Input Output System). Il existe des ROM effaables et reprogrammables : EPROM : effaables par rayonnement ultra-violet. EEPROM ou E2PROM : effaables lectriquement. 1.2.3. Communication avec plusieurs mmoires Le microprocesseur peut communiquer avec plusieurs mmoires branches sur les bus d'adresse et de donnes. Question : Comment slectionner une mmoire parmi les mmoires branches ? Rponse : La slection s'effectue grce un circuit spcialis appel : dcodeur d'adresse.
Bus dadresse

Microprocesseur Dcodeur dadresse

Mmoire 1

Mmoire 2

Mmoire 3

CS

CS

CS

Bus de donnes

CS (Chip Select) : entre dactivation de la mmoire. Le dcodeur d'adresse active une mmoire la fois en fonction de l'adresse prsente sur le bus d'adresse.

- 17 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Exemple
0000 3FFF 4000 BFFF C000 CFFF D000 FFFF

Mmoire 1 Mmoire 2 Mmoire 3 Espace vide

1. Donner la taille de l'espace mmoire total. 2. Donner la taille de chaque mmoire. Solution L'espace total Il commence 0000h et se termine FFFFh. Le nombre de cases en hexadcimal est donc : FFFFh 0000h +1 = 10000h cases Ce qui donne en dcimal : 16 cases de 8 bits (un ensemble de 8 bits est appel octet)
4

En gnral, on exprime les tailles des mmoires en utilisant les multiples suivant : 1 kilo-octet (Ko) = 210 octets = 1 024 octets 1 mga-octet (Mo) = 220 octets = 1 048 576 octets L'espace total de notre mmoire sera alors de : 164 = 216 = 26.210 = 64 Ko Mmoire 1 Nombre de cases : 3FFFh 0000h +1 = 4000h cases En dcimal : 4000h 4.163 = 22.212 = 214 = 24.210 = 16 Ko Mmoire 2 Nombre de cases : BFFFh 4000h +1 = 8000h cases En dcimal : 8000h 8.163 = 23.212 = 215 = 25.210 = 32 Ko Mmoire 3 Nombre de cases : CFFFh C000h +1 = 1000h cases En dcimal : 1000h 163 = 212 = 22.210 = 4 Ko

1.3.

Les priphriques
Afin que le microprocesseur puisse changer les donnes avec le milieu extrieur, il utilise des priphriques de natures diverses (clavier, souris, imprimante, traceur, ...) La communication avec les priphriques s'effectue par l'intermdiaire des circuits d'interface.

Bus de contrle Microprocesseur Bus dadresse Bus de donnes Circuits dinterface Priphriques

- 18 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Exemple Le circuit d'interface srie (l'UART) Le circuit d'interface parallle (le PPI)

2.

Architecture d'un microprocesseur


Le microprocesseur comporte : une unit arithmtique et logique (UAL), une unit de contrle et de commande, des registres, un ou plusieurs bus internes.
Bus interne Unit de contrle Registres UAL

2.1.

L'Unit Arithmtique et Logique


X Y

UAL

Slection de lopration

C'est un circuit combinatoire. Il ralise les oprations arithmtiques et logiques (voir cours des circuits logiques, chapitre 3)

2.2.

L'unit de contrle
Elle gre toutes les oprations qui concourent la ralisation d'une instruction. Exemple L'instruction "Lire la case d'adresse 12" est excute par l'unit de contrle de la manire suivante : 1. Placer 12 sur le bus d'adresse 2. Attendre la donne de la mmoire 3. Lire la donne du bus de donnes 4. Charger la valeur lue dans le registre demand Chacune de ces oprations s'appelle une micro-instruction. - 19 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

La gestion des tches implique la notion de temps. Le microprocesseur a besoin d'une horloge dont la frquence est exprime en mga-hertz (MHz).

2.3.

Les registres
Ce sont des mmoires internes. Indispensables au fonctionnement du microprocesseur, ils permettent notamment le stockage des oprandes, des rsultats, des pointeurs d'adresse, ...

2.4.

Caractristiques d'un microprocesseur


Les microprocesseurs se distinguent par : 1. leur structure interne, 2. leur frquence d'horloge, 3. le nombre d'instructions ralisables (jeu d'instructions), 4. la manire d'accder aux donnes dans la mmoire (modes d'adressage), 5. la taille et le nombre de registres, 6. l'utilisation des registres. Un microprocesseur est dit n bits lorsque son bus de donnes est de n bits. L'espace d'adressage d'un microprocesseur est le nombre maximal de cases mmoire qu'il peut adresser. Ce nombre dpend de la taille du bus d'adresse. Exemple Le 6809 est un microprocesseur 8 bits. Il a une bus d'adresse de 16 bits d'o un espace d'adressage de 216 = 64 Ko

- 20 -

CHAPITRE

Le microprocesseur INTEL 8086

1.

Caractristiques du 8086
Structure 16 bits Capacit d'adressage de 1 Mo 14 registres internes de 16 bits 24 modes d'adressage Oprations sur des bits, des octets, des mots et des chanes de caractres Arithmtique signe ou non signe Arithmtique binaire ou BCD, sur 8 ou 16 bits

2.

Structure interne du 8086

- 21 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Le 8086 se compose de deux units de traitement spares : l'unit d'interface de bus (BIU) et l'unit d'excution (EU) L'unit d'excution comporte l'UAL, les registres gnraux (AX, BX, CX, DX), les registres d'adressage (SP, BP, SI, DI), le registre d'tat (Flags) et le dcodeur d'instructions. L'unit d'interface de bus comporte une file d'attente d'instructions gre en FIFO, les registres de segments (CS, DS, SS, ES) et le pointeur d'instruction (IP).

2.1.

Fonctions de la BIU
Elle cherche les instructions excuter de la mmoire et les stocke dans la file d'attente FIFO Elle calcule les adresses physiques sur 20 bits Elle ralise le transfert des donnes avec la mmoire

2.2.

Fonctions de l'EU
Elle extrait les codes des instructions partir de la file d'attente et les excute Elle fournit les adresses des oprandes au BIU en nommant le segment concern et en fournissant le dplacement dans ce segment Elle reoit et fournit les oprandes au BIU Ces deux units travaillent pratiquement comme deux processeurs en parallle. Cette procdure est appele mode pipe-line. Elle permet un gain important en temps d'excution.

3.

Organisation de l'espace mmoire


Le 8086 dispose d'un bus d'adresse de 20 bits : A19 A0 donc d'un espace mmoire adressable de 220 = 1 Mo. La mmoire peut tre vue ainsi :
8 bits (octet) 00000 00001 ..

FFFFE FFFFF

Chaque case contient un octet. Le 8086 manipule des donnes sur 8 bits et sur 16 bits : Pour accder une donne sur 8 bits, il suffit de donner son adresse sur 20 bits. Les donnes exprimes sur 16 bits occupent deux octets dans la mmoire. Dans la famille INTEL les 8 bits de poids faible sont stockes en premier suivis des 8 bits de poids fort. Cette convention est appel Big Endian (la convention rivale est appel Little Endian, elle est adopte dans les microprocesseurs MOTOROLA) Ainsi, le 8086 stocke le mot 658Fh l'adresse 01000h comme suit :
01000h 01001h

8Fh 65h

- 22 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

4.

Les registres du 8086


Le 8086 a 14 registres de 16 bits classs en 4 groupes : Les registres de calcul Les registres d'adressage Les registres de segmentation Les registres de contrle

4.1.

Les registres de calcul


Ce sont les registres AX, BX, CX et DX. Ils sont utilisables dans tout type de traitement (calcul, stockage temporaire, ...).

4.1.1.

Le registre AX Appel registre accumulateur. C'est le registre le plus utilis implicitement par les instructions du 8086. Il peut tre vu sous forme de deux registres indpendants de taille 8 bits : AL et AH AX
15 8 7 0

AH
(AX High)

AL
(AX Low)

On crit : AX = AH : AL Si AX = 12A4h alors AH = 12h et AL = A4h. 4.1.2. Le registre BX Il est appel registre de base. Il est utilis aussi bien pour le calcul que pour l'adressage. Comme AX, le registre BX est constitu de deux registres 8 bits : BL et BH. BX = BH : BL 4.1.3. Le registre CX C'est le registre compteur. Il est souvent employ d'une manire implicite par certaines instructions comme compteur (instructions de boucle, traitement des chane des caractres, ...). CX = CH : CL 4.1.4. Le registre DX Appel registre de donne, il est utilis implicitement par certaines instructions pour stocker des oprandes ou des rsultats. DX = DH : DL

4.2.

Les registres d'adressage


Il en existe quatre de taille 16 bits : SI, DI, SP et BP

4.2.1.

Les registres SI (Source Index) et DI (Destination Index) Appels index de source et index de destination respectivement. Ils sont souvent utiliss dans la gestion des tableaux et des chanes de caractres dans la zone mmoire rserve aux donnes.

- 23 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

4.2.2.

Les registres SP (Stack Pointer) et BP (Base Pointer) SP et BP s'appellent pointeur de pile et pointeur de base respectivement. Ils servent la gestion de la pile. Le registre SP pointe sur le sommet de la pile (voir 4.3.3). Le registre BP permet de manipuler les donnes existantes dans la pile (paramtres de fonction, variables locales, ...).

4.3.

Les registres de segmentation


Du moment que le 8086 a une architecture 16 bits, les adresses qu'il gre dans un programme sont aussi exprimes sur 16 bits. Elles s'appellent les adresses logiques. Ces adresses permettent d'accder aux donnes et aux instructions stockes dans la mmoire principale. Exemple L'instruction : MOV AL,[1000h] signifie : Charger le registre AL par le contenu de l'octet d'adresse 1000h. 1000h est une adresse logique exprime sur 16 bits. Toutefois, l'adresse logique permet d'accder uniquement un espace de 216 = 64 Ko, alors que le 8086 peut adresser jusqu' 1 Mo de mmoire (20 lignes d'adresse). Les registres de segmentation ont t spcialement crs pour tendre l'adresse logique 20 bits. Le 8086 dispose de 4 registres de segmentation : DS, CS, SS et ES. Chacun est associ une zone spcifique de la mmoire. En effet, lorsqu'un programme est charg, il rserve plusieurs zones mmoire gnralement indpendantes : Une zone rserve aux donnes (octets, mots, tableaux, ...) Une zone rserve aux instructions (le code du programme) Une zone rserve la pile

DS CS SS

Zone de donnes Zone de code Zone de pile

4.3.1.

Registre de segment de donnes DS (Data Segment) Il permet d'accder la zone de donnes. L'adresse relle d'une donne est appel adresse physique. Elle est exprime sur 20 bits et c'est elle qui est effectivement mise sur le bus d'adresse pour accder la donne. Dans un programme, la donne sera dsigne par une adresse logique sur 16 bits et par une valeur de segment inscrite dans le registre DS. L'adresse physique est dfinie par la formule ci-dessous : Adresse physique = Adresse logique + (10h DS)

- 24 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Exemple Dans l'instruction MOV AL,[1000h], l'adresse physique, si DS = 120h, est : Adresse physique = 1000h + (10h 120h) = 1000h + 1200h = 02200h Remarques L'adresse logique est aussi appele dplacement ou offset. Une case mmoire est compltement dfinie par son segment et par son dplacement dans ce segment. Une adresse physique a deux reprsentations : Reprsentation sur 20 bits. Reprsentation Segment:Offset (la plus rpandue). Exemple 0100:0000 (Segment 0100 et Offset 0000h) s'crit sur 20 bits : 01000h Une mme adresse physique peut tre obtenue de plusieurs manires : Soit l'adresse physique 01000h. Dans les deux cas suivants on accde cette mme case : DS = 0 ; Offset = 1000h DS = 100h ; Offset = 0 1000h + (10h 0) = 01000h 0 + (10h 100h) = 01000h

En gnral, en fixant DS, on peut accder aux adresses physiques comprises entre (DS 10h) et (DS 10h) + FFFFh, soit un espace de 64 Ko. Cet espace s'appelle un segment. Exemple
00000 08000 0FFFF 17FFF DS = 0800

DS = 0000

FFFFF

L'adresse physique 08000h appartient en mme temps aux segments DS=0 et DS=800h. Elle peut tre calcul par : DS=0 ; Offset = 8000h, ou encore par : DS = 800h ; Offset = 0. 4.3.2. Le registre de segment de code CS (Code Segment) La zone rserve aux instructions du programme est associ au registre de segmentation CS. Afin que le microprocesseur puisse lire un instruction dans la mmoire, il doit fournir son adresse logique (contenue dans le registre IP) et son segment dans CS (voir 4.4.2). 4.3.3. Le registre de segment de pile SS (Stack Segment) La pile est une zone mmoire gre en LIFO (Last In, First out). Elle est utilise d'une part par le processeur pour sauvegarder l'tat du systme lors d'un appel un sous-programme ou une interruption, et d'autre part par le programmeur pour passer des paramtres un sous-programme - 25 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

ou stocker temporairement des donnes, ... La pile est un lment vital pour le fonctionnement du microprocesseur (voir chapitre 4 : La pile) La zone mmoire rserve la pile est associe au registre de segment SS. Le pointeur de pile SP (vu en 4.2.2) contient l'adresse logique du sommet de la pile. Pour calculer son adresse physique, la formule utilise est : Adresse physique du sommet de la pile = SP + (10h SS) 4.3.4. Le registre ES (Extra Segment) Il est utilis implicitement par certaines instructions (manipulation des chanes de caractres, ...). Il permet l'accs n'importe quelle donne dans la mmoire.

4.4.

Les registres de contrle


Les registres de contrle sont susceptibles de modifier le comportement du microprocesseur et informent le programmeur de l'tat de celui-ci.

4.4.1.

Registre d'tat SR (ou Flags) C'est un registre constitu d'un ensemble de bits portant le nom drapeau (flag).
15 14 13 12 11 OF 10 DF 9 IF 8 TF 7 SF 6 ZF 5 4 AF 3 2 PF 1 0 CF

Ces drapeaux sont diviss en deux catgories : 4.4.1.1. Indicateurs d'tat Les indicateurs d'tat sont mis jour aprs chaque instruction. Leur valeur indique la nature du rsultat obtenu : Drapeau CF PF AF ZF SF OF Exemple Si AX = 0012h, l'opration AX AX 0012h donne un rsultat nul. Le microprocesseur met automatiquement ZF 1. Si BL = FFh, l'opration BL BL + 10h engendre une retenue (en effet, FFh + 10h = 0Fh avec une retenue). CF est donc automatiquement mis 1. Remarque Ces indicateurs sont souvent employs dans les sauts conditionnels (voir 6.2.3). Signification Carry Parity Auxiliary Carry Zero Sign Overflow Remarques Mis 1 en cas d'une retenue Mis 1 lorsque le nombre de 1 dans le rsultat est pair Mis 1 lorsqu'une opration engendre une retenue entre le quartet faible et le quartet fort d'un octet Mis 1 en cas d'un rsultat nul Mis 1 lorsqu'un rsultat est ngatif Mis 1 en cas de dpassement de la capacit de calcul

- 26 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

4.4.1.2. Indicateurs de contrle Les indicateurs de contrle permettent de modifier le comportement du microprocesseur. Ils sont positionns par le programmeur. Drapeau IF DF TF Signification Interrupt Direction Trace Remarques Autorisation des interruptions : 0 : interruptions inhibes 1 : interruptions autorises Sens de traitement des chanes de caractres : 0 : sens direct 1 : sens inverse Mode de fonctionnement du microprocesseur : 0 : mode normal 1 : mode pas pas

4.4.2.

Registre pointeur d'instructions IP (Instruction Pointer) IP est un compteur qui contient en permanence l'adresse de la prochaine instruction que le microprocesseur va excuter. Il est automatiquement mis jour par le microprocesseur aprs chaque instruction. IP contient uniquement l'adresse logique de l'instruction, le segment se trouve dans le registre CS : Adresse physique de la prochaine instruction excuter = IP + (10h CS)

5.

Les modes d'adressage


Une instruction peut exiger 0, 1 ou plusieurs oprandes. Exemples 0 oprande : CLS (effacer l'cran en Basic) 1 oprande : sin, cos, log, ... 2 oprandes : addition, soustraction, ... L'oprande peut tre fourni de diverses manires : En donnant immdiatement sa valeur : log(12) (12 est un oprande donn en immdiat). En fournissant son adresse : log(a) (a est une variable stocke une adresse dans la mmoire de l'ordinateur). En spcifiant l'index de l'oprande dans un tableau : log(A[i]) (A est un tableau et i l'index de l'oprande dans ce tableau). Afin d'tudier des exemples sur les diffrents modes d'adressage, nous allons donner la syntaxe de l'instruction de transfert MOV : MOV destination, source Destination est charge par le contenu de source. Source reste inchange.

5.1.

Mode Registre
L'oprande est dsign par le contenu d'un registre. Exemple MOV AX,DX Avant l'instruction AX = 12C7h DX = 5EBAh Aprs l'instruction AX = 5EBAh DX = 5EBAh

- 27 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

5.2.

Mode Immdiat
Un oprande est donn en immdiat s'il constitue lui mme la valeur. Exemple MOV SI,1240h SI est charg par la valeur immdiate 1240h (SI 1240h). Remarque Ce type de transfert est interdit avec les registres de segmentation (DS, CS, SS, ES).

5.3.

Mode direct
Un oprande est donn en mode direct s'il est dsign par son adresse logique dans la mmoire. Exemple 1 MOV [1200h],5Ah La valeur 5Ah sera stocke l'adresse logique 1200h. Pour calculer l'adresse relle de la case (l'adresse physique), il faut connatre la valeur stocke dans le registre de segmentation DS. Si DS = 720h, l'adresse physique sera : Adresse physique = (720h 10h) + 1200h = 08400h Exemple 2 MOV [1200h],4D59h 4D59h est une donne sur 16 bits, elle occupera les deux octets d'adresse logique 1200h et 1201h. Si DS = 720h, la rpercussion de cette instruction sur la mmoire sera :
0720:1200 0720:1201

59h 4Dh

Rappelons que 0720:1200 est la reprsentation Segment:Offset de l'adresse physique 08400h. Notez aussi la convention Little Endian dans le rangement en mmoire (octet faible (59h) en premier lieu suivi de l'octet fort (4Dh)).

5.4.

Adressage indirect
On a trs souvent besoin de manipuler des tableaux ou des chanes de caractres. Pour accder un lment d'un tableau d'octets, il faut connatre l'adresse de base du tableau (ici 1202h) et l'indice i de l'lment dans le tableau.
1202 1203 1204 1205 1206 i=3 i=0

Pour lire le 4me lment du tableau (indice i=3) en mode direct, on doit calculer son adresse : 1202h + 3 = 1205h D'une manire gnrale, dans un tableau o chaque lment occupe m octets, l'adresse de l'lment d'indice i est donne par : Adresse de l'lment i = adresse de base du tableau + (taille d'un lment en octets i)

- 28 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Du moment que le traitement des tableaux fait souvent appel aux boucles, on ne peut adopter le mode direct comme mode d'adressage. Le mode le plus adapt est le mode indirect o l'on manipule des pointeurs plutt que des adresses explicites 5.4.1. Mode indirect bas L'adresse logique de l'oprande est fournie par BX ou BP avec ventuellement un dplacement constant sur 8 ou 16 bits. Les registres de segment utiliss pour le calcul de l'adresse physique sont : DS pour BX et SS pour BP. Ceci signifie que BX sera utilis comme pointeur sur une donne dans le segment de donnes (registre DS), alors que BP sera employ pour accder aux informations stockes dans la pile (registre SS). On note un oprande fourni en adressage indirect bas par [BX] ou [BP]. Exemple 1 Soit BX = 1342h et DS = 1072h et soit l'instruction : MOV [BX],0768h L'adresse logique : 1342h L'adresse physique : 1342h + (10h 1072h) = 11A62h Ici, la donne 0768h sera stock l'adresse pointe par BX, soit : 11A62h. La donne tant sur 16 bits, le rsultat de cette instruction sera :
11A62h 11A63h

68h 07h

Exemple 2 Soit : BP = F415h ; SS = 0784h ; AX = 76E4h MOV [BP]7Ah,AL Autre criture : MOV [BP+7Ah],AL La valeur 7Ah est un dplacement constant sur 8 bits. Ce dplacement est ajout au contenu de BP pour former l'adresse logique. L'adresse logique : F415h + 7Ah = F48Fh L'adresse physique : F48Fh + (10h 1072h) = 16CCFh L'octet d'adresse 16CCFh recevra la valeur E4h (contenu de AL). Cet octet appartient videmment la pile (registre SS). 5.4.2. Mode indirect index L'adresse logique est fournie par l'un des registres d'index SI ou DI avec ventuellement un dplacement constant sur 8 ou 16 bits. SI et DI sont des pointeurs utiliss dans la zone des donnes. Le registre de segment employ est DS. Exemple 1 Soit SI = 24ABh ; DI = C140h ; DS = A1BAh MOV [SI+1000h],142Bh L'adresse logique : 24ABh + 1000h = 34ABh L'adresse physique : 34ABh + A1BA0h = A504Bh (ou bien A1BA:34AB)

- 29 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Rsultat de l'instruction :
A1BA:34AB A1BA:34AC

2Bh 14h

Exemple 2 Soit le programme suivant :


MOV MOV MOV MOV MOV AX,A1BAh DS,AX DI,C140h AX,1412h [DI],AX

Dans la dernire instruction o l'adressage indirect index est employ : L'adresse logique : C140h L'adresse physique : A1BA0h + C140h = ADCE0h Rsultat de l'instruction :
ADCE0h ADCE1h

12h 14h

5.4.3.

Mode indirect bas-index Dans ce mode, les modes index et bas sont combins. L'adresse logique est donne par BX/BP et SI/DI. Quatre cas sont possibles : Avec le registre BX (et le registre de segmentation DS) : BX + SI + dplacement ventuel sur 8 ou 16 bits BX + DI + dplacement ventuel sur 8 ou 16 bits Avec le registre BP (et le registre de segmentation SS) : BP + SI + dplacement ventuel sur 8 ou 16 bits BP + DI + dplacement ventuel sur 8 ou 16 bits Ce type d'adressage est trs utile dans le traitement des chanes de caractres ou dans le cas de traitement simultan de tableaux. En effet, en faisant pointer BX sur le dbut d'une chane de caractres, SI peut tre utilis comme index pour accder aux diffrents caractres. Exemple Soit : SS = 1240h ; BP = 42A8h ; SI = 4010h MOV [BP+SI],12h Autre criture : MOV [BP][SI],12h L'adresse logique : BP + SI = 82B8h L'adresse physique : 10h SS + 82B8h = 1A6B8h L'octet d'adresse 1A6B8h sera charg par la valeur 12h.

6.

Les instructions de la famille INTEL 80x86


On peut classer les instructions du 8086 en 5 catgories : 1. Instructions de transfert 2. Instructions arithmtiques 3. Instructions logiques

- 30 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

4. Instructions de manipulation de bits 5. Instructions de branchement Remarques Tous les successeurs du 8086 (80286, 80386, 80486, Pentium) sont compatibles avec son jeu d'instruction. Ainsi, tous les programmes crits pour le 8086 peuvent tre excuts sur un PC quip d'un microprocesseur Pentium sans le moindre problme. Le 80386 et ses successeurs ont une architecture 32 bits. Les registres ont gard leur mme nomination avec lajout du prfixe E (Extended) pour indiquer leur taille de 32 bits : EAX, EBX, ESI, EDI, EBP, ... Les instructions ont t aussi tendus sur les oprations 32 bits. Ainsi sur un Pentium, toutes les oprations suivantes sont possibles : Sur 32 bits : Sur 16 bits : Sur 8 bits : MOV EAX,EBX MOV AX,BX (AX et BX sont les 16 bits de poids faible de EAX et EBX) MOV AL,BL

Cependant, le 80386 et ses successeurs ne peuvent fonctionner en 32 bits que sous un mode appel mode protg. Sur les pages suivantes vous trouverez un rsum des principales instructions du 8086 avec des exemples d'application.

6.1.

Rsum des principales instructions


(Voir pages suivantes)

- 31 -

INSTRUCTIONS DU 8086
(Rsum des principales instructions)

1. Instructions de transfert
Syntaxe MOV destination , source Rle Transfre le contenu de source vers destination : destination source Remarques destination et source doivent tre de mme taille (8 bits ou 16 bits). Sont interdits : le transfert mmoire, mmoire (MOV [100h],[1200h]) le transfert registre de segmentation, valeur immdiate (MOV DS,1200h) Exemples MOV AX,5BC3h (registre 16 bits) MOV CL,4Eh (registre 8 bits) MOV AX,[1200h] (adressage direct) MOV [BX],CL (adressage bas) ...

2. Instructions arithmtiques
Syntaxe ADD destination , source Rle Effectue une addition entre destination et source : destination destination + source Remarques S'il y a une retenue le drapeau CF (Carry) est mis 1. destination et source doivent tre de mme taille (8 bits ou 16 bits). Tous les registres sont utilisables sauf les registres de segment. l'addition mmoire, mmoire est interdite. Mmes remarques que ADD Exemples ADD DX,1000h (addition sur 16 bits : DXDX+1000h) ADD BH,F1h (addition sur 8 bits : BHBH+F1h) ADD AL,[1205h] (adressage direct) ADD CL,[SI] (adressage index) ... ADC DX,300h (DXDX+300h + CF) Si DX=500h et CF=1 alors DX prendra la valeur 801h INC DI
Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

- 33 -

ADC destination , source

Effectue une addition entre destination et source avec la retenue CF : destination destination + source + CF Incrmente destination destination destination + 1

INC destination

destination est un registre de 8 ou 16 bits.

Syntaxe SUB destination , source

Rle Effectue une soustraction entre destination et source : destination destination - source Dcrmente destination destination destination - 1 Effectue une multiplication entre AX (ou AL) et source : Sur 8 bits : AX AL x source Sur 16 bits : DX:AX AX x source Effectue une division entre AX (ou DX:AX) et source : Sur 8 bits : AL AX / source (reste dans AH) Sur 16 bits : AX DX:AX / source (reste dans DX)

Remarques Mmes remarques que ADD

Exemples SUB CH,BL (CHCH-BL)

DEC destination MUL source

destination est un registre de 8 ou 16 bits. Multiplication sur 8 bits : source est un registre 8 bits ou une adresse mmoire Multiplication sur 16 bits : source est un registre 16 bits ou une adresse mmoire Division sur 8 bits : source est un registre 8 bits ou une adresse mmoire Division sur 16 bits : source est un registre 16 bits ou une adresse mmoire

DEC BH MUL DH (AXAL x DH)

DIV source

DIV CL (ALAX / CL, reste dans AH)

- 34 Syntaxe AND destination , source OR destination , source XOR destination , source NOT destination

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

3. Instructions logiques
Rle Effectue un ET logique entre destination et source : destination destination ET source Effectue un OU entre dest. et source : destination destination OU source Effectue un OU exclusif entre destination et source : destination destination source Effectue le complment de destination : destination destination Remarques destination et source doivent tre de mme taille. Ils peuvent tre des registres de 8 ou 16 bits ou des cases mmoire. mme remarque que AND mme remarque que AND Exemples AND DH,CL Si DH=F4h et CL=3Fh alors : DH DH ET CL = 34h OR SI,BP

XOR CH,AL Si CH=42h et AL=9Ah alors : CH CH AL = D8h NOT DL destination peut tre un registres de 8 ou 16 bits ou une case mmoire. Si DL=C1 alors : DL DL = 3Eh

4. Instructions de manipulation de bits


Syntaxe (1) SHR destination , 1 (2) SHR destination , CL (1) SHL destination , 1 (2) SHL destination , CL (1) ROR destination , 1 (2) ROR destination , CL (1) ROL destination , 1 (2) ROL destination , CL (1) RCR destination , 1 (2) RCR destination , CL (1) RCL destination , 1 (2) RCL destination , CL - 35 Remarques dcalage d'un seul bit droite dcalage de n bits droite tel que n est la valeur stocke dans CL Ralise un dcalage gauche de (1) dcalage d'un seul bit gauche destination (2) dcalage de n bits gauche (CL=n) Ralise un rotation droite de destination (1) rotation d'un seul bit droite (2) rotation de n bits droite (CL=n) Ralise un rotation gauche de (1) rotation d'un seul bit gauche destination (2) rotation de n bits gauche (CL=n) Ralise un rotation droite de destination (1) rotation d'un seul bit droite travers le bit CF (2) rotation de n bits droite (CL=n) Ralise un rotation gauche de (1) rotation d'un seul bit gauche destination travers CF (2) rotation de n bits gauche (CL=n) Rle Ralise un dcalage droite de destination Exemples SHR AL,CL Si AL=7Ah et CL=4 alors AL07h SHL BL,1 Si BL=41h alors BL82h

RCL BL,CL Si BL=72h, CL=2 et CF=0 alors : BLC8h et CF1

5. Instructions de branchement
Syntaxe JMP Etiquette CALL Etiquette CMP destination , source Rle Effectue un saut inconditionnel l'instruction marque par Etiquette Effectue un appel au sous-programme marqu par Etiquette. Effectue l'opration : destination - source et positionne les drapeaux du registre d'tat. Effectue un saut Etiquette si gal Effectue un saut Etiquette si diffrent Effectue un saut Etiquette si infrieur ou La comparaison est effectue en binaire sign infrieur ou gal respectivement Remarques Exemples

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Le sous-programme appel doit obligatoirement se terminer par l'instruction de retour RET source et destination ne sont pas modifis Cette instruction prcde en gnral un saut conditionnel CMP AL,5Ah JE suite (saut suite si AL=5Ah) CMP SI,3B00h JNE boucle (saut boucle si SI3B00h) CMP CL,30h JL fleur (saut fleur si CL<30h)

JE Etiquette JNE Etiquette JL,JLE Etiquette

Syntaxe JG,JGE Etiquette

Rle Effectue un saut Etiquette si suprieur ou suprieur ou gal respectivement Effectue un saut Etiquette si infrieur ou infrieur ou gal respectivement Effectue un saut Etiquette si suprieur ou suprieur ou gal respectivement Effectue un saut Etiquette si le drapeau ZF, CF, PF, SF, OF respectivement est 1 Effectue un saut Etiquette si le drapeau ZF, CF, PF, SF, OF respectivement est 0

Remarques La comparaison est effectue en binaire sign

Exemples CMP DH,FFh - JG fleur2 Si DH=2, il y aura saut car 2>-1 (FF en binaire sign)

JB,JBE Etiquette JA,JAE Etiquette

La comparaison est effectue en binaire non sign La comparaison est effectue en binaire non sign

JZ,JC,JP,JS,JO Etiquette

JNZ,JNC,JNP,JNS,JNO Etiquette

CMP DH,FFh - JA fleur2 Si DH=2, il n'y aura pas de saut car 2<255 (FF en binaire non sign) ADD AL,14h JC Trai_Re (Saut Trai_Re en cas de retenue) SUB AX,185Eh JNZ suite (Saut suite si le rsultat de la soustraction n'est pas nul)

6. Instructions de contrle et de gestion de la pile


- 36 Syntaxe CLC, CLD, CLI STC, STD, STI CMC NOP Rle Met zro les drapeaux CF, DF et IF respectivement Met un les drapeaux CF, DF et IF respectivement Complmente le bit de retenue CF N'effectue aucune opration Remarques Exemples
Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

PUSH source

Empile source

POP destination

Dpile le sommet de la pile vers destination

Instruction utilise en gnral pour allonger la dure d'une boucle ou occuper un espace non utilis. source doit tre un registre de 16 bits ou un pointeur vers une adresse. Le pointeur de pile SP est dcrment de 2 destination doit tre un registre de 16 bits ou un pointeur vers une adresse. Le pointeur de pile SP est incrment de 2

PUSH AX PUSH [SI] POP DS POP [BX]

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

6.2.

Les sauts
Ils sont galement appels des branchements, ils permettent de poursuivre l'excution du programme un point spcifique du programme avec ou sans condition pralable. Les appels aux sous-programmes sont des sauts particuliers o l'appel peut tre excut de plusieurs endroits du programme. Le retour s'effectue l'instruction se trouvant juste aprs l'appel. Les sauts sont classs en deux catgories : 1. Les sauts inconditionnels 2. Les sauts conditionnels

6.2.1.

Notion d'tiquette Quand on crit un programme en langage assembleur, on peut dsigner certaines instructions par des tiquettes (labels). Une tiquette joue le rle de rfrence lorsqu'on dsire effectuer un saut l'instruction marque. Une tiquette peut tre n'importe quel texte suivi de deux points (:). Elle est mise juste avant l'instruction marquer. Exemple :
DEBUT: MOV AX,1000h MOV DS,AX TestRS: MOV AH,01 INT 21H XOR AH,AH MOV BL,0AH Suite1: DIV BL JZ TestRS

DEBUT, TestRS et Suite1 sont des tiquettes. La dernire ligne du programme fait rfrence l'tiquette TestRS par l'instruction de saut conditionnel JZ. 6.2.2. Les sauts inconditionnels Ces sauts ont lieu aprs l'excution d'une instruction de saut sans respect pralable d'une quelconque condition. 6.2.2.1. L'instruction JMP Syntaxe : JMP Etiquette Ds que le microprocesseur rencontre cette instruction, il continue l'excution l'instruction indique par Etiquette. L'excution se poursuit normalement et aucune mmorisation de l'endroit d'appel n'est faite. Exemple
MOV MOV SHR JMP MOV AND XOR CH,AL CL,4 AL,CL Suite AL,CH AL,0FH DX,DX

Suite:

Dans cet exemple, l'instruction MOV AL,CH sera ignore. L'instruction excut aprs SHR AL,CL sera AND AL,0Fh. - 37 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Remarque Une tiquette reprsente l'adresse de l'instruction qu'elle dsigne. Si l'instruction AND AL,0Fh est situe l'adresse 1200h, cette valeur sera affecte l'tiquette Suite. Lorsque le microprocesseur excute l'instruction JMP Suite, il charge le pointeur d'instructions IP par l'adresse stocke dans Suite, soit dans notre cas IP 1200h. Ceci provoque immdiatement la poursuite du programme l'adresse 1200h. 6.2.2.2. L'instruction CALL Syntaxe : CALL Etiquette Cette instruction permet d'appeler un sous-programme. Un sous-programme est une suite d'instructions qui effectuent un traitement donn. Les sousprogrammes permettent d'amliorer la lisibilit et vitent surtout les rptitions lorsqu'on dsire effectuer un mme traitement plusieurs endroits du programme. Un sous-programme doit tre termin par l'instruction de retour RET et sa premire instruction dsigne par une tiquette qui servira de rfrence d'appel. En rencontrant l'instruction CALL, le microprocesseur suit le mme comportement que pour JMP la diffrence qu'il mmorise l'endroit d'appel pour y retourner la fin du sous-programme. Exemple
MOV DL,41h CALL Affich XOR BL,BL ADD DL,05h CALL Affich OR AL,0Fh ..... Affich: MOV AH,2 INT 21H RET ;Premier appel au sous-programme Affich ;instruction excute aprs le premier appel ;Deuxime appel au sous-programme Affich ;instruction excute aprs le deuxime appel
1er Retour

2me Retour

;Dbut du sous-programme ;Fin du sous-programme (instruction de retour)

Remarque L'adresse de retour est mmorise dans la pile au moment de l'appel. En arrivant la fin du sousprogramme (instruction RET), le microprocesseur rcupre l'adresse de retour de la pile et continue l'excution cette adresse (pour plus de dtails, voir chapitre 4 : La pile paragraphe 1.2). 6.2.3. Les sauts conditionnels Les sauts conditionnels ont lieu si une condition est vrifie. Ils dpendent en ralit des diffrents drapeaux du registre d'tat (CF, ZF, PF, ...). Avant d'effectuer un saut conditionnel, il faut positionner les drapeaux pour traduire la condition vrifier. Dans la plupart des cas, les sauts conditionnels sont prcds par deux instructions de comparaison : CMP ou TEST. Ceux deux instructions n'ont AUCUNE influence sur les oprandes qu'on compare. Leur seul rle est de positionner les drapeaux en fonction du rsultat de la comparaison. 6.2.3.1. L'instruction CMP Syntaxe : CMP destination,source destination et source restent inchangs. CMP ralise une soustraction entre les deux oprandes : destination source

- 38 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

En fonction du rsultat de cette opration, les drapeaux du registre d'tat sont positionns. Exemple CMP AL,50h Si AL = 50h, la soustraction donnera un rsultat nul. Par consquent, ZF sera mis 1. Ainsi, en examinant ZF aprs cette instruction, on peut vrifier si AL=50h ou non. 6.2.3.2. L'instruction TEST Syntaxe : TEST destination,source destination et source restent inchangs. TEST effectue un ET logique entre les deux oprandes : destination AND source Les drapeaux sont positionns en fonction du rsultat de cette opration. Exemple TEST BL,BL Si BL = 00h, le ET donnera un rsultat nul. Par consquent, ZF sera mis 1. Si BL est diffrent de 00, le rsultat du ET sera non nul, donc ZF sera mis 0. Donc, pour vrifier si BL est nul ou non, il suffit de tester l'tat de ZF juste aprs cette instruction.

7.

Codage des instructions


Les instructions et leurs oprandes sont stocks en mmoire principale. La taille du code d'une instruction dpend du type de l'instruction ainsi que de la taille de l'oprande et du mode d'adressage utilis. Une instruction se compose en gnral de deux champs : Le code opration qui reprsente l'instruction Le champ oprande qui reprsente la donne ou la rfrence la donne (son adresse ou le registre pointeur utilis) Code opration (1 ou 2 octets) Exemples MOV AX,125Eh est code sur 3 octets : B8 5E 12 (B8 : code opration MOV AX; 5E 12 : oprande donne en immdiat) INC AX est code sur un seul octet : 40 Oprande (0,1,2,.. octets)

Le codage des instructions est l'une des tches du compilateur assembleur. Sur la page suivante, vous trouverez quelques instructions avec leur code opration. Le microprocesseur ne reconnat en ralit que les codes oprations avec leurs oprandes rangs dans la mmoire principale.

- 39 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Prenons une zone de 9 octets du segment de code (CS=1F6Fh) partir de l'offset 0100h. Le contenu hexadcimal de cette zone est le suivant :
B8 00 12 01 D8 A1 20 5E 52

Ces octets reprsentent le code des instructions suivantes :


1F6F:0100 1F6F:0103 1F6F:0105 1F6F:0108 B80012 01D8 A1205E 52 MOV ADD MOV PUSH AX,1200 AX,BX AX,[5E20] DX

Pour obtenir le code des instructions d'un programme assembleur, lancez le compilateur assembleur comme indiqu ci-dessous (le programme compiler est dans ce cas test.asm) :
C:\LANG\ASM\Ginfo>masm test.asm Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. Object filename [test.OBJ]: <ENTREE> Source listing [NUL.LST]: test.lst Cross-reference [NUL.CRF]: <ENTREE>

Le fichier gnr avec l'extension .lst contient le listing des instructions avec leur code. Code opration de quelques instructions Mnmoniques MOV AX,valeur MOV AX,[adresse] MOV [adresse],AX ADD AX,valeur ADD AX,[adresse] SUB AX,valeur SUB AX,[adresse] SHR AX,1 SHL AX,1 INC AX DEC AX CMP AX,valeur CMP AX,[adresse] JMP adresse JE adresse JNE adresse JA adresse JB adresse INT n Code opration B8 A1 A3 05 03 06 2D 2B 06 D1 E8 D1 E0 40 48 3D 3B 06 EB 74 75 77 72 CD Nb. d'octets 3 3 3 3 4 3 4 2 2 1 1 3 4 2 2 2 2 2 2 Exemple Instruction Code MOV AX,1200h B8 00 12 MOV AX,[4050h] A1 50 40 MOV [2010h],AX A3 10 20 ADD AX,25A8h 05 A8 25 ADD AX,[14CCh] 03 06 CC 14 SUB AX,5087h 2D 87 50 SUB AX,[A50Dh] 2B 06 0D A5

CMP AX,2000h CMP AX,[350Ah]

3D 00 20 3B 06 0A 35

Le codage dpend de l'offset de l'instruction de saut INT 21h CD 21

- 40 -

CHAPITRE

La pile et ses utilisations

1.

Structure de la pile
La pile est une zone mmoire gre en LIFO (Last In, First Out), c'est dire : le dernier lment entr sera le premier sorti. On peut assimiler une pile un tube vertical dans lequel on mettra des pices de monnaie. La seule pice qu'on peut retirer est la dernire pice empile, celle qui existe au sommet. La pile n'est en ralit qu'une simple zone mmoire dans laquelle sont stockes des donnes parvenant soit du microprocesseur soit du programme. Avec les langages volus (Pascal, C, ...) sa prsence est quasiment obligatoire. Le sommet de la pile reprsente la dernire donne empile. Afin de le reprer dans la mmoire, le registre SP (avec SS comme registre de segment) y pointe en permanence. Affecter (imprudemment) une autre valeur SP au cours du programme signifie la perte l'adresse du sommet de la pile donc de toutes les donnes qui y existaient, ce qui se solde, dans la plupart des cas, par un blocage du systme.

2.

Accs la pile
Vu la structure de la pile, les deux oprations permises sont : Empiler une donne (instruction PUSH) Dpiler une donne (instruction POP) Pour le 8086, les donnes empiles et dpiles sont toujours sur 16 bits.

2.1.

L'empilement
L'empilement d'une donne est ralis par l'instruction : PUSH donne O donne est un registre 16 bits ou un emplacement mmoire dsign par adressage direct ou indirect. L'empilement s'effectue en deux tapes : SP SP 2 : on fait reculer SP de deux cases (donne sur 16 bits), pour qu'il pointe sur le

- 41 -

Zone de pile

SS:SP

Sommet de la pile

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

nouveau sommet susceptible de recevoir la donne empiler. [SP] donne : le sommet de la pile reoit la donne. Exemple Soit AX = 1225h et soit l'instruction : PUSH AX Etat de la pile avant l'empilement : 55h 68h 8Bh 4Ah 96h 55h 25h 12h 4Ah 96h

SS:SP Aprs l'empilement : SS:SP

Donne dj empile

2.2.

Le dpilement
Le dpilement est l'opration qui permet de retirer le sommet de la pile et le stocker dans une destination. Il est ralis par l'instruction : POP destination destination est un registre 16 bits ou un emplacement mmoire dsign par adressage direct ou indirect. Le dpilement engendre deux oprations : destination [SP] : le sommet de la pile est copi dans destination. SP SP + 2 : la donne du sommet tant retire, on fait avancer SP pour pointer sur la donne suivante. Exemple Considrons l'instruction : POP DX Etat de la pile avant l'instruction : SS:SP 80h 39h 58h 2Fh 9Ah 80h 39h 58h 2Fh 9Ah

Sommet de la pile

Aprs l'instruction :

SS:SP

Nouveau sommet

Le registre DX est charg par la valeur 5839h. Remarque L'instruction POP ne dtruit pas la donne existante au sommet de la pile, elle fait tout simplement - 42 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

avancer SP pour pointer sur la donne suivante (le nouveau sommet).

3.
3.1.

Utilisations de la pile
Stockage temporaire
L'une des utilisations les plus classiques de la pile est le stockage temporaire des donnes. Ceci se manifeste notamment dans les cas suivants :

3.1.1.

Le manque de registres Parfois, on a besoin de faire une opration faisant intervenir un registre spcifique alors qu'il contient une donne importante. On peut soit sauvegarder son contenu dans un registre libre soit, si tous les registres sont utiliss, sauvegarder temporairement son contenu dans la pile et le rcuprer aprs l'opration. Exemple
MOV AX,2100h PUSH CX ;ici j'ai besoin de CX j'empile son contenu MOV CL,4 ;CL est utilis pour effectuer un dcalage SHL AX,CL POP CX ;je rcupre le contenu de CX de la pile

3.1.2.

La sauvegarde des registres dans un sous-programme Afin d'illustrer ce cas, d'ailleurs trs rpandu, nous allons examiner un exemple :
MOV DX,2100h CALL RCh ADD DX,0002 ;ici on suppose que DX=2100h mais il n'en est rien !! ... MOV DL,0Dh ;DX est modifi dans le sous-programme !!! MOV AH,02h INT 21h RET

RCh:

Dans le programme principal, le registre DX est charg par 2100h avant l'appel du sousprogramme RCh. Celui-ci, pour effectuer son traitement, affecte une nouvelle valeur DL et AH. Au retour du sous-programme, DX ne contient plus sa valeur initiale 2100h mais plutt la valeur 210Dh. En ne faisant pas attention ce type d'erreur, le programme peut donner des rsultats compltement aberrants. Pour remdier ce problme, on sauvegarde le contenu des registres qui seront utiliss au dbut du sous-programme et on les restaure juste avant le retour (dans le sens inverse videmment). De cette manire, le sous-programme reste compltement transparent vis--vis du programme principal :
RCh: PUSH AX PUSH DX MOV DL,0Dh MOV AH,02h INT 21h POP DX POP AX RET ;sauvegarde de AX dans la pile ;sauvegarde de DX dans la pile

;rcupration de DX ;rcupration de AX

3.2.

Les appels aux sous-programmes et la pile


La pile joue un rle fondamental dans les appels aux sous-programmes, car, rappelons-le, un sous-programme peut tre appel de plusieurs endroits du programme et le retour s'effectue l'instruction se trouvant juste aprs l'appel. La question qui se pose alors est : Comment le microprocesseur se rappelle-t-il de l'adresse de retour ? c'est dans la pile, en effet, qu'il sauvegarde cette adresse. - 43 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Avant d'aborder en dtail le processus d'appel, il y a lieu de distinguer entre deux types d'appel : l'appel proche (NEAR) et l'appel lointain (FAR). Il s'agit d'un appel NEAR lorsque le sous-programme existe l'intrieur du mme segment que le programme appelant, il suffit alors de sauvegarder l'offset de l'adresse de retour au moment de l'appel. Par contre, lors d'un appel FAR, le segment doit aussi tre sauvegard car le sousprogramme et le programme appelant appartiennent deux segments diffrents. Regardons l'exemple suivant qui reprsente un appel de type NEAR :
18A4:0100 18A4:0103 18A4:0108 18A4:3255 18A4:3259 18A4:325B MOV BX,1528h CALL 3255h ;ici IP=0108h, cette valeur est empile XOR AX,AX ADD BX,1254h MOV DL,BL RET ;le sommet de la pile (0108h) est dpil dans IP

Au moment de l'appel : CALL 3255h, le registre IP pointe sur l'instruction se trouvant juste aprs, soit : XOR AX,AX donc IP = 0108h. Cette valeur (qui reprsente l'offset l'adresse de retour) est empile automatiquement par le microprocesseur (l'quivalent de PUSH IP). Le registre IP est charg ensuite par 3255h ce qui provoque le branchement au sous-programme. L'instruction RET se trouvant la fin du sous-programme ne fait, en ralit, que dpiler le sommet de la pile dans le registre IP (l'quivalent de POP IP). Etant donn que la dernire valeur empile tait 0108h, l'excution du programme se poursuit cette adresse. On est bien retourn au programme principal. Dans un appel de type FAR, le contenu des deux registres CS et IP est empil au moment de l'appel car tous les deux seront chargs par l'adresse du sous-programme appartenant, dans ce cas, un autre segment. Au retour, CS et IP sont dpils ce qui provoque la poursuite de l'excution du programme appelant. Une erreur classique (et fatale !!) Il se peut qu'on ait besoin, durant un sous-programme, de stocker temporairement des donnes dans la pile. On en a tout fait le droit ! mais ce qui est grave c'est de les oublier dans la pile. Regardons cet exemple :
18A4:0800 18A4:0805 18A4:1500 18A4:1503 18A4:1504 18A4:1507 CALL 1500h XOR AX,AX ;l'adresse de retour 0805h est empile

MOV CX,1320h PUSH CX ;le contenu de CX (1320h) est empil ADD CL,2 RET ;le sommet de la pile est 1320h ! donc IP 1320h

Au moment de l'appel, l'adresse de retour (0805h) est empile. Au cours du sous-programme le contenu de CX (1320h) est empil par l'instruction PUSH CX. Ainsi, juste avant le retour, la pile se trouve cet tat :

SS:SP

20h 13h 05h 08h

Contenu de cx (oubli dans la pile !) L'adresse de retour

L'instruction RET ne faisant que dpiler le sommet de la pile dans IP, c'est la valeur 1320h qui sera charge dans IP et non pas 0805h qui est la vritable adresse de retour. Consquence : le programme se poursuivra l'adresse 18A4:1320 dont on ignore compltement le contenu !

- 44 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

En conclusion : Avant le retour, il faut dpiler toutes les donnes stockes dans la pile au cours du sous-programme sinon le programme risque de se perdre !

3.3.

Passage des paramtres un sous-programme


Un sous-programme, comme on sait, est un suite d'instructions charge de raliser un traitement donne. Dans beaucoup de cas, ce traitement s'effectue sur la base d'un certain nombre de paramtres que le sous-programme doit recevoir. En langage C, par exemple, les paramtres sont dfinis dans la dclaration de la fonction :
int Somme (int x, int y)

En assembleur, les sous-programmes n'ont pas de dclaration et c'est au programmeur que revient le choix du mode de passage des paramtres au sous-programme. Gnralement, trois modes sont utilises : le passage des paramtres dans les registres, dans des variables (cases mmoires) ou dans la pile. 3.3.1. Passage des paramtres dans les registres C'est la manire la plus simple et la plus rapide. Cependant, elle est limit par le nombre des registres libres au moment de l'appel. Exemple Le sous-programme Somme reoit deux paramtres dans AX et BX et retourne le rsultat (qui est une simple addition de AX et BX) dans CX.
Somme: MOV CX,AX ADD CX,BX RET

Avant d'appeler ce sous-programme, il faut charger les oprandes dans AX et BX. Aprs l'appel, on peut utiliser le rsultat rendu dans CX :
MOV AX,5h MOV BX,10h CALL Somme SHL CX,1 ;Premier oprande dans AX ;Second oprande dans BX ;Appel du sous-programme ;Utilisation du rsultat retourn dans CX ...

3.3.2.

Passage des paramtres dans des cases mmoire Cette mthode est moins rapide mais peut tre utilise en cas de manque de registres. Elle n'est pas toujours efficace surtout en prsence d'un grand nombre de sous-programmes et d'appels mutuels o l'on peut confondre les paramtres d'un sous-programme avec ceux de l'autre. On peut certainement prvoir pour chaque sous-programme des variables indpendantes mais ceci risque d'tre pnalisant au niveau de l'espace mmoire. Exemple Rcrivons le sous-programme Somme vu prcdemment avec ce mode de passage de paramtres (le rsultat est toujours retourn dans CX):
Somme: MOV CX,[1000h] ADD CX,[1008h] RET ;Premier paramtre ;Second paramtre

L'appel au sous-programme sera prcd par le chargement des paramtres :


MOV [1000h],5h MOV [1008h],10h CALL Somme SHL CX,1 ;Premier oprande dans la case [1000h] ;Second oprande dans la case [1008h] ;Appel du sous-programme ;Utilisation du rsultat retourn dans CX ...

3.3.3.

Passage des paramtres dans la pile C'est la mthode employ dans tous les langages volus. En effet, le nombre de paramtres n'est - 45 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

limit ici que par la taille de la pile. Un grand avantage de cette mthode est qu'un sousprogramme peut appeler un autre sans perdre ses propres paramtres, il peut mme s'autoappeler (sous-programme rcursif) sans altrer les paramtres reus pour chaque appel (ceux-ci restent, videmment, sauvegards dans la pile). Exemple Avant d'crire la version de notre sous-programme Somme en utilisant la pile comme moyen de passage de paramtre, nous allons analyser l'appel effectu au programme principal :
MOV AX,5h PUSH AX MOV AX,10h PUSH AX CALL Somme SHL CX,1 ;Premier oprande empil ;Second oprande empil ;Appel du sous-programme ;rsultat dans CX

1250h

Les deux paramtres sont empils avant l'instruction CALL. Celle-ci son tour empile l'adresse de retour qu'on supposera 1250h. L'tat de la pile tout fait au dbut du sous-programme est le suivant : SS:SP 50h 12h 10h 00h 05h 00h

L'adresse de retour Paramtre 2 Paramtre 1

Le pointeur de pile ne devant pas tre modifi, on utilise le registre BP pour accder aux paramtres stocks dans la pile du fait qu'il est associ, lui aussi, au registre de segment SS. Faisons pointer BP sur le sommet de la pile :
MOV BP,SP

En utilisant BP comme rfrence, l'adresse des diffrents lments de la pile sera : BP SP BP+2 BP+4 50h 12h 10h 00h 05h 00h

L'adresse de retour Paramtre 2 Paramtre 1

D'o, finalement, le sous-programme Somme :


Somme: MOV BP,SP MOV CX,[BP+2] ADD CX,[BP+4] RET ;Premier paramtre ;Second paramtre

Aprs le retour, la pile contient encore les deux paramtres : SS:SP 10h 00h 05h 00h

Paramtre 2 Paramtre 1

- 46 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Puisqu'ils deviennent inutiles, il faut les retirer de la pile juste aprs le retour du sous-programme en faisant avancer SP de 4 cases :
CALL Somme ADD SP,4 SHL CX,1 ;Appel du sous-programme ;Elimination des paramtres de la pile ;exploitation du rsultat retourn dans CX

Remarque Dans cet exemple, c'est le programme principal qui retire les paramtres de la pile aprs l'appel (ADD SP,4). Cette convention est adopt en langage C. En Pascal, c'est le sous-programme qui retire les paramtres de la pile par une instruction de retour particulire : RET n, celle-ci retourne au programme appelant tout en faisant avancer SP de n cases ce qui permet d'liminer les paramtres. La version Pascal de notre exemple sera donc :
MOV AX,5h PUSH AX MOV AX,10h PUSH AX CALL Somme SHL CX,1 .... Somme: MOV MOV ADD RET BP,SP CX,[BP+2] CX,[BP+4] 4 ;Premier paramtre ;Second paramtre ;retour en faisant avancer SP de 4 (SP SP+4) ;Premier oprande empil ;Second oprande empil ;Appel du sous-programme ;les paramtres sont dj limin par RET 4 !

- 47 -

CHAPITRE

Les interruptions

1.

Introduction
Soit le systme microprocesseur suivant :
Vol

Centrale d'alarme

Ascenseur Incendie

Systme P

Le microprocesseur analyse en permanence les signaux d'entre : Si (vol = 1) alors appeler la police Si (ascenseur = 1) alors appeler la compagnie d'ascenseurs (panne d'ascenseur) Si (incendie = 1) alors appeler les pompiers Programme
Tant que (vol=0) et (incendie=0) et (ascenseur=0) faire { } Au cas o : Vol=1 : appel de la police Asc=1 : appel de la compagnie d'ascenseurs Feu=1 : appel des pompiers Recommencer

Inconvnient Si l'ascenseur se bloque et juste aprs une incendie se dclare, le microprocesseur sera occup par l'appel de la compagnie d'ascenseurs alors qu'il est plus urgent d'appeler les pompiers. En conclusion, il faut que la procdure de la panne d'ascenseur ou celle du vol soit interrompue ds l'apparition d'une incendie pour traiter la procdure du feu. Solution On peut glisser entre chaque deux instructions un test du signal d'incendie. Mais cette solution ralentit l'excution du programme et prend de la place mmoire. Une autre solution consiste prvenir matriellement le microprocesseur pour traiter la procdure de l'incendie.

- 48 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

En effet, le 8086 possde 3 entres appeles entres d'interruption dont le rle est d'aviser le microprocesseur matriellement des vnements extrieurs.

INTR NMI RESET

8086

2.
2.1.

Types d'interruptions
Dfinition d'une interruption
Une interruption est une demande non prvisible adresse au microprocesseur. Elle provoque l'arrt du programme en cours de traitement pour excuter en priorit un sous-programme spcifique appel sous-programme d'interruption ou traitant d'interruption. A la fin de ce sous-programme, le microprocesseur reprend le programme principal l o il a t interrompu.

2.2.

Types et proprits des interruptions


Il existe deux catgories d'interruptions : les interruptions matrielles et logicielles.

2.2.1.

Les interruptions matrielles Ce sont des interruptions d'origine externe. Elles sont dclenches par application d'un tat haut sur INTR (Interrupt Request) ou NMI (No Masquable Interrupt). NMI est dite interruption non masquable. Elle ne peut tre inhibe par programme. Elle est associe en gnral des vnements catastrophiques (erreur systme, erreur mmoire, ...) INTR est moins prioritaire que NMI et peut tre masque par programme. Processus de l'interruption NMI Lorsque le microprocesseur reoit une demande d'interruption sur NMI. 1. 2. 3. 4. 5. 6. 7. il termine l'instruction en cours d'excution, empile le registre d'tat et les registres CS et IP, met le drapeau IF (Interrupt Flag) 0 (inhibition des interruptions), cherche l'adresse du sous-programme excuter dans la table des vecteurs d'interruption, excute le sous-programme ... remet le drapeau IF 1 (autorisation des interruptions), dpile IP, CS et le registre d'tat et poursuit le programme principal.

Processus de l'interruption INTR INTR est souvent associe un circuit spcialis appel contrleur d'interruption 8259A :
INTR

IRQ0

8086

INTA

8259A

IRQ1 ...... IRQ7

Bus de donnes

- 49 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Le 8259A reoit 8 entres IRQ0 IRQ7 (Interrupt ReQuest). Ds que l'une de ces entres passe l'tat haut, le 8259A met une demande d'interruption sur INTR : 1. Le 8086 termine l'instruction en cours, 2. envoie au 8259A sur INTA un signal "accus de rception", 3. le 8259A place sur le bus de donnes le n de l'interruption excite. Ce numro est reu alors par le 8086, 4. le 8086 cherche l'adresse du sous-programme associ cette interruption dans la table des vecteurs d'interruption, la suite du processus est identique celui de NMI ... L'interruption INTR peut tre masque par l'instruction CLI (CLear Interrupt flag) qui met le drapeau IF 0. Aucun appel sur INTR n'est alors pris en compte jusqu' la mise 1 de IF par l'instruction STI (SeT Interrupt flag). 2.2.2. Les interruption logicielles Elles sont dclenches par l'instruction INT n o n dsigne le numro d'interruption. Les sous-programmes associs aux interruptions logicielles sont en gnral des routines du BIOS ou du DOS. Elles permettent au programme d'accder aux diffrents priphriques de l'ordinateur (voir chapitre 7 : Initiation la programmation systme) Exemple Interruption 10h : interruption BIOS (gestion de l'affichage) Interruption 21h : interruption DOS (gestion des priphriques, des fichiers, ...) 2.2.3. La table des vecteurs d'interruption Cette table contient l'adresse des sous-programmes (SP) de toutes les interruptions du microprocesseur (256 au total) et commence partir de 00000. L'adresse d'un sous-programme d'interruption prend 4 octets : 2 octets pour son segment et 2 octets pour son offset :
00000 00001 00002 00003 00004 00005 00006 00007

14243 14243

Offset du SP Segment du SP Offset du SP Segment du SP

Interruption 00 : Division par 0

Interruption 01 : Pas pas

003FF

La table occupe l'espace mmoire entre 00000h et 003FFh. Pour une interruption logicielle n l'adresse du sous-programme associ se trouve 4n (offset du SP) et 4n+2 (segment du SP).

- 50 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Exemple L'adresse du SP associ l'interruption 21h se trouve 00084h (offset du SP) et 00086h (segment du SP) : En supposant que le contenu de ces 4 octets est :
00084h A0h 00085h 04h 00086h 45h 00087h 09h

Le sous-programme associ l'interruption 21h se trouve alors l'adresse 0945h:04A0h Attention : Il est interdit de modifier directement le contenu de la table des vecteurs d'interruption. Cette opration se fait l'aide de la fonction 25h de l'interruption 21h.

2.2.4.

Cas particulier de RESET Lorsque l'entre RESET du microprocesseur est mise l'tat haut (bouton RESET sur le botier de l'ordinateur), les registres sont initialiss par les valeurs suivantes : SR=0 - IP=0 - CS=FFFFh - DS=0 - ES=0 - SS=0 La premire instruction excute par le microprocesseur au dmarrage se trouve donc l'adresse FFFFh:0000h. Cette adresse fait partie de la zone du BIOS en ROM.

3.

Application
Les interruptions jouent un rle extrmement important dans la gestion des priphriques. Regardons l'exemple suivant : Un ordinateur communique travers son port srie avec un modem. Celui-ci reoit via une ligne tlphonique des octets provenant d'un autre ordinateur. Les octets reus doivent tre rangs dans un buffer (zone mmoire tampon) pour tre traits aprs.

8086

Contrleur du port srie

Modem

ligne tlphonique

Il existe deux mthodes pour grer cette tche :

3.1.

Mthode par scrutation


Cette mthode consiste lire en permanence le port srie pour voir si un caractre est arriv :
Lire le port srie S'il y a un caractre le stocker dans le buffer Recommencer

La boucle doit se rpter jusqu' la fin de la communication. Cette mthode est inefficace parce que le microprocesseur passe tout son temps attendre l'arrive d'un caractre alors qu'il devrait s'occuper d'autres tches.

3.2.

Mthode par interruption


La mthode par interruption fonctionne de la manire suivante : Le contrleur du port srie est associ une entre de demande d'interruption, soit IRQ5. Ds - 51 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

qu'un caractre est reu, le contrleur envoie une demande via IRQ5 au 8259A qui son tour demande une interruption sur INTR. Le microprocesseur arrte le programme en cours pour excuter le sous-programme associ IRQ5. Celui-ci lit le caractre reu et le met dans le buffer. Le programme principal continue ensuite normalement.

8086
INTR

Contrleur du port srie

8259A

IRQ5

Le numro d'interruption associ une ligne IRQn est n+8. Par consquent, l'emplacement de l'adresse du sous-programme correspondant dans la table des vecteurs d'interruption est 4(n+8) et 4(n+8)+2. Dans notre cas (IRQ5), l'adresse du sous-programme d'interruption doit tre stock 34h (offset du SP) et 36h (segment du SP). Supposons que notre SP d'interruption se trouve F000h:EF6Fh, le programme principal devra commencer par :
1. Inhiber les interruptions (CLI) 2. Mettre EF6Fh l'adresse 00034h et F000h l'adresse 00036h (ceci doit tre fait l'aide la fonction 25h de l'interruption 21h) 3. Autoriser les interruptions (STI) 4. Suite du programme ...

Le SP d'interruption l'adresse F000h:EF6Fh :


1. Lire le caractre reu sur le port srie 2. Mettre le caractre dans le buffer 3. Retour (instruction IRET)

De cette manire, le microprocesseur excute normalement le programme principal et l'arrive d'un caractre, il se branche F000h:EF6Fh pour mettre le caractre dans le buffer puis retourne au programme. Cette mthode permet un gain substantiel en vitesse et en performance. La plupart des priphriques sont grs de cette manire. Remarque Pour connatre l'affectation des entres IRQ dans un ordinateur travaillant sous Windows 95, cliquez sur l'icne "Systme" dans le panneau de configuration. Sous l'onglet "Gestionnaire de priphriques", double-cliquez sur "Ordinateur"

- 52 -

CHAPITRE

Les entres/sorties

1.

Introduction
Le microprocesseur doit changer des donnes avec l'environnement extrieur. Cet change se fait l'aide des priphriques. Le flux d'information peut exister dans les deux sens : de l'extrieur vers le microprocesseur (clavier, liaison srie, rseau, disque, ...) ou du microprocesseur vers l'extrieur (imprimante, cran, disque, traceur, ...) Ces changes d'information sont appels les entres/sorties : E/S (input/output : I/O en anglais).

2.

Notion de contrleur ou de circuit d'interface


Aujourd'hui, il existe un nombre important de priphriques de natures trs diverses. Le microprocesseur est incapable de communiquer avec tous ces priphriques soit parce qu'ils ncessitent un protocole de communication trs particulier, soit encore parce que la nature des signaux lectriques transitant sur les lignes d'E/S du priphrique sont incompatibles avec ceux du microprocesseur. Par consquent, et afin d'tablir un change d'information entre le microprocesseur et le priphrique, on fait appel un circuit spcialis appel circuit d'interface ou contrleur. Un tel circuit joue le rle d'intermdiaire. Il se charge de piloter le priphrique en lui envoyant tous les signaux lectriques ncessaires son fonctionnement et en recevant de celui-ci les donnes utiles tout en obissant au protocole de communication impos. Du ct du microprocesseur le circuit d'interface occupe un certain espace dans une zone appele zone d'entre/sortie. Pour le 8086 cette zone est indpendante de la mmoire centrale et a une taille de 64 Ko.
0000 0001

FFFF

Zone d'entre/sortie de 64Ko

3.

Communication entre le microprocesseur et un circuit d'interface


Tous les circuits d'interface comportent un ou plusieurs registres internes. Ces registres travaillent en lecture ou en criture et chaque registre est affecte une adresse dans la zone d'entre/sortie. - 53 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Ils assurent la communication entre le microprocesseur et le circuit. Certains de ces registres reoivent des informations de commande du microprocesseur (mode de fonctionnement, sens et mode de transfert, ...), d'autres contiennent des informations d'tat du circuit d'interface (erreurs de transmission, rception de donnes, ...), alors qu'un troisime type joue le rle de tampon recevant l'information transfrer du microprocesseur au priphrique ou arrivant du priphrique vers le microprocesseur, ...

4.

Accs aux registres d'un circuit d'interface


Chaque registre interne est associ une adresse d'E/S. Pour y accder, il existe deux instructions IN et OUT :
IN AL,DX OUT DX,AL ; met dans AL le contenu de l'adresse d'E/S point par DX ; transfre le contenu de AL vers l'adresse d'E/S pointe par DX

Il faut videmment que DX soit charg au pralable par l'adresse d'entre/sortie :


MOV DX,adr. d'E/S.

AL et DX sont les seuls registres autoriss dans les oprations d'E/S.

5.

Application : Le circuit d'interface srie


Tout ordinateur est quip d'un ou deux ports srie permettant le transfert des donnes vers d'autres systmes (modem par exemple). La gestion des ports srie est prise en charge par un circuit appel l'UART (Universal Asynchronous Receiver Transmitter). L'UART 8250 possde plusieurs registres internes permettant de configurer la communication, d'envoyer ou recevoir des donnes. Le premier de ces registres s'appelle RBR (Receiver BuffeR) ou registre de rception. Il se situe l'adresse d'E/S : 3F8h. Cette adresse est appele adresse de base car les adresses de tous les autres registres de l'UART sont calcules par rapport cette adresse en ajoutant un dcalage. Ainsi, le registre : LCR (Line Control Register) ou registre de contrle de la transmission se trouve l'adresse 3F8h + 3 = 3FBh. Le dernier registre est situ 3FFh L'UART occupe donc l'espace d'E/S : 3F8h 3FFh. Le caractre reu sur le port srie est mis par l'UART dans le registre de rception RBR. On peut lire le contenu du registre RBR par les instructions suivantes :
MOV DX,3F8h IN AL,DX ; adresse d'E/S du RBR ; charger AL par le contenu du RBR

Pour configurer la transmission via le port srie, On met le mot de configuration dans le registre LCR :
MOV AL,mot de config. MOV DX,3FBh ; adresse du LCR OUT DX,AL ; chargement dans le LCR

6.

Le circuit dinterface parallle 8255 (filire IEEA uniquement)


Le 8255 est un circuit dinterface programmable de 24 bits dentre/sortie organiss sous forme de 2 ports de 8 bits : A et B, et de deux ports de 4 bits Csup et Cinf (constituant le port C). Chaque port est programmable en entre et en sortie. Le 8255 est programm travers son registre de commande. Le 8255 est vu par le microprocesseur comme tant 4 octets dans lespace des entres/sorties.

- 54 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

PA0

123

PA

Port A

Adresses des registres


AB AB+1 AB+2 AB+3

123

PA7 RC PB

PB0

Port B

PB7

PA PB PC RC

PC

PC3 PC4 PC7

14243

PC0

Cinf

AB : Adresse de base du 8255

Port C

Csup

8255

6.1.

Connexion du 8255 au microprocesseur


M/IO A15 A2

Dcodeur dadresse

CS

8086

A1 A0 R/W D0-D7 RESET Bus de donnes

A1 A0 RD WR D0-D7 RESET

8255

6.2.

Programmation du 8255
Afin de configurer le sens et le mode de fonctionnement des registres, on crit un mot de commande dans le registre RC. Le 8255 dispose de 3 modes de fonctionnement : Mode 0 : E/S de base Mode 1 : E/S chantillones Mode 2 : Bus bidirectionnel Cest le mode 0 quon tudiera dans ce cours vu sa simplicit. Le mot de commande permet de configurer les ports dE/S. Il se prsente de la manire suivante : D7
1

D6
0

D5
0

D4

D3

D2
0

D1

D0
Sens de Cinf Sens du port B

Mode du port A/Csup (mode 0)

Sens de Csup Sens du port A Mode du port B/Cinf (mode 0)

Sens des ports : 1 : en entre 0 : en sortie

- 55 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Exemple Pour configurer le port A en sortie et les ports B et C en entre, le mot de commande est : 10001011 soit 8B en hexadcimal. En supposant que ladresse de base du 8255 est 100h, le programme ci-dessous permet de transfrer la donne prsente sur le port B au port A :
MOV AL,8Bh MOV DX,103h OUT DX,AL MOV DX,101h IN AL,DX MOV DX,100h OUT DX,AL ;mot de commande ;adresse du registre de contrle ;criture du mot de commande dans RC ;adresse du port B ;lecture du contenu du port B dans AL ;adresse du port A ;transfert du contenu de AL au port A

- 56 -

CHAPITRE

Initiation la programmation systme

1.

Introduction
Ecrire un programme avec un langage volu tel que Pascal, C, Fortran, ... revient traiter les donnes selon des algorithmes en gnral indpendants du systme. Le programme crit reste transparent vis--vis du matriel et ne require aucune connaissance sur la faon avec laquelle les donnes parviennent au processeur ni comment celui-ci les traite ou les range dans la mmoire. Si ce type de programmation est le plus rpandu notamment pour sa commodit et sa transparence, il reste limit et mme parfois inefficace quand il est question de tches critiques ncessitant une grande vitesse d'excution ou un accs direct au matriel. La seule solution dans ce cas est le recours la programmation systme. La programmation systme sintresse aux diffrents changes qui se produisent lintrieur de lordinateur et en particulier avec la mmoire et les priphriques (clavier, cran, modem, ...). Ce type de programmation quoique pnible et fastidieux, savre parfois indispensable pour gnrer un code excutable rapide et exploiter les ressources du systme dune manire optimale. Toutefois, la programmation systme exige des connaissances pralables sur larchitecture du systme et restreint le portabilit des programmes.

2.

Accs aux ressources matrielles


Lune des tches fondamentales de la programmation systme est daccder au matriel. Cet accs ne se fait pas obligatoirement dune manire directe, mais peut empreinter dautres chemins comme lappel de fonctions spcialises offertes par le systme dexploitation telles que les fonctions BIOS et DOS. Le BIOS (Basic Input Output System) se trouve en ROM et constitue la premire couche du systme. Il est charg au dmarrage de lordinateur bien avant le DOS. Ses fonctions permettent daccder aux composants matriels : carte vido, lecteur de disquettes, disque dur, clavier, Le DOS (Disk Operating System) est la couche logicielle situe en dessus du BIOS. Les fonctions quil propose permettent aussi daccder au matriel mais dune manire plus volue. En effet, les fonctions DOS se placent au niveau logique et non pas au niveau physique du matriel. La programmation systme fait trs souvent appel aux fonctions du DOS et du BIOS. Le langage employ par excellence est l'Assembleur.

3.

Structure dun programme en Assembleur 80x86


Un programme en Assembleur se compose en gnral de 3 parties dfinissant les diffrents segments :

- 57 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

1. le segment de code (point par CS), 2. le segment de donnes (point par DS), 3. le segment de pile (point par SS).

3.1.

Dclaration des segments


La dclaration dun segment se fait selon la syntaxe suivante :
Nom_Segment SEGMENT PARA ;Dbut du segment

<<*** Instructions ou donnes appartenant au segment ***>> Nom_Segment ENDS ;Fin du segment

NB. : Tout ce qui se trouve aprs le point-virgule (;) est considr comme commentaire Exemple : Dclaration dun segment de code
MonCode SEGMENT PARA MOV AX,1200h ADD AX,[5E00h] MOV AX,4C00h INT 21h MonCode ENDS

3.2.

Dclaration des donnes et de la pile


Le segment de donnes est rserv aux donnes que le programme utilise pendant son excution. Ces donnes sont reprsentes sous forme doctets, de mots, de tableaux ou de chanes de caractres et peuvent tre trats comme des constantes ou des variables. Chaque donne est stocke en mmoire sous forme hexadcimale. Les variables peuvent recevoir une valeur initiale attribue par le programme comme elles peuvent rester sans initialisation et cest pendant lexcution quelles reoivent des valeurs. La syntaxe de dfinition des donnes au sein du segment de donnes dpend de leur nature :

3.2.1.

Dfinition dun octet


Nombre
Label

DB

18h
Valeur initiale

Les valeurs initiales peuvent tre exprimes en dcimal, en hexadcimal (h) ou en binaire (b). Le compilateur se charge de faire la conversion. Ainsi les dclarations suivantes sont identiques :
Dcimal Nombre DB 24 Hexadcimal Nombre DB 18h Nombre Binaire DB 00011000b

Pour dfinir un octet sans lui affecter de valeur initiale, on utilise le symbole ?
Nombre DB ?

3.2.2.

Dfinition dun mot (16 bits)


Prod
Label

DW

5C0Fh
Valeur initiale

3.2.3.

Dfinition dun tableau doctets


Tab DB 15h,5Ah,21h,7Ch,82h
Donnes appartenant au tableau Label marquant le dbut du tableau

- 58 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Dans cet exemple, si le label Tab dsigne ladresse 45F0h, La case mmoire 45F0h contient 15h, la case 45F1h la valeur 5Ah, ... etc Pour dfinir un tableau de 10 octets sans initialisation, on crit :
Tab Tab1 DB DB 10 DUP (?) 7 DUP (2Ah)

Pour dfinir un tableau de 7 octets contenant des valeurs identiques (2Ah par exemple), on crit :

Cette dfinition est parfaitement identique la dfinition suivante :


Tab1 DB 2Ah, 2Ah, 2Ah, 2Ah, 2Ah, 2Ah, 2Ah

3.2.4.

Dfinition dun tableau de mots


TabM DW 15EEh, 5A00h, 12FFh, 8B00h

Si ladresse pointe par le label TabM est 1200h, le contenu de la mmoire sera:
1200h EEh 1201h 15h 1202h 00h 1203h 5Ah 1204h FFh 1205h 12h 1206h 00h 1207h 8Bh

3.2.5.

Dfinition dune chane de caractres


MaChn Chn2 DB DB 'Ceci est un exemple' 'FIN',0Dh,0Ah

Une chane de caractres est stocke sous forme doctets reprsentant le code ASCII de chaque caractre. La chane est crite entre guillemets et cest le compilateur qui se charge de convertir chaque caractre en code ASCII. On peut dfinir des chanes de caractres contenant des caractres spciaux (caractres non imprimables mais qui ont une signification particulire pour lordinateur). Ces caractres sont reprsents par leur code ASCII dans la dfinition de la chane. Ainsi dans le deuxime exemple, la chane de caractre "FIN" est suivie de deux caractres spciaux de code ASCII : 0Dh (retour chariot) et 0Ah (retour la ligne). Si le label Chn2 dsigne ladresse 8000h, le contenu de la mmoire sera le suivant :

8000h 46h "F"

8001h 49h "I"

8002h 4Eh "N"

8003h 0Dh

8004h 0Ah

Laffichage de cette chane sur lcran provoquera un retour ligne aprs lapparition du mot "FIN". 3.2.6. Dclaration du segment de donnes La syntaxe est identique celle du segment du code. Dans un segment de donnes on regroupe toutes les donnes utilises par le programme. Les variables dclares sont places l'une aprs l'autre dans la mmoire. Chacune prend l'espace mmoire ncessaire. Exemple
Donnees Var1 Mot1 Table Chaine Donnees SEGMENT PARA DB 12h DW 15E4h DB 5 DUP(1Ch) DB 'Test',0 ENDS ; ; ; ; ; ; Dbut du segment 1 octet 2 octets (mot de 16 bits) 5 octets (taille du tableau) 5 octets (longueur de la chane) Fin du segment

- 59 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Si le premier octet du segment de donnes se trouve l'offset 0000, le contenu de la mmoire sera:
0000h 12h Var1 0008h 54h 0001h 0002h E4h 15h Mot1 0009h 65h 000Ah 73h Chaine 0003h 1Ch 0004h 1Ch 0005h 1Ch Table 0006h 1Ch 0007h 1Ch

000Bh 74h

000Ch 00h

Les labels qui identifient chaque variable reoivent l'offset de celle-ci dans le segment de donnes :
Label Var1 Mot1 Table Chaine Offset attribu 0000h 0001h 0003h 0008h

3.2.7.

Utilisation des donnes dans le programme Comme on vient de voir, chaque donne est repre par un label. Celui-ci reoit l'adresse logique (sur 16 bits) de la donne dans la mmoire. Pour faire rfrence une donne dfinie dans le segment de donnes, on utilise tout simplement son label. Exemple 1 Soit la variable Var1 de type octet dfinie prcdemment dans le segment de donnes (voir cidessus):
Var1 DB 12h

Pour charger le contenu de la variable Var1 dans le registre AL, on crit :


MOV AL,Var1

Pour craser le contenu de Var1 et la charger par la valeur 45h, on crit :


MOV Var1,45h

Remarque Var1 reprsente l'adresse logique de la variable, en ralit, Var1 dsigne l'adresse logique 0000h. Au moment de la compilation, le compilateur remplace l'instruction MOV AL,Var1 par MOV AL,[0000h]. Exemple 2 Soient deux tables de 5 valeurs dont le dbut est dsign par les labels XVect et YVect. La deuxime table n'est pas initialis.
XVect YVect DB DB 12h,3Ah,15h,4C,2Dh 5 DUP (?)

- 60 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Le programme suivant permet de copier dans la deuxime table le contenu de la premire en utilisant SI et DI comme registres d'index :
LEA LEA MOV suite: MOV MOV INC INC DEC CMP JNE SI,XVect ;Charger SI par l'adresse dsigne par XVect DI,YVect ;Charger DI par l'adresse dsigne par YVect AH,5 AL,[SI] [DI], AL SI DI AH AH,0 suite

L'instruction LEA (Load Effective Adress) permet de charger dans un registre l'adresse dsigne par un label. Exemple Si XVect dsigne l'adresse 2B07h : LEA BX,XVect aura pour rsultat BX=2B07h, MOV BX,XVect aura pour rsultat BX=3A12h (premires valeurs de la table XVect). Remarque
LEA BX,XVect est quivalente MOV BX,offset XVect (charger BX par l'offset de XVect)

3.2.8.

Dclaration du segment de pile La pile est une zone mmoire qui doit tre rserve pour le programme (gestion des appel aux sous-programmes et aux interruptions, ...), et pour d'autres usages gnraux (sauvegarde de donnes temporaires, passage de paramtres une procdure, ...) Dans le plupart des cas, la dclaration d'un segment de pile est obligatoire surtout en prsence de sous-programmes. La taille de la pile varie selon les applications. Un programme rcursif aura besoin d'une pile de taille beaucoup plus importante qu'un programme ordinaire. La rservation d'une zone mmoire pour le segment de pile se fait de la manire suivante :
MaPile SEGMENT PARA DB 256 DUP (?) MaPile ENDS STACK

Ici, la taille de la pile est de 256 octets. Ce qui est suffisant pour des petits programmes en assembleur.

3.3.

Exemple de programme
Le programme suivant permet de remplir un tableau par une suite de nombres de 0 10 :

- 61 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

Pile Pile Donnees Table Donnees Code

SEGMENT PARA STACK DB 256 DUP ('P') ENDS SEGMENT PARA DB 11 DUP (00) ENDS SEGMENT ASSUME CS ASSUME DS ASSUME SS PARA : Code : Donnees : Pile

; Dfinition du segment de pile ; Pile de 256 octets remplie par ; le caractre 'P' ; Dfinition du segment de donnes ; Table de 11 octets initialise par 0

; Dfinition du segment de code ; Affectation des registres ; de segments

Debut:

Boucle:

Code

MOV AX,Donnees MOV DS,AX LEA BX,Table XOR AL,AL MOV Byte Ptr [BX],AL INC BX INC AL CMP AL,0Bh JNE Boucle MOV AH, 4Ch INT 21h ENDS END Debut

; Initialisation du registre DS ; ; ; ; ; ; ; ; BX reoit l'adresse logique de Table AL = 0 Byte Ptr [BX] veut dire octet ... ... point par BX Teste la fin de la boucle AL 0Bh aller Boucle Appel la fonction 4C de l'interruption 21h(Retour au DOS)

; END indique la fin du programme ; Debut dsigne le label de la ; premire instruction du programme

Remarque Les registres CS et SS sont automatiquement affects aux segments Code et Pile respectivement. Par contre, le registre DS doit tre initialis dans le programme

3.4.

Appel aux fonctions du DOS et du BIOS


L'appel des fonctions du DOS et du BIOS se fait par le biais des interruptions logicielles. Avant d'appeler l'interruption, on charge les ventuels paramtres dans les registres du microprocesseur. Certaines fonctions renvoient des rsultats aprs l'excution de l'interuption. Ceux-ci sont en gnral stocks dans les registres du microprocesseur. Comme le nombre des fonctions disponibles est trs grand, il n'est pas possible de donner des explications dtailles dans le cadre de ce document (voir ce sujet les ouvrages spcialiss). Exemple : Affichage d'un caractre sur l'cran Interruption : 21h Paramtres : AH = 02h (fonction n2) DL = Code ASCII du caractre afficher Le programme suivant permet d'afficher le caractre "A" sur l'cran :
MOV DL,41h MOV AH,2 INT 21h ;Code ASCII du caractre "A" ;Fonction n2 ;Appel de l'interruption 21h

4.

Compilation dun programme en Assembleur 80x86


Le compilateur Assembleur est constitu deux fichiers : MASM.EXE (le compilateur) LINK.EXE (l'diteur des liens)

- 62 -

Cours de larchitecture des ordinateurs FST Tanger K. EL MOKHTARI

4.1.

Edition du programme
Le programme peut tre crit avec n'importe quel diteur de texte (l'diteur du DOS, Notepad, ...). Pour crire le fichier test.asm sous l'diteur de MS-DOS, on tape sur la ligne de commande :
C:\ASM\>edit test.asm

Une fois le programme crit, il faut l'enregistrer sur le disque dans le rpertoire du compilateur. Un fichier source assembleur doit OBLIGATOIREMENT avoir l'extension .asm.

4.2.

Compilation
La compilation s'effectue en deux tapes : On lance le macro assembleur MASM avec le nom du fichier source comme paramtre (ne pas oublier le point-virgule la fin de la ligne) :

C:\ASM>masm test; Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.

49826 + 367899 Bytes symbol space free 0 Warning Errors 0 Severe Errors

S'il y a des erreurs, elles sont indiques avec leur numro de ligne, on doit les corriger dans le fichier source. Sinon, on passe la deuxime tape. On lance l'diteur des liens LINK :

C:\ASM>link test; Microsoft (R) Overlay Linker Version 3.64 Copyright (C) Microsoft Corp 1983-1988. All rights reserved.

S'il n'y a pas d'erreurs, l'diteur des liens cre le fichier excutable du programme. Dans notre cas, c'est le fichier test.exe.

4.3.

Excution du programme
Le fichier obtenu aprs la compilation est un fichier excutable qu'on peut appeler directement sur la ligne de commande de MS-DOS :
C:\ASM>test

Sous Windows, on clique deux fois sur licne du fichier test.exe.

- 63 -