Accumulateur (informatique)

En informatique, un accumulateur est un registre spécial, incorporé dans certaines architectures de processeur, où les résultats intermédiaires de l'UAL, ou ALU en anglais (arithmetic logical unit), sont stockés[1]. Sans accumulateur, il faudrait verser le résultat de l'UAL dans la mémoire centrale, puis le recharger pour effectuer l'opération suivante dont le résultat serait à son tour versé dans la mémoire centrale, etc. Cette façon de faire ralentirait considérablement les opérations, car les accès à la mémoire centrale sont beaucoup plus lents que ceux faits sur un registre interne à l'ALU, tel un accumulateur.

Certains processeurs ne possèdent qu'un seul accumulateur comme le 6502 de MOS Technology ou encore les Intel i4004, i4040 et i8008. D'autre processeur eux ont plusieurs accumulateurs. C'est le cas des microprocesseurs 6800 et 6809 de Motorola qui pour leur part comportent deux accumulateurs à savoir A et B. Ou encore du Hitachi 6309 qui possède quatre accumulateurs (A, B, E, F). Le PDP-8 de Digital Equipment Corporation est un mini-ordinateur qui n'avait qu'un seul accumulateur. Tandis que le mini-ordinateur Nova de Data General en possédaient quatre (AC0, AC1, AC2, AC3).

Le microcontrôleur 8051 possède également deux accumulateurs, un accumulateur primaire et un accumulateur secondaire, le second est utilisé uniquement par les instructions de multiplication (MUL AB) et de division (DIV AB); la première opération partage le résultat 16 bits entre les deux accumulateurs 8 bits, tandis que la seconde verse le quotient dans l'accumulateur principal A et le reste dans l'accumulateur secondaire B. Le 6809 de Motorola use de la même astuce en combinant ses accumulateurs A et B en un accumulateur D 16 bits, le 6803 d'Hitachi va encore plus loin en compose un accumulateur Q de 32 bits.

Architectures à accumulateur

Architecture d'un processeur avec un accumulateur.

Sur les processeurs disposant d'un accumulateur, tous les résultats d'une instruction manipulant des registres vont être écrits dans cet accumulateur. De la même manière, toute instruction va aller manipuler le contenu de cet accumulateur.

Cet accumulateur est localisé grâce au mode d'adressage implicite. De plus, le résultat des instructions arithmétiques et logiques est stocké dans l'accumulateur, et on n'a pas besoin de préciser où stocker le résultat : pas de mode d'adressage pour le résultat.

Bien évidemment, les instructions qui manipulent plusieurs opérandes vont pouvoir aller chercher celle-ci dans la mémoire ou dans d'autres registres. Historiquement, les premières machines à accumulateur ne contenaient pas d'autres registres pour stocker les opérandes des instructions arithmétiques et logiques. De ce fait, le seul registre pouvant stocker des données était l'accumulateur. Une telle architecture est représentée par le schéma sur la droite.

Par la suite, certaines architectures à accumulateur incorporèrent des registres supplémentaires pour stocker des opérandes. Cela permettait de diminuer le nombre d'accès mémoire lors de la lecture des opérandes des instructions. Mais attention : ces registres ne peuvent servir que d’opérande dans une instruction, et le résultat d'une instruction ira obligatoirement dans l'accumulateur.

Ces architectures sont parfois appelées architectures 1-adresse. Cela vient du fait que la grosse majorité des instructions sont des instructions dyadiques, qui n'ont donc besoin de préciser qu'une seule opérande, l'accumulateur étant adressé implicitement.

Micro-architecture

Schéma d'une microarchitecture à accumulateur.

L'accumulateur peut être câblé au sein de l'UAL, ou ALU en anglais (arithmetic logical unit), un bloc de calcul qui s'occupe des opérations arithmétiques et logiques simples.

Dans d'autres cas, cet accumulateur fait partie intégrante d'un banc de registre, avec les autres registres du processeur.

La manière de faire dépend de l'architecture considérée et de sa complexité.

Exemple de programme

Le code assembleur 8051 qui suit travaille avec l'accumulateur primaire :

MOV A,R2 ;stocke R2 dans l'accumulateur
ADD A,R4 ;ajoute la valeur de R4 dans l'accumulateur
MOV R5,A ;stocke la valeur de l'accumulateur dans R5

Un autre exemple classique de l'utilisation d'un accumulateur est l'addition d'une liste de nombres. L'accumulateur est mis à zéro et à chaque itération, une valeur est ajoutée à son contenu. À la fin de la boucle, le résultat peut être copié en mémoire ou déplacé dans un autre registre.

Les accumulateurs de diverses architectures

  • Sur l'architecture x86, l'accumulateur est le registre AX (16 bits) ou EAX (32 bits).
  • Dans le cas du 8051, l'accumulateur peut recevoir une valeur de 8 bits. Plus de la moitié des instructions du 8051 utilisent l'accumulateur.
  • Architecture limitée basée sur un seul accumulateur : DEC PDP-8 (6 instructions), PAL-III.

Les accumulateurs sont très utilisés sur les DSP actuels. Ces accumulateurs peuvent stocker un grand nombre de bits. Cela permet de gagner en précision numérique : lors de l'enchainement d'une série d'opérations, le fait d'avoir un accumulateur pouvant stocker un grand nombre de bits diminue fortement l'apparition de dépassement d'entiers ou d'arrondis (pour les opérations flottantes).

Notes

  1. R. Zaks, La programmation du 6502, Sybex, , « 2. Organisation matérielle du 6502 : Les registres du 6502 »

Liens externes