les registres


I - Les registres


Important: plus on est proche du processeur, plus la mémoire est rapide, plus vite sont exécutées les instructions.

Memory comparaison

Les registres forment une mémoire interne aux processeurs, plus on a de registres, plus on peut stocker de données, et moins on a besoin d’accès aux mémoires extérieurs (qui sont bien plus lentes).

Les processeurs x86 en 32 bits possèdent 8 registres généraux (EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI). En 64 bits, on passe à 16 registres logiques, mais dans les faits, il en existe bien plus (ex: 168) afin de paralléliser les instructions.


II - Data registers


Ils sont utilisés pour stocker des résultats d’opérations élémentaires lors de l’exécution du programme.

registre définition utilisation
AX Accumulator Register opérations input/output, et opérations arithmétiques
BX Base Register pour indexer des adresses
CX Counter Register index dans les boucles itératives
DX Data Register opérations input/output

De ces 4 registres, il existe plusieurs dérivés.

64-bits 32-bits (p. faible) 16-bits (p. faible)
RAX EAX AX
RBX EBX BX
RCX ECX CX
RDX EDX DX

R: register
E: extended
H: high
L: low

Il existe aussi des registes de 8 bits pour A, B, C et D. Il suffit de rajouter H pour avoir les bits de poids fort, et L pour les bits de poids faible.

EAX example

Cette variété de tailles de registres permet de stocker des données selon la taille qu’elles nécessitent.


III - Pointer registers


Ils sont utilisés pour pointer des adresses mémoires.

registre définition utilisation
SP Stack Pointer adresse libre de la stack (pile) (offset)
IP Instruction Pointer prochaine adresse de l’instruction à exécuter (offset)
BP Base Pointer reférence les paramètres d’une routine

PC= IP = Instruction Pointer (en x86)

ESP et EBP stockent des adresses 32 bits pour délimiter le stack frame courante.

À partir de ces 3 registres, il existe plusieurs dérivées.

64-bits 32-bits (p. faible) 16-bits (p. faible)
RSP ESP SP
RIP EIP IP
RBP EBP BP

IV - Index registers


registre définition utilisation
SI Source Index index source pour opérat. sur les chaines
DI Destination Index index de destination pour opérat. sur les chaines

À partir de ces 2 registres, il existe plusieurs dérivées :

64-bits 32-bits (p. faible) 16-bits (p. faible)
RSI ESI SI
RDI EDI DI

V - Control registers (flags)


Ces flags de 16 bit sont mis à jour après chaque opération.

64-bits 32-bits 16-bits
RFLAGS EFLAGS FLAGS

Par exemple, EFLAGS contient des indicateurs, des interrupteurs, etc… Ces flags sont essentiellement utilisés pour des comparaisons, mais pas que.

registre définition utilisation
OF Overflow Flag si dépassement de capacité d’une donnée après une opération
DF Direction Flag  
IF Interrupt Flag l’exécution doit-elle être à l’écoute des évenements extérieurs (clavier, souris)
TF Trap Flag on dit au processeur qu’on peut exeuctuer le programme pas à pas (instruction par instruction) (mode debug)
SF Sign Flag signe d’une opération
ZF Zero Flag  
DF Direction Flag resultat d’une opération qui fait 0
AF Auxiliary Carry Flag  
PF Parity Flag bit de parité
CF Carry Flag  

Il en existe d’autres…


VI - Segment registers


Pour décrire le partage mémoire.

Utilisé pour faciliter la lecture et l’écriture sur la mémoire.

registre définition utilisation
CS Code Segment adresse de début des instructions
DS Data Segment adresse de début des données
SS Stack Segment adresse de début de la stack (pile)

Il en existe d’autres qui ont le rôle de définir d’autres espaces mémoires comme ES, FS, GS.


VII - Adressage


Toute adresse dans une programme est définie par l’adresse de début de segement et par le décallage (offset). Cela nous permet de trouver l’adresse exacte d’une instruction grace à la somme de ces 2 valeurs.