В центральном процессоре (ЦП) компьютера аккумулятор представляет собой регистр , в котором хранятся промежуточные результаты арифметико-логического устройства .
Без регистра, такого как аккумулятор, пришлось бы записывать результат каждого вычисления (сложения, умножения, сдвига и т. д.) в кэш или основную память , возможно, только для того, чтобы затем снова считать его для использования в следующей операции.
Доступ к памяти медленнее, чем доступ к регистру, такому как аккумулятор, потому что технология, используемая для большой основной памяти, медленнее (но дешевле), чем та, которая используется для регистра. Ранние электронные компьютерные системы часто делились на две группы: с аккумуляторами и без них.
Современные компьютерные системы часто имеют несколько регистров общего назначения, которые могут работать как аккумуляторы, и этот термин уже не так распространен, как раньше. Однако для упрощения конструкции ряд специализированных процессоров по-прежнему используют один аккумулятор.
Математические операции часто выполняются поэтапно, используя результаты одной операции в качестве входных данных для следующей. Например, ручной расчет еженедельной заработной платы работника может выглядеть примерно так:
Компьютерная программа, выполняющая ту же задачу, будет следовать той же базовой последовательности операций, хотя все искомые значения будут храниться в памяти компьютера. В ранних компьютерах количество часов, скорее всего, хранилось на перфокарте , а ставка оплаты — в какой-то другой форме памяти, возможно, на магнитном барабане . После завершения умножения результат нужно куда-то поместить. На «барабанной машине» это, скорее всего, будет возвращено на барабан, операция, которая занимает значительное время. Затем уже следующая операция должна будет считать это значение обратно, что вносит еще одну значительную задержку.
Аккумуляторы значительно повышают производительность в таких системах, предоставляя область блокнота, где результаты одной операции могут быть переданы следующей с небольшим или нулевым снижением производительности. В приведенном выше примере базовая еженедельная заработная плата будет рассчитана и помещена в аккумулятор, который затем может быть немедленно использован для расчета подоходного налога. Это удаляет одну операцию сохранения и одну операцию чтения из последовательности, операции, которые обычно занимали в десятки или сотни раз больше времени, чем само умножение.
Машина -аккумулятор , также называемая машиной с 1 операндом или ЦП с архитектурой на основе аккумулятора , представляет собой разновидность ЦП, в котором, хотя он может иметь несколько регистров, ЦП в основном хранит результаты вычислений в одном специальном регистре, обычно называемом «аккумулятором». Почти все ранние [ требуется разъяснение ] компьютеры были машинами-аккумуляторами, и только высокопроизводительные « суперкомпьютеры » имели несколько регистров. Затем, когда мэйнфреймовые системы уступили место микрокомпьютерам , архитектуры аккумуляторов снова стали популярными, и ярким примером является MOS 6502. Многие 8-битные микроконтроллеры , которые по-прежнему популярны по состоянию на 2014 год [обновлять], такие как PICmicro и 8051 , являются машинами на основе аккумуляторов.
Современные ЦП обычно являются 2-операндными или 3-операндными машинами. Дополнительные операнды определяют, какой из многих регистров общего назначения (также называемых «аккумуляторами общего назначения» [1] ) используется в качестве источника и назначения для вычислений. Эти ЦП не считаются «аккумуляторными машинами».
Характерной чертой, отличающей один регистр как аккумулятор компьютерной архитектуры, является то, что аккумулятор (если бы архитектура имела его) использовался бы как неявный операнд для арифметических инструкций . Например, процессор может иметь инструкцию типа: которая добавляет значение, считанное из ячейки памяти memaddress, к значению в аккумуляторе, помещая результат обратно в аккумулятор. Аккумулятор не идентифицируется в инструкции номером регистра; он подразумевается в инструкции, и никакой другой регистр не может быть указан в инструкции. Некоторые архитектуры используют определенный регистр в качестве аккумулятора в некоторых инструкциях, но другие инструкции используют номера регистров для явной спецификации операнда.ADD memaddress
Любая система, которая использует одну «память» для хранения результата нескольких операций, может считаться аккумулятором. Дж. Преспер Экерт называет даже самые ранние арифмометры Готфрида Лейбница и Блеза Паскаля системами на основе аккумуляторов. [2] Перси Ладгейт был первым, кто задумал множитель-аккумулятор (MAC) в своей «Аналитической машине» 1909 года. [3]
Исторически сложилось так, что регистр посвящается «аккумулятору», «арифметическому органу», который буквально накапливает свое число в ходе последовательности арифметических операций:
Вот лишь некоторые из инструкций (с современной интерпретацией):
Не существует соглашения относительно названий операций из регистров в аккумулятор и из аккумулятора в регистры. Традиция (например, гипотетический компьютер MIX Дональда Кнута (1973)) использует две инструкции, называемые загрузка аккумулятора из регистра/памяти (например, "LDA r") и сохранение аккумулятора в регистр/память (например, "STA r"). Модель Кнута также имеет много других инструкций.
Конфигурация ENIAC 1945 года имела 20 аккумуляторов, которые могли работать параллельно. [4] : 46 Каждый из них мог хранить восьмизначное десятичное число и прибавлять к нему (или вычитать из него) число, которое он получал. [4] : 33 Большинство ранних двоичных «научных» компьютеров IBM, начиная с лампового IBM 701 в 1952 году, использовали один 36-битный аккумулятор, а также отдельный регистр множителя/частного для обработки операций с более длинными результатами. IBM 650 , десятичная машина, имела один 10-разрядный распределитель и два десятиразрядных аккумулятора; IBM 7070 , более поздняя транзисторная десятичная машина, имела три аккумулятора. IBM System/360 и PDP-6 компании Digital Equipment Corporation имели 16 регистров общего назначения, хотя PDP-6 и его преемник PDP-10 называли их аккумуляторами.
12 -битный PDP-8 был одним из первых мини-компьютеров, использовавших аккумуляторы, и вдохновил многие более поздние машины. [5] У PDP-8 был только один аккумулятор. У HP 2100 и Data General Nova было 2 и 4 аккумулятора. Nova была создана, когда это продолжение PDP-8 было отклонено в пользу того, что впоследствии стало PDP -11 . Nova предоставляла четыре аккумулятора, AC0-AC3, хотя AC2 и AC3 также могли использоваться для предоставления смещенных адресов, что тяготело к большей общности использования регистров. У PDP-11 было 8 регистров общего назначения, по аналогии с System/360 и PDP-10; большинство более поздних машин CISC и RISC предоставляли несколько регистров общего назначения.
Ранние 4- и 8-битные микропроцессоры, такие как 4004 , 8008 и многочисленные другие, обычно имели один аккумулятор. Микроконтроллер 8051 имеет два аккумулятора, первичный аккумулятор и вторичный аккумулятор, где второй используется инструкциями только при умножении (MUL AB) или делении (DIV AB); первый разделяет 16-битный результат между двумя 8-битными аккумуляторами, тогда как последний сохраняет частное в первичном аккумуляторе A, а остаток во вторичном аккумуляторе B. Будучи прямым потомком 8008, 8080 и 8086 , современные вездесущие процессоры Intel x86 по-прежнему используют первичный аккумулятор EAX и вторичный аккумулятор EDX для умножения и деления больших чисел. Например, MUL ECX умножит 32-битные регистры ECX и EAX и разделит 64-битный результат между EAX и EDX. Однако MUL и DIV являются особыми случаями; другие арифметико-логические инструкции (ADD, SUB, CMP, AND, OR, XOR, TEST) могут указывать любой из восьми регистров EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI в качестве аккумулятора (т. е. левого операнда и назначения). Это также поддерживается для умножения, если верхняя половина результата не требуется. Таким образом, x86 является довольно общей архитектурой регистров, несмотря на то, что основана на модели аккумулятора. [6] 64-битное расширение x86, x86-64 , было дополнительно обобщено до 16 вместо 8 общих регистров.