Les registres du microprocesseur


Un registre est un espace de stockage situé au coeur de la puce électronique. A l'instar de la mémoire vive on peut stocker des informations de : 8, 16, 32 bits. Chaque registre est utilisé en employant son nom.

Ci-après l'ensemble des registres utilisés par les programmes :

Les registres généraux

Ces registres sont au nombre de 8 : EAX, ECX, EDX, EBX, ESP, EBP, ESI et EDI.

EAX : L'accumulateur

C'est un registre 32 bits, il contient un sous registre de 16 bits nommé AX lui-même composé de deux sous registres 8 bits nommés respectivement AH et AL. Il est essentiellement utilisé dans les opérations arithmétiques.

ECX : Compteur boucle

C'est un registre 32 bits, il contient un sous registre de 16 bits nommé CX lui-même composé de deux sous registres 8 bits nommés respectivement CH et CL. Il sert dans les boucles de comptage. Il est utilisé notamment par l'instruction LOOP qui décrémente le registre ECX/CX.

EDX : Pointeur sur les I/O

C'est un registre de 32 bits, il contient un sous registre de 16 bits nommé DX lui-même composé de deux sous registres 8 bits nommés respectivement DH et DL. Il sert dans les références aux ports d'entrées / sorties. Il est relatif au registre : DS.

EBX : Pointeur base

C'est un registre 32 bits, il contient un sous registre de 16 bits nommé BX lui-même composé de deux sous registres 8 bits nommés respectivement BH et BL. Dans les adressages mémoire en mode réel, il sert comme pointeur vers le bloc de données pointé par le registre de segment : DS.

ESP : Pointeur de pile

C'est un registre de 32 bits, il contient un sous registre de 16 bits nommé SP . Ce registre est le pointeur de pile. Son contenu est toujours une adresse mémoire faisant référence à la dernière valeur placée sur la pile. Il est relatif au registre de segment SS.

EBP : Pointeur de données de la pile

C'est un registre de 32 bits, il contient un sous registre de 16 bits nommé BP . Ce registre sert à créer des cadres de pile afin de gérer plus facilement les paramètres et les variables locales utilisés par une fonction. Il contient toujours une adresse mémoire faisant référence au dernier élément placé sur la pile avant la définition de variables locales pour la fonction concernée. Il est relatif au registre de segment : SS.

ESI : Source Index

C'est un registre de 32 bits, il contient un sous registre de 16 bits nommé SI . Ce registre est utilisé dans le traitement des chaînes. Il contient un pointeur vers la source de données. Il est relatif au registre de segment : DS.

EDI : Destination Index

C'est un registre de 32 bits et il contient un sous registre de 16 bits nommé DI . Ce registre est utilisé dans le traitement des chaînes. Il contient un pointeur vers la destination. Il est relatif au registre de segment : ES lorsqu'il est utilisé pour le traitement des chaînes sinon, il est relatif au registre de segment : DS lorsqu'il est utilisé pour l'adressage mémoire.

Le registre des drapeaux

EFLAGS : Drapeaux

C'est un registre de 32 bits et il contient un sous registre de 16 bits nommé FLAGS . Ce registre contient des informations sur l'état du microprocesseur. Lorsqu'une opération arithmétique a été effectuée certains bits s'arment ou se désarment.

Pour en savoir plus.

Le registre compteur d'instructions

EIP : Pointeur d'instructions

C'est un registre de 32 bits et il contient un sous registre de 16 bits nommé IP . Ce registre est utilisé comme pointeur d'instructions. Il contient l'adresse de l'instruction à exécuter. Il est relatif au registre de segment : CS

Les registres de segment

Ils sont au nombre de six : CS, DS, SS, ES, FS et GS.

Tous les registres de segment ont une taille de 16 bits. Ils contiennent tous une adresse de base relative à un segment mémoire.

En mode réel, ces registres contiennent l'adresse physique de base d'un segment de données (code/données) en mémoire.

En mode protégé, ils contiennent un sélecteur de segment.

Pour l'adressage ils sont utilisés en couple, sous forme de segment:offset, avec un des registres généraux

CS : Code Segment

Ce segment, comme son nom l'indique, contient tout le code d'une application. Utilisé avec le registre EIP sous la forme de segment:offset ( 32 bits -> CS:EIP, 16 bits CS:IP ).

DS : Data Segment

Ce registre contient l'ensemble des données globales d'une application. L'adressage de données se réalise par rapport à DS sous la forme de segment:offset ( 32 bits -> DS:[EAX], 16 bits -> DS:[BX] )

SS : Stack Segment

Ce segment contient la pile de l'application. Il sert dans la communication de données entre fonctions et à stocker les variables locales de ces dernières. Il est utilisé avec le registre ESP sous la forme de segment:offset ( 32 bits -> SS:ESP, 16 bits -> SS:SP ).

ES : Extra Segment

Ce segment est utilisé pour stocker les données lorsqu'elle sont utilisées pour le traitement des chaînes. Le registre EDI est associé à ce segment uniquement dans le traitement de chaînes sous la forme de segment:offset ( 32 bits -> ES:[EDI], 16 bits -> ES:[DI] ).

FS : Data Segment

Segment supplémentaire pour les données.

GS : Data Segment

Segment supplémentaire pour les données.

Les registres et l'adressage mémoire

Mode réel :

Seuls les registres : BX, BP, SI, DI peuvent contenir une adresse pour un adressage mémoire. Ils peuvent également être combinés entre eux pour former une adresse finale. Le format d'adressage peut être représenté comme suit : BASE + INDEX * SCALE + OFFSET.

BASE peut être : BX, BP, SI ou DI
INDEX peut être : BX, BP, SI ou DI
SCALE est une valeur qui représente la taille de la donnée traitée.
OFFSET est une valeur qui représente un déplacement supplémentaire qui correspond à un multiple de la taille de la donnée traitée.

Voici quelques exemples possibles :

mov ax, [bx + si * 2 + 4]
mov ax, [bp + di * 2 + 6]
mov ax, [si + bx * 2 + 2]
mov ax, [di + bp * 4 + 2]
mov ax, [bp + bx * 2 + 2] -> Erreur : deux registres basés ne peuvent pas être combinés !

Mode protégé :

Tous les registres généraux peuvent être utilisés pour l'adressage mémoire. Il n'y aucune restriction comme en mode 16 bits.

Pour en savoir plus sur la mémoire vive et son adressage