3.2 Le processeur
3.2.1 Les registres du processeur
Registres de travail
Lesregistres de travail permettent de ranger des r´esultats interm´ediaires sans acc´eder `a la m´emoire. La manipulation des donn´ees est ainsi simplifi´ee (on n’a pas `a g´erer d’adresse) et le temps d’acc`es aux informations est plus court. Dans la plupart des processeurs `a architecture classique, le nombre des registres est de l’ordre de 8 `a 32.
Registres accumulateurs
Dans beaucoup de machines d’architecture classique, le jeu d’instruction privil´egie certains registres dits registres accumulateurs ou plus simplement accumulateurs. Ceux-ci se distinguent des autres registres par le fait que la grande majorit´e des op´erations peuvent porter sur leur contenu et en recevoir les r´esultats. Ainsi, sur les microprocesseurs de la famille Intel X86, toutes les instructions de transfert entre m´emoire et registre, ou entre registres, peuvent affecter le registre accumulateur d´esign´e par AX. Il n’en est pas de mˆeme pour les registres de segment dont les possibilit´es de manipulation sont bien plus r´eduites.
Pointeurs de pile
Les pointeurs de pile (Stack Pointer) sont principalement utilis´es dans le m´ecanisme des appels de sous-programmes. La pile est une zone de m´emoire.
La gestion de cette zone (sch´ema 3.5) est li´ee `a l’existence du registre appel´e registre de pile oupointeur de pile(stack pointer).
Adresses
Pointeur de pile n
n+1
Mémoire
Figure3.5 : La pile
Un pointeur de pile est un registre d’adresse fournissant l’adresse d’un mot-m´emoire d´esign´e par le terme desommet de pile. L’adresse du sommet de pile est g´en´eralement celle du mot de la pile d’adresse nla plus petite.
La pile est manipul´ee par instructions sp´eciales ou lors de sauvegardes au-tomatiques de l’´etat du processeur (appels et retours de sous-programmes, in-terruptions. . . ).
Exemple 3.1 En situation initiale (figure 3.6) un pointeur de pile contient la valeur 100016, adresse du mot m´emoire en sommet de pile. On supposera que la mise en pile se fait sur une seule case m´emoire.
1000
Adresses Pointeur de pile
Mémoire 1000
Figure3.6 : Mise en pile, situation initiale
Lors de la “mise en pile” de l’information, le pointeur de pile estd´ecr´ement´e et l’information est rang´ee en sommet de pile, ici `a l’adresse 0FFF16 (figure 3.7).
Dans certaines machines, la pile est r´ealis´ee `a l’aide d’une m´emoire rapide distincte de la m´emoire principale (celle qui contient donn´ees et programme).
Information mise en pile 1000Ê
Adresses Pointeur de pile
0FFF 0FFF
Mémoire
Figure3.7 : Ecriture dans la pile On parle alors depile cˆabl´ee.
Registre des drapeaux
Le registre des drapeaux (Flags Register) ou registre de codes conditions (Condition Code Registre) joue un rˆole qui peut ˆetre mis en ´evidence par l’addition avec retenue. Lorsqu’on effectue la somme de deux nombres entiers cod´es sur plusieurs mots de m´emoire, l’op´eration doit ˆetre r´ealis´ee en plusieurs instructions d’addition, chacune ne portant que sur un mot. Si la premi`ere instruction n’a pas en prendre en compte de retenue, puisqu’elle porte sur les poids faibles des op´erandes, il n’en est pas de mˆeme pour les suivantes. La retenue r´esultant de l’ex´ecution d’une addition est rang´ee dans le registre des drapeaux. Celui-ci m´emorise les informations li´ees `a l’ex´ecution de certaines instructions telles que les instructions arithm´etiques et instructions logiques.
Remarques:
1. Les drapeaux, sont, entre autres, utilis´es par les instructions de branche-ment conditionnel.
2. Toutes les instructions ne modifient pas les drapeaux. Dans les micropro-cesseur de la famille X86 d’Intel, les instructions de mouvement (trans-ferts de registre `a registre ou entre m´emoire et registre) ne modifient pas les drapeaux.
3. Le terme “registre des drapeaux” n’est pas tout `a fait correct, dans la mesure o`u les drapeaux peuvent ˆetre modifi´ess´epar´ement. Il s’agit plutˆot d’un ensemble de bascules que d’un registre.
4. L’ensemble minimal de drapeaux, g´en´eralement implant´e, est le suivant :
− Drapeau deretenue CY(Carry) ;
− Drapeau de nullit´e Z indiquant qu’une op´eration arithm´etique ou logique a donn´e un r´esultat nul, ou qu’il y a ´egalit´e apr`es une instruc-tion de comparaison ;
− Drapeau deparit´equi est un indicatif de la parit´e du nombre de bits
`
a 1 dans le r´esultat d’une op´eration ;
− Drapeau de signe S qui n’est qu’une copie du bit de poids fort du r´esultat de l’instruction qui vient d’ˆetre ex´ecut´ee ;
− Drapeau de d´ebordement (Overflow) qui est un indicateur pouvant ˆetre utilis´e apr`es ex´ecution d’op´erations portant sur des entiers cod´es en compl´ement `a deux.
Remarque: Si on effectue des additions sur des nombres utilisant une repr´esentation binaire en compl´ement `a deux, il faut ´eviter toute erreur due
`
a une retenue qui se propagerait “dans” le bit de signe en lui donnant une valeur erron´ee. Prenons pour exemple des nombres cod´es sur quatre bits en compl´ement `a deux. Appelons R et S les drapeaux de retenue et de signe.
D´esignons de plus par rla retenue engendr´ee par l’addition des trois bits de poids faible (sch´ema3.8).
r Signe Retenue
S R
Figure3.8 : Signe et retenue
On examine, tour `a tour, tous les cas pouvant se produire en commen¸cant par le cas de deux nombres positifs.
− Donnons aux op´erandes les valeurs 3 et 5 :
A = 0 0 1 1 → +3
B = 0 1 0 1 → +5
A+B = 1 0 0 0 → −8
Le r´esultat obtenu est inexact. On note que r prend la valeur 1 tandis que R et S prennent les valeurs 0 et 1 respectivement. Dans le cas o`u le r´esultat est juste, par exemple avec A = 2 etB = 3, alors r, R et S prennent la valeur 0.
− Dans le cas de deux nombres n´egatifs :
A = 1 0 1 0 → −6
B = 1 0 1 1 → −5
A+B = 1 0 1 0 1 → +5
Pour ces valeurs deAet Bdonnant un r´esultat erron´e, on note quer,R etS prennent respectivement les valeurs 0, 1 et 0. Lorsque le r´esultat est juste, les valeurs prises parr,R etS sont 1, 1 et 1.
− Pour des nombres de signes oppos´es, on constate qu’aucune erreur ne se produit :
A = 0 1 1 0 → +6
B = 1 0 1 1 → −5
A+B = 1 0 0 0 1 → +1
On fait le bilan de tous les cas possibles en reportant dans un tableau de Karnaugh la valeur 1 lorsqu’on a un cas d’overflow. On note OV le drapeau indiquant ces cas :
00 01 11 10 RS
0 0 0 Φ 1
1 Φ 1 0 0
r OV
Le bit de d´ebordementOVvaut alorsR⊗r=Rr+rR.
Remarque: il existe un drapeau appel´eHalf Carryqui n’est g´en´eralement pas utilisable directement par le programmeur. Il est utilis´e pour la propagation de la retenue lorsqu’on travaille sur des nombres cod´es en DCB. Consid´erons l’addition des deux nombres 1810et 3510cod´ees en DCB :
Base 10 Codage DCB
18 0001 1000DCB
+35 0011 0101DCB
= 53 = 0101 01011DCB
L’additionneur travaillant en compl´ement `a deux, il produit le r´esultat 0100 1101. Une retenue interm´ediaire Half Carry indique que le r´esultat de l’addition des chiffres de poids faible est>9. Elle est utilis´ee de mani`ere in-terne lorsqu’on d´esire disposer d’un r´esultat lui aussi cod´e en DCB `a l’aide d’instructions d’ajustement d´ecimal. Ainsi, dans le processeur Intel X86, l’addition des deux entiers 8 bits cod´es DCB pr´ec´edents peut s’effectuer de la fa¸con suivante (al et bh sont des registres 8 bits) :
; al contient 18 (DCB) soit 0001 1000
; bh contient 35 (DCB) soit 0011 0101 add al,bh ; al + bh --> al : 18 + 35 --> 4D daa ; ajustement decimal de al: 4D --> 53
Registres d’adressage
Les registres peuvent avoir un rˆole dans l’adressage des op´erandes en m´emoire.
Les registres impliqu´es peuvent ˆetre soit des registres de travail, soit des re-gistres sp´ecialis´es, le jeu d’instructions d´efinissant les rˆoles de chacun d’entre eux. On peut ainsi trouver :
− des registres d’indirection dont le contenu pourra ˆetre consid´er´e comme une adresse ;
− des registres d’indexation intervenant comme un d´eplacement dans le calcul d’adresse, c’est-`a-dire une quantit´e `a ajouter `a une adresse ;
− des registres debasefournissant une adresse dans les calculs d’adresse par indexation (l’adresse de l’op´erande est obtenue par addition des contenus des registres de base et d’index) ;
− des registres desegments(voir plus loin le chapitre7), delimites. . .