• Aucun résultat trouvé

[PDF] Cours d’initiation à l’Architecture des ordinateurs | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours d’initiation à l’Architecture des ordinateurs | Cours informatique"

Copied!
63
0
0

Texte intégral

(1)

Faculté des Sciences et Techniques – Tanger

Département Génie électrique

Cours

Architecture

des ordinateurs

Par :

Karim EL MOKHTARI

Karim.el.mokhtari@menara.ma

A l'usage des étudiants des maîtrises :

IEEA et Génie informatique

(2)

Table des matières

CHAPITRE 1 : SYSTEMES DE NUMERATION ET CODAGE 5

1. LES SYSTEMES DE NUMERATION 5

1.1. DEFINITION D’UNE BASE 5 1.2. LE SYSTEME DECIMAL 5 1.3. LES SYSTEMES BINAIRE, HEXADECIMAL ET OCTAL 6

1.4. REPRESENTATION DES NOMBRES FRACTIONNAIRES 8 1.5. REPRESENTATION DES NOMBRES NEGATIFS EN BINAIRE 8

1.6. OPERATIONS ARITHMETIQUES EN BINAIRE 9

2. LE CODAGE 10

2.1. CODIFICATION DES NOMBRES ENTIERS 10

2.2. CODIFICATION DES NOMBRES REELS (NORME IEEE 754) 11

2.3. CODE BINAIRE REFLECHI OU CODE GRAY 12 2.4. CODE BCD (BINARY CODED DECIMAL) 12 2.5. CODE ASCII (AMERICAN STANDARD CODE FOR INFORMATION INTERCHANGE) 12

CHAPITRE 2 : GENERALITES SUR LES MICROPROCESSEURS 15

1. STRUCTURE D'UN SYSTEME A MICROPROCESSEUR 15

1.1. LE MICROPROCESSEUR 15 1.2. LA MEMOIRE ET LE BUS 15 1.3. LES PERIPHERIQUES 18

2. ARCHITECTURE D'UN MICROPROCESSEUR 19

2.1. L'UNITE ARITHMETIQUE ET LOGIQUE 19

2.2. L'UNITE DE CONTROLE 19

2.3. LES REGISTRES 20

2.4. CARACTERISTIQUES D'UN MICROPROCESSEUR 20 CHAPITRE 3 : LE MICROPROCESSEUR INTEL 8086 21

1. CARACTERISTIQUES DU 8086 21

2. STRUCTURE INTERNE DU 8086 21

2.1. FONCTIONS DE LA BIU 22

2.2. FONCTIONS DE L'EU 22

3. ORGANISATION DE L'ESPACE MEMOIRE 22

4. LES REGISTRES DU 8086 23

4.1. LES REGISTRES DE CALCUL 23

(3)

4.3. LES REGISTRES DE SEGMENTATION 24 4.4. LES REGISTRES DE CONTROLE 26

5. LES MODES D'ADRESSAGE 27

5.1. MODE REGISTRE 27 5.2. MODE IMMEDIAT 28 5.3. MODE DIRECT 28 5.4. ADRESSAGE INDIRECT 28

6. LES INSTRUCTIONS DE LA FAMILLE INTEL80X86 30

6.1. RESUME DES PRINCIPALES INSTRUCTIONS 31

6.2. LES SAUTS 37

7. CODAGE DES INSTRUCTIONS 39

CHAPITRE 4 : LA PILE ET SES UTILISATIONS 41

1. STRUCTURE DE LA PILE 41 2. ACCES A LA PILE 41 2.1. L'EMPILEMENT 41 2.2. LE DEPILEMENT 42 3. UTILISATIONS DE LA PILE 43 3.1. STOCKAGE TEMPORAIRE 43 3.2. LES APPELS AUX SOUS-PROGRAMMES ET LA PILE 43

3.3. PASSAGE DES PARAMETRES A UN SOUS-PROGRAMME 45

CHAPITRE 5 : LES INTERRUPTIONS 48

1. INTRODUCTION 48

2. TYPES D'INTERRUPTIONS 49

2.1. DEFINITION D'UNE INTERRUPTION 49

2.2. TYPES ET PROPRIETES DES INTERRUPTIONS 49

3. APPLICATION 51

3.1. METHODE PAR SCRUTATION 51 3.2. METHODE PAR INTERRUPTION 51

CHAPITRE 6 : LES ENTREES/SORTIES 53

1. INTRODUCTION 53

2. NOTION DE CONTROLEUR OU DE CIRCUIT D'INTERFACE 53

3. COMMUNICATION ENTRE LE MICROPROCESSEUR ET UN CIRCUIT D'INTERFACE 53

4. ACCES AUX REGISTRES D'UN CIRCUIT D'INTERFACE 54

5. APPLICATION :LE CIRCUIT D'INTERFACE SERIE 54

6. LE CIRCUIT D’INTERFACE PARALLELE 8255 54

6.1. CONNEXION DU 8255 AU MICROPROCESSEUR 55

6.2. PROGRAMMATION DU 8255 55

(4)

1. INTRODUCTION 57

2. ACCES AUX RESSOURCES MATERIELLES 57

3. STRUCTURE D’UN PROGRAMME EN ASSEMBLEUR 80X86 57

3.1. DECLARATION DES SEGMENTS 58

3.2. DECLARATION DES DONNEES ET DE LA PILE 58

3.3. EXEMPLE DE PROGRAMME 61 3.4. APPEL AUX FONCTIONS DU DOS ET DU BIOS 62

4. COMPILATION D’UN PROGRAMME EN ASSEMBLEUR 80X86 62

4.1. EDITION DU PROGRAMME 63

4.2. COMPILATION 63 4.3. EXECUTION DU PROGRAMME 63

(5)

C H A P I T R E

1

Systèmes de numération

et codage

1.

Les systèmes de numération

Un système de numération est un ensemble de symboles et de règles permettant la représentation de n’importe quel élément d’un ensemble de nombres données.

Exemple

Le système décimal permet d’écrire un nombre à l’aide de dix chiffres 0 à 9. Tout nombre est représenté par une combinaison de ces dix symboles.

1.1. Définition d’une base

La base d’un système de numération est la référence qui permet l’écriture d’un nombre. Dans le cas du système décimal, la base est 10.

Exemple

2148 = 2.103 + 1.102 + 4.101 + 8.100

En généralisant, 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 système décimal

C'est le système que nous utilisons dans la vie courante. Il est basé sur les dix chiffres 0 à 9. Si nous employons le système décimal avec aisance dans tous nos calculs, il n'en va pas de même pour les machines électroniques danslesquelles ce système reste difficile à mettre en œuvre pour plusieurs raisons d'ordre technique. C'est un autre système, plus adapté, qui est implanté.

Le problème de conversion se pose alors du moment que la machine et l'homme parlent deux langages différents : La machine ne peut accepter un nombre décimal et l'homme de son côté reste incapable d'interpréter un résultat fourni par la machine dans sa base sans faire appel à une gymnastique lourde d’esprit.

Par conséquent, les règles de passage entre la base décimale et n'importe quelle base B ont été définies :

1.2.1. Passage d’une base B à la base décimale Soit A un nombre exprimé dans une base B :

(A)B = an-1an-2...a0 avec 0 ≤ ai ≤ B-1

(6)

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

− = = 1 0 10 ) ( n i i iB a A Exemple

Soit A un nombre exprimé en base 8 : (A)8 = 725

L'équivalent de A en décimal est :

(A)10 = 7.82 + 2.81 +5.80 = 469

1.2.2. Passage de la base décimale à une base B Soit A un nombre exprimé dans le système décimal.

L’équivalent 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 représentent 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 = B.(a3.B + a2) + a1 = B.Q2 + a1 Q2 = B.a3 + a2 = B.Q3 + a2 Q3 = B.0 + a3 = B.0 + a3 Exemple (31)10 = (11111)2 = (1011)3

Vérifier ces résultats en appliquant les règles de passage.

Remarque

La base dans son propre système s’écrit toujours 10. A B Q1 a0 B Q2 a1 B Q3 a2 B 0 a3 Restes successifs

1.3. Les systèmes binaire, hexadécimal et octal

1.3.1. Le système binaire

C’est la base 2. Elle est utilisée dans tous les systèmes électroniques où les deux états VRAI et FAUX sont facilement réalisables (interrupteur fermé ou ouvert, transistor bloqué ou saturé, lampe allumée ou éteinte, ...). Cette base comporte uniquement les deux symboles 0 et 1. Ce sont les chiffres binaires appelés aussi bits (Binary digit) :

(A)2 = an-1an-2...a0 avec ai ∈ {0;1}

(7)

• a0 s’appelle le LSB (Least Significant Bit) : Bit de poids le plus faible.

Vu l'importance de système, nous allons consacrer plusieurs paragraphes à l'étude de certains des ses aspects, notamment le calcul arithmétique (voir 1.6) et les nombres négatifs (voir 1.5).

1.3.2. Le système hexadécimal

Le système hexadécimal comporte 16 symboles : les dix chiffres 0 à 9 et les six lettres A, B, C, D, E et F. Ce système est très répandu pour la simple raison qu'il permet de représenter les nombres binaires d'une manière plus compacte.

Table de correspondance Décimal / Binaire / Hexadécimal

Décimal Binaire Hexa. Décimal Binaire Hexa.

0 0000 0 8 1000 8 1 0001 1 9 1001 9 2 0010 2 10 1010 A 3 0011 3 11 1011 B 4 0100 4 12 1100 C 5 0101 5 13 1101 D 6 0110 6 14 1110 E 7 0111 7 15 1111 F Exemples

• Soit en base hexadécimale : (A)16 = 2AB

En décimal : (A)10 = 2.162 + 10.161 + 11.160 = 683

• Vérifiez les résultats suivants en appliquant les règles de conversion que vous connaissez : (62)10 = (3E)16 = (111110)2

Prenons le nombre (3E)16 et exprimons chaque chiffre hexadécimal 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 même résultat obtenu avec les règles de base.

Règles de conversion Base 16 / Base 2

• Pour passer de la base 16 à la base 2, on exprime chaque chiffre hexadécimal 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 hexadécimal.

Exemple

(N)2 = 00111110 donc (N)16 = 3E

Remarque

Vu que le passage Base 2 / Base 16 est direct et que la représentation hexadécimale est plus compacte, on préfère toujours écrire les nombres binaires en hexadécimal.

3 E

1.3.3. Le système octal

Il contient 8 symboles : 0 à 7. Il est moins fréquemment utilisé dans la représentation des nombres binaires.

(8)

Le passage du système binaire au système octal se fait par groupement de 3 bits.

Exemple

(A)2 = 1100110 donc (A)8 = 146

(A)8 = 253 d’où (A)2 = 100101011

1 4 6

1.4. Représentation des nombres fractionnaires

On isole la partie entière qu'on convertit selon les règles déjà connues. Ensuite, on multiplie la partie fractionnaire (partie après la virgule) par la base et on répète l’opération sur la partie fractionnaire du produit jusqu’à ce qu’elle soit nulle (ou que la précision voulue soit atteinte). Les parties entières des produits obtenus représentent les chiffres des la partie fractionnaire du nombre converti.

Exemple

Trouver l’équivalent binaire du nombre décimal : 35,125 • Partie entière : (35)10 = (100011)2 • Partie fractionnaire : 0,125 × 2 = 0,25 a-1 = 0 0,25 × 2 = 0,5 a-2 = 0 0,5 × 2 = 1,0 a-3 = 1 0,0 × 2 = 0 Arrêt D’où : (35,125)10 = (100011,001)2

1.5. Représentation des nombres négatifs en binaire

Il existe 3 modes de représentation des nombres signés en binaire : 1.5.1. Représentation en valeur absolue et bit de signe

On utilise un caractère binaire supplémentaire. 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 système de représentation n’est pas couramment employé car il n’est pas pratique dans les opérations arithmétiques.

bit de signe

1.5.2. Représentation par complément à 1

Le complément à 1 d’un nombre binaire s’obtient en remplaçant les 1 par des 0 et vice-versa.

Exemple

+7 → 0111 – 7 → 1000

(9)

Inconvénient

Le nombre 0 peut être codé de deux manières : 0000 et 1111. 1.5.3. Représentation en complément à 2

Le complément à 2 s’obtient en ajoutant 1 au complément à 1.

Exemple

+7 → en binaire naturel sur 4 bits : 0111 → le complément à 1 : 1000

auquel on ajoute 1 : 1000 + 1 = 1001 (l'équivalent de (–7) en code complément à 2 sur 4 bits)

Remarques

• Le code complément à 2 est le plus utilisé car il est adapté aux opérations arithmétiques. • Le MSB indique le signe du nombre : 1 → (–) et 0 → (+)

• On doit toujours spécifier le nombre de bits lorsqu’on travaille en complément à 2. Sur n bits, on peut représenter les nombres allant de –2n–1 à 2n–1–1. Sur 4 bits par exemple, on ne peut

représenter que les nombres compris entre –7 et +8 :

Décimal Code compl. à 2 Décimal Code compl. à 2

0 0000 –8 1000 1 0001 –7 1001 2 0010 –6 1010 3 0011 –5 1011 4 0100 –4 1100 5 0101 –3 1101 6 0110 –2 1110 7 0111 –1 1111

1.6. Opérations arithmétiques en binaire

1.6.1. L’addition Règles 0 + 0 = 0 1 + 0 = 1 + 0 = 1 1 + 1 = 0 avec retenue 1 + 1 + 1 = 1 avec retenue Exemple 1 1 1 1 0 1 1 1 1 0 1 + 1 1 0 0 0 1.6.2. La soustraction

Pour calculer (M – N), on calcule la somme de M et le complément à 2 de N.

Exemple

Pour calculer (7-5), on fait la somme de 0111 (7) et 1011 (complément à 2 de 5), d’où : 0111 + 1011 = 0010 (2 en décimal)

Remarque

(10)

opération d’addition ou de soustraction sur n bits soit cohérente, il faut que le résultat soit compris entre –2n–1 et 2n–1-1. Si ce n’est pas le cas, il y a un dépassement de la capacité de calcul

(Overflow). 1.6.3. Multiplication

Nous ne considérons que les opérations sur les nombres positifs, le traitement du signe est fait à part. Pour faire une multiplication en binaire, on suit les même règles que le système décimal :

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 réalisée comme la division décimale :

Dividende Diviseur 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 1 0 Quotient Reste

2.

Le codage

2.1. Codification des nombres entiers

Le codage d’un 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 2n–1

• En binaire signé (code complément à 2) sur n bits, les nombres sont compris entre –2n–1 et

2n–1–1

Exemple

A = –2

L’équivalent de A en binaire signé est :

Sur 8 bits Sur 16 bits Sur 32 bits

FE FFFE FFFFFFFE

Remarque

En langage C, les types utilisés occupent 1, 2 ou 4 octets :

Type Nombre d’octets Plage

int En fonction du système (*)

char 1 -128 → 127 unsigned char 1 0 → 255 short 2 -32 768 → 32 767 unsigned short 2 0 → 65 535 long 4 -2 147 483 648 → 2 147 836 647 unsigned long 4 0 → 4 294 967 295

(*)Dans les systèmes 16 bits (DOS par exemple) un type int occupe 2 octets alors que dans les systèmes 32 bits il occupe

(11)

A propos de signed et unsigned

Prenons l'exemple du type char :

Ce type occupe un octet dans la mémoire de l'ordinateur. Lorsqu'on affecte une valeur à une variable de type char, elle est toujours convertie en binaire avant d'être rangée en mémoire. Au moment de la lecture, la valeur binaire est interprétée en binaire naturel si la variable a été déclarée unsigned ou en binaire signé (code complément à 2) si la variable a été déclarée signed.

Afin de mieux illustrer cette notion, nous allons analyser un petit programme écrit en C : # include <stdio.h>

void main (void) {

char x; //signed est pris par défaut unsigned char y;

x=-1; y=x;

printf("(x)10 = %d ; (x)16 = %.2X\n",x,x); printf("(y)10 = %d ; (y)16 = %.2X\n",y,y); }

On déclare deux variable x et y de type char ; y est définie unsigned. x=-1;

On affecte la valeur –1 à x. En réalité, la valeur affectée à x est le complément à 2 du nombre 1, soit 11111111 en binaire (FF en hexadécimal).

y=x;

Ici on affecte la valeur de x à y (c'est la valeur binaire FF qui est recopiée dans y)

Les deux instructions printf servent à l'affichage de x et y en décimal (%d) puis en hexadécimal sur deux chiffre (%.2X). Le résultat 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 même (FF), cependant, cette valeur est interprétée –1 pour x qui a été définie comme un nombre signé et 255 pour y qui a été définie non signé (donc en binaire naturel).

2.2. Codification des nombres réels (norme IEEE 754)

Du moment que les nombres réels peuvent prendre des valeurs très grandes ou très petites, ils sont représentés en virgule flottante (floating point) selon le format normalisée 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 23 22 0

1bit 8bits 23bits

Exposant Mantisse

Signe Exemple

Soit à représenter 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

(12)

• Le bit de signe (bit 31) indique le signe du nombre : 1 → (–) ; 0 → (+) • L’exposant est codé sur 8 bits (bits 23 à 30). Il est égal à m+127.

• La mantisse s’écrit sur 23 bits (bits 0 à 22). Elle représente la suite des bits après la virgule (dans notre cas : 00001)

Ainsi, le format IEEE du nombre (8,25)10 est :

01000001000001000000000000000000 (soit 41040000 en hexa)

Remarques

• L’exposant 00000000 signifie que le nombre est dénormalisé (trop petit)

• L’exposant 11111111 signifie un dépassement de capacité (nombre trop grand : NaN (Not a Number))

Par conséquent, le plus petit exposant possible est 01 (m=–126) et le plus grand est FE (m=+127).

2.3. Code binaire réfléchi ou code GRAY

C’est un code non pondéré. Il est différent du code binaire naturel. La particularité de ce code est que le passage d’un nombre au nombre suivant se traduit par le changement d’un seul bit :

Décimal Binaire

réfléchi Décimal réfléchi Binaire

0 0000 8 1100 1 0001 9 1101 2 0011 10 1111 3 0010 11 1110 4 0110 12 1010 5 0111 13 1011 6 0101 14 1001 7 0100 15 1000

2.4. Code BCD (Binary Coded Decimal)

On fait correspondre à chaque chiffre décimal un mot binaire codé sur 4 bits.

Exemple

(5873)10 = (0101100001110011)BCD

Ce code est souvent employé dans les systèmes de comptage et dans certaines machines à calculer. Il permet de réaliser des opérations en décimal avec des chiffres binaires.

2.5. Code ASCII (American Standard Code for Information Interchange)

2.5.1. Définition

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 caractères (A,B,C,...,1,2,3,...,(,@,&,...). Cependant, la mémoire 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 représenter n'importe quel caractère sous forme d'un nombre binaire afin de faciliter son stockage et sa transmission.

Le code ASCII était parmi les premiers codes utilisés pour ce propos. C'est un code universel qui fait correspondre à chaque caractère un code sur 7 ou 8 bits.

Sur la page suivante, vous trouverez une table détaillée du code ASCII.

Dans sa première version, le code ASCII était codé sur 7 bits. Cette taille n'étant pas suffisante pour représenter tous les symboles, il a été étendu à 8 bits.

(13)

Table du code ASCII entre 0 et 127

Décimal Hexa Binaire ASCII Décimal Hexa Binaire ASCII

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

(14)

2.5.2. Codage d’une chaîne de caractères

Une chaîne de caractères est stockée sous forme d’une suite de codes ASCII représentant les caractères qui la constituent. Ces codes sont terminés par un indicateur de fin (en général, le caractère NUL (code ASCII : 0))

Exemple

En langage C, le mot "Bonjour" sera stocké dans la mémoire de l'ordinateur sous forme de 7 octets suivis du caractère NUL :

(15)

C H A P I T R E

2

Généralités sur les

microprocesseurs

1.

Structure d'un système à microprocesseur

1.1. Le microprocesseur

On appelle processeur tout dispositif électronique qui permet de réaliser : • des opérations arithmétiques

• des opérations logiques

• des manipulations de bits (décalage, rotation) • des transferts mémoire

Le microprocesseur est un processeur qui existe sous forme d'un circuit intégré. C'est le composant de base de tout ordinateur.

A un instant donnée, le microprocesseur peut réaliser une seule instruction. Mais, il faudrait qu'il soit capable de réaliser une suite d'instructions (un programme).

Question : Où faut-il mettre le programme ? Réponse : Dans une mémoire.

Question : Comment communiquent ces deux circuits ?

Réponse : Pour y répondre, on va étudier, tout d'abord, l'organisation de la mémoire.

1.2. La mémoire et le bus

La mémoire est une suite de m cases contenant chacune n bits :

n bits Données binaires

0 0 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0 1 m-1 1 0 0 0 0 1 0 0 … … m cases …… Adresse

Pour accéder à une case, il faut fournir le numéro de la case : l'adresse. Soit l'exemple suivant qui illustre une mémoire de 16 cases de 8 bits :

(16)

0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 14 1 1 1 0 0 0 0 0 15 0 0 0 0 1 1 0 0 … …

Question : Combien faut-il de fils pour composer l'adresse en binaire ?

Réponse : 4 fils car 16 = 24. Ces fils s'appellent : le bus d'adresse. Un bus est un ensemble de

fils généralement partagé entre plusieurs dispositifs.

Question : Où peut on récupérer la donnée existante dans la case désignée par l'adresse ? Réponse : sur 8 fils s'appelant le bus de données.

A0 A1 A2 A3 D0 D0 D7 Mémoire de 16 octets B us d ’a d re ss e Bus de données

1.2.1. Communication entre un microprocesseur et une mémoire

Le bus d'adresse est unidirectionnel.

Le bus de données est bidirectionnel. Il permet au microprocesseur : Bus d’adresse

Bus de données Bus de contrôle

Mémoire Microprocesseur

• De lire le contenu de la mémoire • D'écrire dans la mémoire

Question : Comment choisir entre la lecture et l'écriture ?

Réponse : Le microprocesseur doit être capable de sélectionner le sens de l'échange. Ceci s'effectue grâce au bus de contrôle.

Exemple

La ligne R/W (Read/Write) fait partie du bus de contrôle. Elle permet de fixer le sens de l'échange entre le microprocesseur et le dispositif sélectionné (une mémoire par exemple).

(17)

1.2.2. Types de mémoires

Les mémoires sont classées en deux catégories : 1.2.2.1. Les mémoires vives

Appelées aussi RAM (Random Access Memory), elles sont accessibles en lecture et en écriture. Elles servent au stockage des données et des variables ainsi que du programme à exécuter.

On distingue les RAM statiques (SRAM) et les RAM dynamiques (DRAM) :

• Les SRAM sont très rapides mais coûteuses. Elles servent à la réalisation des mémoires cache des microprocesseurs.

• Les DRAM sont lentes à cause de leur cycle de rafraîchissement mais moins coûteuses ce qui permet d'atteindre des tailles mémoire élevées. Elles constituent la mémoire vive de l'ordinateur.

1.2.2.2. Les mémoires mortes

On les appelle aussi ROM (Read Only Memory). Elles sont accessibles uniquement en lecture. Dans un ordinateur, elles contiennent le programme de démarrage, les données système et le BIOS (Basic Input Output System).

Il existe des ROM effaçables et reprogrammables : • EPROM : effaçables par rayonnement ultra-violet. • EEPROM ou E2PROM : effaçables électriquement.

1.2.3. Communication avec plusieurs mémoires

Le microprocesseur peut communiquer avec plusieurs mémoires branchées sur les bus d'adresse et de données.

Question : Comment sélectionner une mémoire parmi les mémoires branchées ?

Réponse : La sélection s'effectue grâce à un circuit spécialisé appelé : décodeur d'adresse.

CS (Chip Select) : entrée d’activation de la mémoire.

Le décodeur d'adresse active une mémoire à la fois en fonction de l'adresse présente sur le bus d'adresse. Microprocesseur Mémoire 3 Mémoire 2 Mémoire 1 Décodeur d’adresse Bus d’adresse Bus de données CS CS CS

(18)

Exemple 0000 3FFF Mémoire 1 4000 BFFF Mémoire 2 C000 CFFF Mémoire 3 D000 FFFF Espace vide 1. Donner la taille de l'espace mémoire total.

2. Donner la taille de chaque mémoire.

Solution L'espace total

Il commence à 0000h et se termine à FFFFh. Le nombre de cases en hexadécimal est donc : FFFFh – 0000h +1 = 10000h cases

Ce qui donne en décimal : 164 cases de 8 bits (un ensemble de 8 bits est appelé octet)

En général, on exprime les tailles des mémoires en utilisant les multiples suivant : 1 kilo-octet (Ko) = 210 octets = 1 024 octets

1 méga-octet (Mo) = 220 octets = 1 048 576 octets

L'espace total de notre mémoire sera alors de : 164 = 216 = 26.210 = 64 Ko

Mémoire 1

• Nombre de cases : 3FFFh – 0000h +1 = 4000h cases

• En décimal : 4000h → 4.163 = 22.212 = 214 = 24.210 = 16 Ko

Mémoire 2

• Nombre de cases : BFFFh – 4000h +1 = 8000h cases • En décimal : 8000h → 8.163 = 23.212 = 215 = 25.210 = 32 Ko

Mémoire 3

• Nombre de cases : CFFFh – C000h +1 = 1000h cases • En décimal : 1000h → 163 = 212 = 22.210 = 4 Ko

1.3. Les périphériques

Afin que le microprocesseur puisse échanger les données avec le milieu extérieur, il utilise des périphériques de natures diverses (clavier, souris, imprimante, traceur, ...)

La communication avec les périphériques s'effectue par l'intermédiaire des circuits d'interface.

Bus d’adresse Bus de données Bus de contrôle Circuits d’interface Microprocesseur Périphériques

(19)

Exemple

• Le circuit d'interface série (l'UART) • Le circuit d'interface parallèle (le PPI)

2.

Architecture d'un microprocesseur

Le microprocesseur comporte :

• une unité arithmétique et logique (UAL), • une unité de contrôle et de commande, • des registres,

• un ou plusieurs bus internes.

Registres

Bus interne

UAL Unité de

contrôle

2.1. L'Unité Arithmétique et Logique

C'est un circuit combinatoire. Il réalise les opérations arithmétiques et logiques (voir cours des circuits logiques, chapitre 3)

X Y UAL Sélection de l’opération Z

2.2. L'unité de contrôle

Elle gère toutes les opérations qui concourent à la réalisation d'une instruction.

Exemple

L'instruction "Lire la case d'adresse 12" est exécutée par l'unité de contrôle de la manière suivante : 1. Placer 12 sur le bus d'adresse

2. Attendre la donnée de la mémoire 3. Lire la donnée du bus de données

4. Charger la valeur lue dans le registre demandé

(20)

La gestion des tâches implique la notion de temps. Le microprocesseur a besoin d'une horloge dont la fréquence est exprimée en méga-hertz (MHz).

2.3. Les registres

Ce sont des mémoires internes. Indispensables au fonctionnement du microprocesseur, ils permettent notamment le stockage des opérandes, des résultats, des pointeurs d'adresse, ...

2.4. Caractéristiques d'un microprocesseur

• Les microprocesseurs se distinguent par : 1. leur structure interne,

2. leur fréquence d'horloge,

3. le nombre d'instructions réalisables (jeu d'instructions),

4. la manière d'accéder aux données dans la mémoire (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 données est de n bits.

• L'espace d'adressage d'un microprocesseur est le nombre maximal de cases mémoire qu'il peut adresser. Ce nombre dépend 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

(21)

C H A P I T R E

3

Le microprocesseur

INTEL 8086

1.

Caractéristiques du 8086

• Structure 16 bits

• Capacité d'adressage de 1 Mo • 14 registres internes de 16 bits • 24 modes d'adressage

• Opérations sur des bits, des octets, des mots et des chaînes de caractères • Arithmétique signée ou non signée

• Arithmétique binaire ou BCD, sur 8 ou 16 bits

(22)

Le 8086 se compose de deux unités de traitement séparées : l'unité d'interface de bus (BIU) et l'unité d'exécution (EU)

L'unité d'exécution comporte l'UAL, les registres généraux (AX, BX, CX, DX), les registres d'adressage (SP, BP, SI, DI), le registre d'état (Flags) et le décodeur d'instructions.

L'unité d'interface de bus comporte une file d'attente d'instructions gérée 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 à exécuter de la mémoire et les stocke dans la file d'attente FIFO • Elle calcule les adresses physiques sur 20 bits

• Elle réalise le transfert des données avec la mémoire

2.2. Fonctions de l'EU

• Elle extrait les codes des instructions à partir de la file d'attente et les exécute

• Elle fournit les adresses des opérandes au BIU en nommant le segment concerné et en fournissant le déplacement dans ce segment

• Elle reçoit et fournit les opérandes au BIU

Ces deux unités travaillent pratiquement comme deux processeurs en parallèle. Cette procédure est appelée mode pipe-line. Elle permet un gain important en temps d'exécution.

3.

Organisation de l'espace mémoire

Le 8086 dispose d'un bus d'adresse de 20 bits : A19 à A0 donc d'un espace mémoire adressable de

220 = 1 Mo.

La mémoire peut être vue ainsi :

8 bits (octet) 00000 00001 FFFFE FFFFF … ..

Chaque case contient un octet.

Le 8086 manipule des données sur 8 bits et sur 16 bits :

• Pour accéder à une donnée sur 8 bits, il suffit de donner son adresse sur 20 bits.

• Les données exprimées sur 16 bits occupent deux octets dans la mémoire. Dans la famille INTEL les 8 bits de poids faible sont stockées en premier suivis des 8 bits de poids fort. Cette convention est appelé Big Endian (la convention rivale est appelé Little Endian, elle est adoptée dans les microprocesseurs MOTOROLA)

Ainsi, le 8086 stocke le mot 658Fh à l'adresse 01000h comme suit : 01000h 8Fh

(23)

4.

Les registres du 8086

Le 8086 a 14 registres de 16 bits classés en 4 groupes : • Les registres de calcul

• Les registres d'adressage • Les registres de segmentation • Les registres de contrôle

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 indépendants de taille 8 bits : AL et AH AX

15 8 7 0

AH AL

(AX High) (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 manière implicite par certaines instructions comme compteur (instructions de boucle, traitement des chaîne des caractères, ...).

CX = CH : CL 4.1.4. Le registre DX

Appelé registre de donnée, il est utilisé implicitement par certaines instructions pour stocker des opérandes ou des résultats.

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)

Appelés index de source et index de destination respectivement. Ils sont souvent utilisés dans la gestion des tableaux et des chaînes de caractères dans la zone mémoire réservée aux données.

(24)

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 données existantes dans la pile (paramètres de fonction, variables locales, ...).

4.3. Les registres de segmentation

Du moment que le 8086 a une architecture 16 bits, les adresses qu'il gère dans un programme sont aussi exprimées sur 16 bits. Elles s'appellent les adresses logiques. Ces adresses permettent d'accéder aux données et aux instructions stockées dans la mémoire 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 exprimée sur 16 bits.

Toutefois, l'adresse logique permet d'accéder uniquement à un espace de 216 = 64 Ko, alors que

le 8086 peut adresser jusqu'à 1 Mo de mémoire (20 lignes d'adresse). Les registres de segmentation ont été spécialement créés 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 spécifique de la mémoire. En effet, lorsqu'un programme est chargé, il réserve plusieurs zones mémoire généralement indépendantes :

• Une zone réservée aux données (octets, mots, tableaux, ...) • Une zone réservée aux instructions (le code du programme) • Une zone réservée à la pile

DS → Zone de données CS → Zone de code

SS → Zone de pile

4.3.1. Registre de segment de données DS (Data Segment) Il permet d'accéder à la zone de données.

L'adresse réelle d'une donnée est appelé adresse physique. Elle est exprimée sur 20 bits et c'est elle qui est effectivement mise sur le bus d'adresse pour accéder à la donnée.

Dans un programme, la donnée sera désignée par une adresse logique sur 16 bits et par une valeur de segment inscrite dans le registre DS.

L'adresse physique est définie par la formule ci-dessous :

(25)

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 appelée déplacement ou offset.

• Une case mémoire est complètement définie par son segment et par son déplacement dans ce segment.

• Une adresse physique a deux représentations : • Représentation sur 20 bits.

• Représentation Segment:Offset (la plus répandue).

Exemple

0100:0000 (Segment 0100 et Offset 0000h) s'écrit sur 20 bits : 01000h • Une même adresse physique peut être obtenue de plusieurs manières :

Soit l'adresse physique 01000h. Dans les deux cas suivants on accède à cette même case : • DS = 0 ; Offset = 1000h → 1000h + (10h × 0) = 01000h

• DS = 100h ; Offset = 0 → 0 + (10h × 100h) = 01000h

En général, en fixant DS, on peut accéder 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 0FFFF 17FFF 08000 DS = 0000 DS = 0800 FFFFF

L'adresse physique 08000h appartient en même 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 réservée aux instructions du programme est associé au registre de segmentation CS. Afin que le microprocesseur puisse lire un instruction dans la mémoire, 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 mémoire gérée en LIFO (Last In, First out). Elle est utilisée d'une part par le processeur pour sauvegarder l'état du système lors d'un appel à un sous-programme ou à une interruption, et d'autre part par le programmeur pour passer des paramètres à un sous-programme

(26)

ou stocker temporairement des données, ...

La pile est un élément vital pour le fonctionnement du microprocesseur (voir chapitre 4 : La pile) La zone mémoire réservée à la pile est associée 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 utilisée 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 chaînes de caractères, ...). Il permet l'accès à n'importe quelle donnée dans la mémoire.

4.4. Les registres de contrôle

Les registres de contrôle 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 10 9 8 7 6 5 4 3 2 1 0

OF DF IF TF SF ZF AF PF CF

Ces drapeaux sont divisés en deux catégories : 4.4.1.1. Indicateurs d'état

Les indicateurs d'état sont mis à jour après chaque instruction. Leur valeur indique la nature du résultat obtenu :

Drapeau Signification Remarques

CF Carry Mis à 1 en cas d'une retenue

PF Parity Mis à 1 lorsque le nombre de 1 dans le résultat est pair AF Auxiliary Carry Mis à 1 lorsqu'une opération engendre une retenue entre le

quartet faible et le quartet fort d'un octet ZF Zero Mis à 1 en cas d'un résultat nul

SF Sign Mis à 1 lorsqu'un résultat est négatif

OF Overflow Mis à 1 en cas de dépassement de la capacité de calcul

Exemple

• Si AX = 0012h, l'opération AX ← AX – 0012h donne un résultat nul. Le microprocesseur met automatiquement ZF à 1.

• Si BL = FFh, l'opération BL ← BL + 10h engendre une retenue (en effet, FFh + 10h = 0Fh avec une retenue). CF est donc automatiquement mis à 1.

Remarque

(27)

4.4.1.2. Indicateurs de contrôle

Les indicateurs de contrôle permettent de modifier le comportement du microprocesseur. Ils sont positionnés par le programmeur.

Drapeau Signification Remarques

IF Interrupt Autorisation des interruptions : 0 : interruptions inhibées 1 : interruptions autorisées

DF Direction Sens de traitement des chaînes de caractères : 0 : sens direct

1 : sens inverse

TF Trace 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 exécuter. Il est automatiquement mis à jour par le microprocesseur après 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 à exécuter = IP + (10h × CS)

5.

Les modes d'adressage

Une instruction peut exiger 0, 1 ou plusieurs opérandes.

Exemples

• 0 opérande : CLS (effacer l'écran en Basic) • 1 opérande : sin, cos, log, ...

• 2 opérandes : addition, soustraction, ... L'opérande peut être fourni de diverses manières :

• En donnant immédiatement sa valeur : log(12) (12 est un opérande donné en immédiat). • En fournissant son adresse : log(a) (a est une variable stockée à une adresse dans la mémoire

de l'ordinateur).

• En spécifiant l'index de l'opérande dans un tableau : log(A[i]) (A est un tableau et i l'index de l'opérande dans ce tableau).

Afin d'étudier des exemples sur les différents modes d'adressage, nous allons donner la syntaxe de l'instruction de transfert MOV :

MOV destination, source

Destination est chargée par le contenu de source. Source reste inchangée.

5.1. Mode Registre

L'opérande est désigné par le contenu d'un registre.

Exemple

MOV AX,DX

Avant l'instruction Après l'instruction

AX = 12C7h

(28)

5.2. Mode Immédiat

Un opérande est donné en immédiat s'il constitue lui même la valeur.

Exemple

MOV SI,1240h SI est chargé par la valeur immédiate 1240h (SI ← 1240h).

Remarque

Ce type de transfert est interdit avec les registres de segmentation (DS, CS, SS, ES).

5.3. Mode direct

Un opérande est donné en mode direct s'il est désigné par son adresse logique dans la mémoire.

Exemple 1

MOV [1200h],5Ah

La valeur 5Ah sera stockée à l'adresse logique 1200h. Pour calculer l'adresse réelle de la case (l'adresse physique), il faut connaître la valeur stockée 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 donnée sur 16 bits, elle occupera les deux octets d'adresse logique 1200h et 1201h.

Si DS = 720h, la répercussion de cette instruction sur la mémoire sera : 0720:1200 59h

0720:1201 4Dh

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

5.4. Adressage indirect

On a très souvent besoin de manipuler des tableaux ou des chaînes de caractères.

Pour accéder à un élément d'un tableau d'octets, il faut connaître l'adresse de base du tableau (ici 1202h) et l'indice i de l'élément dans le tableau.

1202 1203 1204 1205 1206 i=0 i=3

Pour lire le 4ème élément du tableau (indice i=3) en mode direct, on doit calculer son adresse :

1202h + 3 = 1205h

D'une manière générale, dans un tableau où chaque élément occupe m octets, l'adresse de l'élément d'indice i est donnée par :

(29)

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 plutôt que des adresses explicites

5.4.1. Mode indirect basé

L'adresse logique de l'opérande est fournie par BX ou BP avec éventuellement un déplacement constant sur 8 ou 16 bits.

Les registres de segment utilisés 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 donnée dans le segment de données (registre DS), alors que BP sera employé pour accéder aux informations stockées dans la pile (registre SS).

On note un opérande 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 donnée 0768h sera stocké à l'adresse pointée par BX, soit : 11A62h. La donnée étant sur 16 bits, le résultat de cette instruction sera :

11A62h 68h 11A63h 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 déplacement constant sur 8 bits. Ce déplacement 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 déplacement constant sur 8 ou 16 bits.

SI et DI sont des pointeurs utilisés dans la zone des données. 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

(30)

Résultat de l'instruction :

A1BA:34AB 2Bh A1BA:34AC 14h

Exemple 2

Soit le programme suivant : MOV AX,A1BAh MOV DS,AX MOV DI,C140h MOV AX,1412h MOV [DI],AX

Dans la dernière instruction où l'adressage indirect indexé est employé : • L'adresse logique : C140h

• L'adresse physique : A1BA0h + C140h = ADCE0h Résultat de l'instruction :

ADCE0h 12h ADCE1h 14h 5.4.3. Mode indirect basé-indexé

Dans ce mode, les modes indexé et basé sont combinés. L'adresse logique est donnée par BX/BP et SI/DI. Quatre cas sont possibles :

Avec le registre BX (et le registre de segmentation DS) : • BX + SI + déplacement éventuel sur 8 ou 16 bits

• BX + DI + déplacement éventuel sur 8 ou 16 bits

Avec le registre BP (et le registre de segmentation SS) : • BP + SI + déplacement éventuel sur 8 ou 16 bits

• BP + DI + déplacement éventuel sur 8 ou 16 bits

Ce type d'adressage est très utile dans le traitement des chaînes de caractères ou dans le cas de traitement simultané de tableaux. En effet, en faisant pointer BX sur le début d'une chaîne de caractères, SI peut être utilisé comme index pour accéder aux différents caractères.

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 catégories : 1. Instructions de transfert

2. Instructions arithmétiques 3. Instructions logiques

(31)

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 exécutés sur un PC équipé d'un microprocesseur Pentium sans le moindre problème.

• Le 80386 et ses successeurs ont une architecture 32 bits. Les registres ont gardé leur même nomination avec l’ajout du préfixe E (Extended) pour indiquer leur taille de 32 bits : EAX, EBX, ESI, EDI, EBP, ... Les instructions ont été aussi étendus sur les opérations 32 bits. Ainsi sur un Pentium, toutes les opérations suivantes sont possibles :

Sur 32 bits : MOV EAX,EBX

Sur 16 bits : MOV AX,BX (AX et BX sont les 16 bits de poids faible de EAX et EBX) Sur 8 bits : MOV AL,BL

Cependant, le 80386 et ses successeurs ne peuvent fonctionner en 32 bits que sous un mode appelé mode protégé.

Sur les pages suivantes vous trouverez un résumé des principales instructions du 8086 avec des exemples d'application.

6.1. Résumé des principales instructions

(32)
(33)

INSTRUCTIONS DU 8086

(Résumé des principales instructions)

1. Instructions de transfert

Syntaxe Rôle Remarques Exemples

MOV destination , source Transfère le contenu de source vers

destination :

destination ← source

destination et source doivent être de même

taille (8 bits ou 16 bits). Sont interdits :

le transfert mémoire, mémoire (MOV [100h],[1200h])

le transfert registre de segmentation, valeur immédiate (MOV DS,1200h)

MOV AX,5BC3h (registre 16 bits) MOV CL,4Eh (registre 8 bits) MOV AX,[1200h] (adressage direct) MOV [BX],CL (adressage basé) ... Cours de l’archite cture des ordinate urs – FS T Ta nger – K. EL - 3 3 -

2. Instructions arithmétiques

Syntaxe Rôle Remarques Exemples

ADD destination , source Effectue une addition entre destination et

source :

destination ← destination + source

S'il y a une retenue le drapeau CF (Carry) est mis à 1.

destination et source doivent être de même

taille (8 bits ou 16 bits).

Tous les registres sont utilisables sauf les registres de segment.

l'addition mémoire, mémoire est interdite.

ADD DX,1000h

(addition sur 16 bits : DX←DX+1000h) ADD BH,F1h

(addition sur 8 bits : BH←BH+F1h) ADD AL,[1205h] (adressage direct) ADD CL,[SI] (adressage indexé) ...

ADC destination , source Effectue une addition entre destination et

source avec la retenue CF :

destination ← destination + source + CF

Mêmes remarques que ADD ADC DX,300h (DX←DX+300h + CF)

Si DX=500h et CF=1 alors DX prendra la valeur 801h

INC destination Incrémente destination

destination ← destination + 1

destination est un registre de 8 ou 16 bits. INC DI

MOK

H

(34)

Cours de l’archite cture des ordinate urs – FS T Ta nger – K. EL - 3 4 -

Syntaxe Rôle Remarques Exemples

SUB destination , source Effectue une soustraction entre

destination et source :

destination ← destination - source

Mêmes remarques que ADD SUB CH,BL (CH←CH-BL)

DEC destination Décrémente destination

destination ← destination - 1

destination est un registre de 8 ou 16 bits. DEC BH MUL source Effectue une multiplication entre AX (ou

AL) et source :

Sur 8 bits :

AX ← AL x source

Sur 16 bits :

DX:AX ← AX x source

Multiplication sur 8 bits :

source est un registre 8 bits ou une adresse

mémoire

Multiplication sur 16 bits :

source est un registre 16 bits ou une adresse

mémoire

MUL DH (AX←AL x DH)

DIV 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)

Division sur 8 bits :

source est un registre 8 bits ou une adresse

mémoire

Division sur 16 bits :

source est un registre 16 bits ou une adresse

mémoire

DIV CL (AL←AX / CL, reste dans AH)

3. Instructions logiques

Syntaxe Rôle Remarques Exemples

AND destination , source Effectue un ET logique entre destination et source :

destination ← destination ET source

destination et source doivent être de même

taille. Ils peuvent être des registres de 8 ou 16 bits ou des cases mémoire.

AND DH,CL

Si DH=F4h et CL=3Fh alors : DH ←DH ET CL = 34h OR destination , source Effectue un OU entre dest. et source :

destination ← destination OU source même remarque que AND OR SI,BP

XOR destination , source Effectue un OU exclusif entre destination et source :

destination ← destination ⊕ source

même remarque que AND XOR CH,AL

Si CH=42h et AL=9Ah alors : CH ← CH ⊕ AL = D8h NOT destination Effectue le complément de destination :

destination ← destination

destination peut être un registres de 8 ou 16 bits

ou une case mémoire. NOT DLSi DL=C1 alors : DL ← DL = 3Eh

MOK

H

(35)

4. Instructions de manipulation de bits

Syntaxe Rôle Remarques Exemples

(1) SHR destination , 1

(2) SHR destination , CL Réalise un décalage à droite de destination décalage d'un seul bit à droite décalage de n bits à droite tel que n est la valeur

stockée dans CL

SHR AL,CL

Si AL=7Ah et CL=4 alors AL←07h (1) SHL destination , 1

(2) SHL destination , CL Réalise un décalage à gauche de destination (1) décalage d'un seul bit à gauche (2) décalage de n bits à gauche (CL=n) SHL BL,1Si BL=41h alors BL←82h

(1) ROR destination , 1

(2) ROR destination , CL Réalise un rotation à droite de destination (1) rotation d'un seul bit à droite (2) rotation de n bits à droite (CL=n)

(1) ROL destination , 1

(2) ROL destination , CL Réalise un rotation à gauche de destination (1) rotation d'un seul bit à gauche (2) rotation de n bits à gauche (CL=n)

(1) RCR destination , 1

(2) RCR destination , CL Réalise un rotation à droite de destination à travers le bit CF (1) rotation d'un seul bit à droite (2) rotation de n bits à droite (CL=n) (1) RCL destination , 1

(2) RCL destination , CL Réalise un rotation à gauche de destination à travers CF (1) rotation d'un seul bit à gauche (2) rotation de n bits à gauche (CL=n) RCL BL,CLSi BL=72h, CL=2 et CF=0 alors :

BL←C8h et CF←1 Cours de l’archite cture des ordinate urs – FS T Ta nger – K. EL - 3 5 -

5. Instructions de branchement

Syntaxe Rôle Remarques Exemples

JMP Etiquette Effectue un saut inconditionnel à l'instruction marquée par Etiquette CALL Etiquette Effectue un appel au sous-programme

marqué par Etiquette. Le sous-programme appelé doit obligatoirement se terminer par l'instruction de retour RET

CMP destination , source Effectue l'opération : destination - source et positionne les drapeaux du registre d'état.

source et destination ne sont pas modifiés

Cette instruction précède en général un saut conditionnel

JE Etiquette Effectue un saut à Etiquette si égal CMP AL,5Ah

JE suite (saut à suite si AL=5Ah)

JNE Etiquette Effectue un saut à Etiquette si différent CMP SI,3B00h

JNE boucle (saut à boucle si SI≠3B00h) JL,JLE Etiquette Effectue un saut à Etiquette si inférieur ou

inférieur ou égal respectivement La comparaison est effectuée en binaire signé CMP CL,30hJL fleur (saut à fleur si CL<30h)

MOK

H

(36)

Cours de l’archite cture des ordinate urs – FS T Ta nger – K. EL - 3 6 -

Syntaxe Rôle Remarques Exemples

JG,JGE Etiquette Effectue un saut à Etiquette si supérieur

ou supérieur ou égal respectivement La comparaison est effectuée en binaire signé CMP DH,FFh - JG fleur2Si DH=2, il y aura saut car 2>-1 (FF en

binaire signé) JB,JBE Etiquette Effectue un saut à Etiquette si inférieur ou

inférieur ou égal respectivement La comparaison est effectuée en binaire non signé

JA,JAE Etiquette Effectue un saut à Etiquette si supérieur

ou supérieur ou égal respectivement La comparaison est effectuée en binaire non signé CMP DH,FFh - JA fleur2Si DH=2, il n'y aura pas de saut car

2<255 (FF en binaire non signé) JZ,JC,JP,JS,JO Etiquette Effectue un saut à Etiquette si le drapeau

ZF, CF, PF, SF, OF respectivement est à 1 ADD AL,14hJC Trai_Re (Saut à Trai_Re en cas de

retenue) JNZ,JNC,JNP,JNS,JNO

Etiquette Effectue un saut à Etiquette si le drapeau ZF, CF, PF, SF, OF respectivement est à 0 SUB AX,185EhJNZ suite (Saut à suite si le résultat de la soustraction n'est pas nul)

6. Instructions de contrôle et de gestion de la pile

Syntaxe Rôle Remarques Exemples

CLC, CLD, CLI Met à zéro les drapeaux CF, DF et IF respectivement

STC, STD, STI Met à un les drapeaux CF, DF et IF respectivement

CMC Complémente le bit de retenue CF

NOP N'effectue aucune opération Instruction utilisée en général pour allonger la

durée d'une boucle ou occuper un espace non utilisé.

PUSH source Empile source source doit être un registre de 16 bits ou un

pointeur vers une adresse.

Le pointeur de pile SP est décrémenté de 2

PUSH AX PUSH [SI] POP destination Dépile le sommet de la pile vers

destination destination doit être un registre de 16 bits ou un pointeur vers une adresse. Le pointeur de pile SP est incrémenté de 2

POP DS POP [BX]

MOK

H

(37)

6.2. Les sauts

Ils sont également appelés des branchements, ils permettent de poursuivre l'exécution du programme à un point spécifique du programme avec ou sans condition préalable.

Les appels aux sous-programmes sont des sauts particuliers où l'appel peut être exécuté de plusieurs endroits du programme. Le retour s'effectue à l'instruction se trouvant juste après l'appel. Les sauts sont classés en deux catégories :

1. Les sauts inconditionnels 2. Les sauts conditionnels 6.2.1. Notion d'étiquette

Quand on écrit un programme en langage assembleur, on peut désigner certaines instructions par des étiquettes (labels). Une étiquette joue le rôle de référence lorsqu'on désire effectuer un saut à l'instruction marquée.

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 dernière ligne du programme fait référence à l'étiquette TestRS par l'instruction de saut conditionnel JZ.

6.2.2. Les sauts inconditionnels

Ces sauts ont lieu après l'exécution d'une instruction de saut sans respect préalable d'une quelconque condition.

6.2.2.1. L'instruction JMP

Syntaxe : JMP Etiquette

Dès que le microprocesseur rencontre cette instruction, il continue l'exécution à l'instruction indiquée par Etiquette.

L'exécution se poursuit normalement et aucune mémorisation de l'endroit d'appel n'est faite.

Exemple MOV CH,AL MOV CL,4 SHR AL,CL JMP Suite MOV AL,CH

Suite: AND AL,0FH

XOR DX,DX

Dans cet exemple, l'instruction MOV AL,CH sera ignorée. L'instruction exécuté après SHR AL,CL sera AND AL,0Fh.

(38)

Remarque

Une étiquette représente l'adresse de l'instruction qu'elle désigne. Si l'instruction AND AL,0Fh est située à l'adresse 1200h, cette valeur sera affectée à l'étiquette Suite.

Lorsque le microprocesseur exécute l'instruction JMP Suite, il charge le pointeur d'instructions IP par l'adresse stockée dans Suite, soit dans notre cas IP ← 1200h. Ceci provoque immédiatement 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 programme est une suite d'instructions qui effectuent un traitement donné. Les sous-programmes permettent d'améliorer la lisibilité et évitent surtout les répétitions lorsqu'on désire effectuer un même traitement à plusieurs endroits du programme.

Un sous-programme doit être terminé par l'instruction de retour RET et sa première instruction désignée par une étiquette qui servira de référence d'appel.

En rencontrant l'instruction CALL, le microprocesseur suit le même comportement que pour JMP à la différence qu'il mémorise l'endroit d'appel pour y retourner à la fin du sous-programme.

Exemple

MOV DL,41h

CALL Affich ;Premier appel au sous-programme Affich XOR BL,BL ;instruction exécutée après le premier appel

ADD DL,05h

CALL Affich ;Deuxième appel au sous-programme Affich OR AL,0Fh ;instruction exécutée après le deuxième appel ...

Affich: MOV AH,2 ;Début du sous-programme

INT 21H

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

Remarque

L'adresse de retour est mémorisée dans la pile au moment de l'appel. En arrivant à la fin du sous-programme (instruction RET), le microprocesseur récupère l'adresse de retour de la pile et continue l'exécution à cette adresse (pour plus de détails, voir chapitre 4 : La pile paragraphe 1.2).

1er Retour

2ème Retour

6.2.3. Les sauts conditionnels

Les sauts conditionnels ont lieu si une condition est vérifiée. Ils dépendent en réalité des différents drapeaux du registre d'état (CF, ZF, PF, ...).

Avant d'effectuer un saut conditionnel, il faut positionner les drapeaux pour traduire la condition à vérifier. Dans la plupart des cas, les sauts conditionnels sont précédés par deux instructions de comparaison : CMP ou TEST. Ceux deux instructions n'ont AUCUNE influence sur les opérandes qu'on compare. Leur seul rôle est de positionner les drapeaux en fonction du résultat de la comparaison.

6.2.3.1. L'instruction CMP

Syntaxe : CMP destination,source destination et source restent inchangés.

CMP réalise une soustraction entre les deux opérandes : destination – source

(39)

En fonction du résultat de cette opération, les drapeaux du registre d'état sont positionnés.

Exemple

CMP AL,50h

Si AL = 50h, la soustraction donnera un résultat nul. Par conséquent, ZF sera mis à 1. Ainsi, en examinant ZF après cette instruction, on peut vérifier si AL=50h ou non. 6.2.3.2. L'instruction TEST

Syntaxe : TEST destination,source destination et source restent inchangés.

TEST effectue un ET logique entre les deux opérandes : destination AND source

Les drapeaux sont positionnés en fonction du résultat de cette opération.

Exemple

TEST BL,BL

• Si BL = 00h, le ET donnera un résultat nul. Par conséquent, ZF sera mis à 1. • Si BL est différent de 00, le résultat du ET sera non nul, donc ZF sera mis à 0.

Donc, pour vérifier si BL est nul ou non, il suffit de tester l'état de ZF juste après cette instruction.

7.

Codage des instructions

Les instructions et leurs opérandes sont stockés en mémoire principale. La taille du code d'une instruction dépend du type de l'instruction ainsi que de la taille de l'opérande et du mode d'adressage utilisé.

Une instruction se compose en général de deux champs : • Le code opération qui représente l'instruction

• Le champ opérande qui représente la donnée ou la référence à la donnée (son adresse ou le registre pointeur utilisé)

Code opération

(1 ou 2 octets) (0,1,2,.. octets) Opérande

Exemples

• MOV AX,125Eh est codée sur 3 octets : B8 5E 12 (B8 : code opération MOV AX; 5E 12 : opérande donnée en immédiat)

• INC AX est codée sur un seul octet : 40

Le codage des instructions est l'une des tâches du compilateur assembleur. Sur la page suivante, vous trouverez quelques instructions avec leur code opération.

Le microprocesseur ne reconnaît en réalité que les codes opérations avec leurs opérandes rangés dans la mémoire principale.

Figure

Table de correspondance Décimal / Binaire / Hexadécimal
Table du code ASCII entre 0 et 127

Références

Documents relatifs

En conséquence, le statut des territoires français de la Caraïbe en fait potentiellement des pièces maîtresses du dispositif de coopération entre l’UE et les pays de la région,

La troisième partie traite de « la modernité dans l’espace rhodanien », à travers les travaux pour maintenir la navigation, les travaux de la Compagnie nationale du

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

Nous montrons que l’État national reste un acteur important de la régulation de la citoyenneté et que les villes et les échelons locaux de l’État ont acquis une marge de

Pour le collège, il est également question de débat dans le cadre de l’enseignement littéraire mais aussi de la vie scolaire : « savoir débattre avec les

Alors qu’il est possible de prévenir efficacement l’addition en position 4 par l’utilisation d’un groupement directeur, l’addition sur un noyau pyridinium 3-substitué

Les participants à l’étude étaient 12 étudiants de licence STAPS, représentatifs de différents niveaux de performance en gymnastique (niveau débutant à niveau régional

Si on a pu annoncer, à tort et à travers, la perte du corps – comme autrefois on annonçait la mort de Dieu – c’est que justement le corps demeure au centre des préoccupations