|
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.
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.
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.