As computer designs matured, we moved from special purpose accumulators to general purpose registers.
ENIAC’s Accumulators
ENIAC had 20 accumulators. But the term “accumulator” usually refers to a bit of storage which is the target of arithmetic operations. I could not locate a definitive origin for the term as applied to computing. But it seems obvious that the usual definition of “accumulate” applied to devices as early as Pascal’s “Pascaline”, a mechanical device which could add and subtract by rotating a dial forwards or backwards.
So it is natural to think of ENIAC’s accumulators as a bit of storage. But they were much more. They could be configured to perform an operation on the number held in the array of tubes. In one sense, these were tiny, limited CPUs, and ENIAC was a highly parallel machine made up of 20 of these little machines.
When setting up a problem, each accumulator was configured to perform a specific function on the data (10 decimal digits plus a sign), as well as drive some control lines to signal its state to the rest of the machine.
The accumulators were therefore more complicated than a simple vacuum tube storage element. And they interacted with the Master Programmer (the part of ENIAC which controlled the flow of a calculation across the entire machine), using those control lines, as well as the “sign discriminator” (whether the sign of the value in the acc was plus or minus), and even a “numeric control” signal based on the first digits in the accumulator.
Registers
As I started this quest, I noticed that machines we’d consider fully modern (like an Atari 800) still used the term accumulator in the computer sense. But these accumulators were simply a bit of storage, and the CPU (a 6502 chip, just like Bender) was constructed so that this bit of storage was specially connected to the rest of the circuitry. But, unlike ENIAC, it had no controls or functions; those were all part of the CPU.
As time passed, and particularly when the RISC architecture became popular, the special accumulator was gone, and in its place were a set of storage locations, which were called “registers”. In RISC, the instruction set (and therefore the hardware) was designed with all instructions referencing one or more of these registers, and none of them were “special”, like the accumulators in the 8086 or 6502.
So I wondered when that terminology changed. It seems obvious (at least to me) that once all the working bits of storage could be the target of any operation, and once we stopped implementing computer arithmetic by incrementing and decrementing a counter, we needed a term which did not imply it was “accumulating” an answer.
ENIAC is First Again
OK, I don’t have proof that ENIAC was first, and I wouldn’t be surprised if earlier machines had things called registers, but the distinction between “accumulator” and “register” was drawn by the ENIAC team as they were building the machine.
The accumulators were complex to build, and they were on a short schedule because its purpose was to help the war effort, and that meant it needed to be working sooner rather than later. One of the alternatives considered in order to get a working machine faster, was to strip the accumulator design down to just the storage part. And these were called “registers”, because the machine would “register” (store) a number in them, and read them out later. To use the values they held, they were to be arranged so they could transfer their contents to an accumulator. And only then could it be operated on. Ultimately, this was not incorporated into the design, but I was astounded to read that even back then, the designers had a clear understanding of the difference between them.
So as modern transistor-based CPUs moved forward, they switched from a special accumulator to the register, and for the same reasons as ENIAC had envisioned for them.