В co В центральном процессоре mputer (CPU ) накопитель - это регистр, в котором промежуточные арифметические и логика результаты сохраняются.
Без регистра , такого как аккумулятор, было бы необходимо записывать результат каждого вычисления (сложение, умножение, сдвиг и т. Д.) В основная память, возможно, только для повторного считывания для использования в следующей операции . Доступ к основной памяти медленнее, чем доступ к регистру, например к аккумулятору, потому что технология, используемая для большой основной памяти, медленнее (но дешевле), чем технология, используемая для регистра. Ранние электронно-вычислительные системы часто разделялись на две группы: с аккумуляторами и без них.
Современные компьютерные системы часто имеют несколько регистров общего назначения, которые работают как аккумуляторы, и этот термин уже не так распространен, как раньше. Однако ряд специализированных процессоров по-прежнему используют для своей работы один аккумулятор, чтобы упростить конструкцию.
Математические операции часто выполняются поэтапно, с использованием результатов одной операции в качестве входных данных для следующей. Например, расчет еженедельной заработной платы работника вручную может выглядеть примерно так:
Компьютер Программа, выполняющая ту же задачу, будет следовать той же базовой последовательности операций, хотя все значения, которые будут искать, будут храниться в памяти компьютера. В ранних компьютерах количество часов, вероятно, могло бы храниться на перфокарте, а ставка оплаты - в какой-либо другой форме памяти, возможно, на магнитном барабане. После завершения умножения результат нужно куда-то поместить. На «драм-машине» это, скорее всего, будет возвращаться к барабану, а операция занимает значительное время. А затем следующая операция должна прочитать это значение обратно, что вносит еще одну значительную задержку.
Накопители значительно улучшают производительность в таких системах, предоставляя область блокнота, где результаты одной операции могут быть переданы следующей операции с небольшим или нулевым снижением производительности. В приведенном выше примере базовая еженедельная заработная плата будет рассчитана и помещена в накопитель, который затем может быть немедленно использован при расчете подоходного налога. Это удаляет одну операцию сохранения и одну операцию чтения из последовательности, операции, которые обычно занимали в десятки или сотни раз больше времени, чем само умножение.
Накопительные машины, также называемые 1-операндными машинами, или ЦП с архитектурой на основе аккумуляторов, являются разновидностью ЦП, где ЦП, хотя и может иметь несколько регистров, в основном хранит результаты вычислений в одном специальном регистре, обычно называемом «аккумулятор». Почти все ранние компьютеры были накопительными машинами, и только высокопроизводительные «суперкомпьютеры » имели несколько регистров. Затем, когда системы мэйнфреймов уступили место микрокомпьютерам, снова стали популярны аккумуляторные архитектуры, ярким примером которых является MOS 6502. Многие 8-битные микроконтроллеры, которые все еще популярны с 2014 года, такие как PICmicro и 8051, являются машинами на основе аккумуляторов.
Современные процессоры обычно представляют собой машины с двумя или тремя операндами. Дополнительные операнды указывают, какой из многих регистров общего назначения (также называемых «накопителями общего назначения») используется в качестве источника и назначения для вычислений. Эти процессоры не считаются «аккумуляторными машинами».
Характеристика, которая отличает один регистр как аккумулятор компьютерной архитектуры, заключается в том, что аккумулятор (если бы архитектура имел его) использовался бы как неявный операнд для арифметических инструкций. Например, ЦП может иметь такую команду: ADD memaddress
, которая добавляет значение, считанное из memaddress ячейки памяти, к значению в аккумуляторе, помещая результат обратно в аккумулятор. Аккумулятор не идентифицируется в инструкции номером регистра; это неявно в инструкции, и никакой другой регистр не может быть указан в инструкции. Некоторые архитектуры используют определенный регистр в качестве аккумулятора в некоторых инструкциях, но другие инструкции используют номера регистров для явной спецификации операндов.
Любая система, использующая одну «память» для хранения результатов нескольких операций, может считаться накопителем. Дж. Преспер Эккерт ссылается даже на самые ранние счетные машины из Готфрида Лейбница и Блеза Паскаля как системы на основе аккумуляторов. Перси Ладгейт был первым, кто задумал множитель-накопитель (МАС) в своей Аналитической машине 1909 года.
Историческое соглашение посвящает регистр «сумматору», «арифметическому органу», который буквально накапливает свое число во время последовательности арифметические операции:
Лишь некоторые из инструкций ионы, например (в некоторой современной интерпретации):
Не существует соглашения относительно имена для операций от регистров к аккумулятору и от аккумулятора к регистрам. Традиция (например, гипотетический компьютер Дональда Кнута (1973) MIX ), например, использует две инструкции, называемые «загрузка аккумулятора из регистра / памяти (например,« LDA r ») и сохранение аккумулятора. для регистрации / памяти (например, «STA r»). Модель Кнута также имеет много других инструкций.
Конфигурация 1945 года ENIAC имела 20 аккумуляторов, которые могут работать параллельно. Каждый мог хранить восьмизначное десятичное число и прибавлять к нему (или вычитать из него) полученное число. Большинство ранних бинарных «научных» компьютеров IBM, начиная с вакуумной лампы IBM 701 в 1952 году, использовали один 36-битный аккумулятор вместе с отдельным регистром множителя / частного для обработки операций с более длительными результатами. IBM 650, десятичная машина, имела один десятизначный распределитель и два десятизначных аккумулятора; IBM 7070, более поздняя, транзисторная десятичная машина, имела три аккумулятора. IBM System / 360 и PDP-6 Digital Equipment Corporation имели 16 регистров общего назначения, хотя PDP-6 и его преемник, PDP-10, назовите их аккумуляторами.
12-битный PDP-8 был одним из первых мини-компьютеров, в которых использовались аккумуляторы, и вдохновил многие более поздние машины. У PDP-8 был только один аккумулятор. HP 2100 и Data General Nova имели 2 и 4 аккумулятора. Нова была создана, когда это продолжение 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 - это довольно общая архитектура регистров, несмотря на то, что она основана на модели аккумулятора. 64-разрядное расширение x86, x86-64, было дополнительно обобщено до 16 вместо 8 общих регистров.