Programmation Assembleur x86/Registres

Un livre de Wikilivres.
Aller à : navigation, rechercher
Programmation Assembleur x86
Modifier ce modèle


Dans l'architecture x86, le processeur comporte quatre registres de travail, six registres d'offset, six registres de segment, 1 registre d'état (flags) et un pointeur d'instruction.

Les registres de travail[modifier | modifier le wikicode]

Les registres du microprocesseur Intel 8086

Les quatre registres de travail sont principalement utilisés pour stocker des résultats :

  1. EAX : registre accumulateur (accumulator register). Utilisé pour les opérations arithmétiques et le stockage de la valeur de retour des appels systèmes.
  2. EDX : registre de données (data register). Utilisé pour les opérations arithmétiques et les opérations d'entrée/sortie.
  3. ECX : registre compteur (counter register)
  4. EBX : registre de base (base register). Utilisé comme pointeur de donnée (située dans DS en mode segmenté).

Ce sont des registres 32 bits; pour des raisons historiques, les 16 bits de poids faible sont constitués respectivement des registres AX, DX, CX et BX.

Ces 4 registres 16 bits sont également décomposés en 8 registres de 8 bits :

  1. AL : octet de poids faible de AX
  2. AH : octet de poids fort de AX
  3. BL : octet de poids faible de BX
  4. BH : octet de poids fort de BX
  5. CL : octet de poids faible de CX
  6. CH : octet de poids fort de CX
  7. DL : octet de poids faible de DX
  8. DH : octet de poids fort de DX

Les registres d'offset[modifier | modifier le wikicode]

Les registres d'offset sont utilisés lors de l'adressage indirect de la mémoire (pointeurs). Ces registres complémentaires sont :

  1. EBP : (Extended Base Pointer) pointeur de base
  2. ESP : (Extended Stack Pointer) pointeur de pile
  3. ESI : (Extended Source Index) pointeur source
  4. EDI : (Extended Destination Index) pointeur destination

Le nom des deux derniers registres vient du fait qu'ils sont utilisés pour la copie d'une zone mémoire vers une autre.

Les registres de segment[modifier | modifier le wikicode]

La gestion de la mémoire dans l'architecture x86 est particulière : celle-ci est divisée en segments. Les registres de segment permettent d'accéder, soit au segment de programme qui est la zone mémoire des instructions de programme, soit au segment de données (zone mémoire contenant les données du programme), ou encore au segment de pile.

  1. CS : pointe vers les instructions du programme (code segment).
  2. DS : pointe vers les données du programme (data segment).
  3. SS : pointe vers la pile programme (stack segment).
  4. ES : pointe vers les données du programme multi-segments (extra segment).
  5. FS : pointe vers les données du programme multi-segments en mode protégé.
  6. GS : pointe vers les données du programme multi-segments en mode protégé.

La gestion de mémoire en multi-segments permet d'utiliser tous les registres d'offset. La plupart des systèmes d'exploitation actuels utilisent un mode protégé où tous les registres de segment pointent vers le même segment.

Le registre d'états[modifier | modifier le wikicode]

Chaque bit du registre EFLAGS est un indicateur d'état qui peut être modifié à chaque instruction exécutée :

  • retenue (addition ou soustraction),
  • dépassement,
  • comparaison,
  • autoriser les interruptions,
  • ...

Le pointeur d'instruction[modifier | modifier le wikicode]

Le registre EIP est utilisé avec le segment du registre CS par le processeur pour connaitre la prochaine instruction à exécuter. Ce registre est donc modifié implicitement par le processeur (instruction suivante, saut à l'adresse indiquée, appel d'une fonction, interruption ...).