Previous Up Next

B.1  Les registres d’un processeur 32 bits de type Intel

Pour plus d’information sur ce sujet, nous renvoyons au manuel [1]. Un processeur 32 bits de type Intel dispose de 16 registres qui sont classables en trois catégories :

Le registre d’accumulation %eax

Ce registre généraliste peut contenir les données des utilisateurs.


Remarque 11.  Ce registre joue le rôle d’opérande implicite dans de nombreuses opérations : mul, div, etc. Dans ce cas le résultat de l’opération est stocké dans ce même registre.


Le registre %ebx (base index) utilisé comme pointeur sur les données

Usuellement, ce registre contient un offset relatif au segment de données permettant de repérer une information de ce segment.

Le registre ECX utilisé comme compteur

Ce registre est utilisé pour les boucles et les opérations sur les chaînes de caractères.

Le registre EDX utilisé pour les entrées/sorties

Ce registre est généralement utilisé pour contenir des offsets lors des opérations d’affichage ou de saisie par exemple.

Le registre EIP (Instruction Pointer)

Le registre EIP contient l’offset de la prochaîne instruction à exécuter. Il est modifié automatique à chaque exécution et peut être manipulé par des instruction du type jmp, call, ret, etc. On ne peut pas accéder directement à ce registre.

Le registre EDI (Destination Index) et le registre ESI (Source Index)

Ces registres sont utilisés lors des opérations sur les manipulations — copie, etc. — de suites d’octets.

Le registre CS (Code Segment)

Ce registre 16 bits contient le numéro du segment mémoire dans lequel sont stockées les instructions assembleur du code à exécuter. On ne peut pas accéder directement à ce registre.

Le registre SS (Stack Segment)

Ce registre 16 bits contient le numéro du segment mémoire dans lequel est stockée la pile. On peut accéder directement à ce registre ce qui permet d’utiliser plusieurs piles.

Le registre ESP (Stack Pointer)

Ce registre 32 bits contient le déplacement pour atteindre le sommet de la pile. La partie basse 16 bits de ce registre peut être utilisée comme le registre SP.

Le registre EBP (Frame Base Pointer)

Ce registre 32 bits contient un déplacement correspondant à une position dans la pile. Ce registre sert à pointer sur une donnée dans la pile. La partie basse 16 bits de ce registre peut être utilisée comme le registre BP.

Les registres DS, ES, FS, GS (Data Segment)

Ces registres 16 bits contiennent les numéros de segment mémoire dans lesquels sont stockées des données. Le registre DS est utilisé pour le segment de données du code ; les autres permettent de référencer d’autres types de données. On ne peut pas accéder directement à ce registre.

Le registre EFLAG

Ce registre est structuré comme suit :

EFLAG
31 1615 0
    FLAG 

Les bits 1, 3, 5, 15 et les bits de 22 à 31 sont réservés par le microprocesseur pour son fonctionnement interne. Les 21 autres bits forment des drapeaux i.e. des indicateurs et nous ne nous intéresserons qu’au sous registre FLAG. Il existe quatre actions possibles d’une instruction sur les drapeaux :

Les fonctions des drapeaux sont résumées dans le tableau ci-dessus :

21IDIdentification Flag 
20VIPVirtual Interrupt Pending 
19VIFVirtual Interrupt Flag 
18ACAlignment check 
17VMVirtual 8086 Mode 
16RFResume Flag 
14NTNested Task
Mis à 1 lorsque la tâche courante est associée à la tâche précédente, 0 sinon.
12 & 13IOPLI/O Privilege Level
Contient un nombre qui indique le niveau de privilège du programme en cours d’exécution
11OFOverflow Flag
Mis à 1 si une opération provoque un dépassement de capacité
10DFDirection Flag
Fixe le sens dans lequel seront effectuées les opérations de traitement de chaînes de caractères. STD le met à 1, CLD à 0.
9IFInterrupt Enable Flag
Mis à 1, il autorise les interruptions. S’il vaut 0, il les empêche.
8TFTrap Flag
Mis à 1, il force le processeur à fonctionner pas à pas.
7SFSign Flag
Prend la valeur du bit de poids fort de l’accumulateur après un calcul.
6ZFZero Flag
Mis à 1 si le résultat d’un calcul (i.e. le contenu de l’accumulateur) vaut 0.
4AFAuxiliary Carry Flag
Mis à 1 si un calcul en BCD non compacté produit une retenue.
2PFParity Flag
Mis à 1 si les 4 bits de poids faible du résultat contiennent un nombre pair de 1.
0CFCarry Flag
Mis à 1 si un calcul produit une retenue.


Pour tout commentaire : Alexandre Sedoglavic.
Previous Up Next