Введение
Регистр, в котором хранятся промежуточные арифметические и логические результаты центрального процессора. В центральном процессоре компьютера (ЦПУ) аккумулятор – это регистр, в котором хранятся промежуточные результаты работы арифметико-логического устройства. Без регистра, такого как аккумулятор, потребовалось бы записывать результат каждого вычисления (сложения, умножения, сдвига и т.д.) в кэш-память или оперативную память, возможно, только для немедленного повторного чтения для использования в следующей операции. Доступ к памяти медленнее, чем доступ к регистру, например, к аккумулятору, поскольку технология, используемая для большой оперативной памяти, медленнее (но дешевле), чем технология, используемая для регистров. Ранние электронные вычислительные системы часто делились на две группы: системы с аккумуляторами и без них. Современные компьютерные системы часто имеют несколько регистров общего назначения, которые могут выполнять функции аккумулятора, поэтому этот термин используется реже. Однако для упрощения конструкции некоторые специализированные процессоры по-прежнему используют один аккумулятор.
In a computer's central processing unit (CPU), the accumulator is a register in which intermediate arithmetic logic unit results are stored. Without a register like an accumulator, it would be necessary to write the result of each calculation (addition, multiplication, shift, etc.) to cache or main memory, perhaps only to be read right back again for use in the next operation. Accessing memory is slower than accessing a register like an accumulator because the technology used for the large main memory is slower (but cheaper) than that used for a register. Early electronic computer systems were often split into two groups, those with accumulators and those without. Modern computer systems often have multiple general purpose registers that can operate as accumulators, and the term is no longer as common as it once was. However, to simplify their design, a number of special purpose processors still use a single accumulator.
Аккумуляторные машины
Аккумуляторная машина, также называемая машиной с одним операндом или процессором с архитектурой, основанной на аккумуляторе, — это тип процессора, в котором, несмотря на наличие нескольких регистров, процессор в основном хранит результаты вычислений в одном специальном регистре, обычно называемом «аккумулятором». Почти все компьютеры были аккумуляторными машинами, лишь высокопроизводительные «суперкомпьютеры» имели несколько регистров. Позже, когда мейнфреймы уступили место микрокомпьютерам, архитектуры с аккумулятором снова стали популярными, ярким примером является MOS 6502. Многие 8-битные микроконтроллеры, которые до сих пор популярны в 2014 году, такие как PICmicro и 8051, являются машинами на основе аккумулятора. Современные процессоры обычно являются машинами с двумя или тремя операндами. Дополнительные операнды указывают, какой из множества регистров общего назначения (также называемых «аккумуляторами общего назначения») используется в качестве источника и места назначения для вычислений. Эти процессоры не считаются «аккумуляторными машинами». Характерной чертой, отличающей один регистр как аккумулятор в компьютерной архитектуре, является то, что аккумулятор (если бы он был в этой архитектуре) использовался бы как неявный операнд для арифметических инструкций. Например, процессор может иметь инструкцию вида: ADD memaddress, которая добавляет значение, прочитанное из ячейки памяти memaddress, к значению в аккумуляторе, помещая результат обратно в аккумулятор. Аккумулятор не идентифицируется в инструкции номером регистра; он подразумевается в инструкции, и в инструкции нельзя указать другой регистр. Некоторые архитектуры используют определённый регистр в качестве аккумулятора в некоторых инструкциях, но другие инструкции используют номера регистров для явного указания операндов.
Известные компьютеры на базе аккумуляторов
Конфигурация ENIAC 1945 года имела 20 аккумуляторов, которые могли работать параллельно. Каждый из них мог хранить восьмизначное десятичное число и прибавлять к нему (или вычитать из него) полученное число. У 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 – это достаточно универсальная регистровая архитектура, несмотря на то, что она основана на аккумуляторной модели. 64-битное расширение x86, x86-64, было дополнительно обобщено до 16 регистров общего назначения вместо 8.