Este artículo necesita citas adicionales para su verificación . ( February 2024 ) |
En la unidad central de procesamiento (CPU) de una computadora , el acumulador es un registro en el que se almacenan los resultados de la unidad lógica aritmética intermedia .
Sin un registro como un acumulador, sería necesario escribir el resultado de cada cálculo (suma, multiplicación, desplazamiento , etc.) en la memoria caché o principal , quizás sólo para volver a leerlo para usarlo en la siguiente operación.
El acceso a la memoria es más lento que el acceso a un registro, como un acumulador, porque la tecnología utilizada para la memoria principal de gran tamaño es más lenta (pero más barata) que la utilizada para un registro. Los primeros sistemas informáticos electrónicos se dividían a menudo en dos grupos: los que tenían acumuladores y los que no los tenían.
Los sistemas informáticos modernos suelen tener varios registros de uso general que pueden funcionar como acumuladores, y el término ya no es tan común como antes. Sin embargo, para simplificar su diseño, varios procesadores de uso especial todavía utilizan un solo acumulador.
Las operaciones matemáticas suelen realizarse de forma escalonada, utilizando los resultados de una operación como entrada para la siguiente. Por ejemplo, un cálculo manual de la nómina semanal de un trabajador podría ser algo así:
Un programa informático que llevara a cabo la misma tarea seguiría la misma secuencia básica de operaciones, aunque los valores que se buscaran se almacenarían todos en la memoria del ordenador. En los primeros ordenadores, el número de horas probablemente se guardaría en una tarjeta perforada y la tasa de pago en alguna otra forma de memoria, tal vez un tambor magnético . Una vez que se completa la multiplicación, el resultado debe colocarse en algún lugar. En una "caja de ritmos", esto probablemente sería volver al tambor, una operación que lleva un tiempo considerable. Luego, la siguiente operación tiene que volver a leer ese valor, lo que introduce otro retraso considerable.
Los acumuladores mejoran drásticamente el rendimiento en sistemas como estos al proporcionar un área de borrador donde los resultados de una operación se pueden pasar a la siguiente con poca o ninguna penalización de rendimiento. En el ejemplo anterior, se calcularía el salario semanal básico y se colocaría en el acumulador, que luego podría usarse inmediatamente para el cálculo del impuesto a las ganancias. Esto elimina una operación de guardado y una de lectura de la secuencia, operaciones que generalmente demoraban entre decenas y cientos de veces más que la multiplicación misma.
Una máquina acumuladora , también llamada máquina de 1 operando o CPU con arquitectura basada en acumuladores , es un tipo de CPU en la que, aunque puede tener varios registros, la CPU almacena principalmente los resultados de los cálculos en un registro especial, normalmente llamado "el acumulador". Casi todas las primeras computadoras [ aclaración necesaria ] eran máquinas acumuladoras y solo las " supercomputadoras " de alto rendimiento tenían múltiples registros. Luego, cuando los sistemas mainframe dieron paso a las microcomputadoras , las arquitecturas de acumuladores volvieron a ser populares, siendo el MOS 6502 un ejemplo notable. Muchos microcontroladores de 8 bits que siguen siendo populares en 2014 , como el PICmicro y el 8051 , son máquinas basadas en acumuladores.[actualizar]
Las CPU modernas suelen ser máquinas de 2 o 3 operandos. Los operandos adicionales especifican cuál de los muchos registros de propósito general (también llamados "acumuladores de propósito general" [1] ) se utilizan como origen y destino de los cálculos. Estas CPU no se consideran "máquinas acumuladoras".
La característica que distingue a un registro como acumulador de una arquitectura informática es que el acumulador (si la arquitectura tuviera uno) se usaría como un operando implícito para instrucciones aritméticas . Por ejemplo, una CPU podría tener una instrucción como: que suma el valor leído de la ubicación de memoria memaddress al valor en el acumulador, colocando el resultado nuevamente en el acumulador. El acumulador no se identifica en la instrucción por un número de registro; está implícito en la instrucción y no se puede especificar ningún otro registro en la instrucción. Algunas arquitecturas usan un registro particular como acumulador en algunas instrucciones, pero otras instrucciones usan números de registro para la especificación explícita de operandos.ADD memaddress
Cualquier sistema que utilice una única "memoria" para almacenar el resultado de múltiples operaciones puede considerarse un acumulador. J. Presper Eckert se refiere incluso a las primeras máquinas sumadoras de Gottfried Leibniz y Blaise Pascal como sistemas basados en acumuladores. [2] Percy Ludgate fue el primero en concebir un multiplicador-acumulador (MAC) en su Máquina Analítica de 1909. [3]
La convención histórica dedica un registro al "acumulador", un "órgano aritmético" que literalmente acumula su número durante una secuencia de operaciones aritméticas:
Algunas de las instrucciones son, por ejemplo (con alguna interpretación moderna):
No existe ninguna convención en cuanto a los nombres de las operaciones de registros a acumulador y de acumulador a registros. La tradición (por ejemplo, la computadora hipotética MIX de Donald Knuth (1973) ), por ejemplo, utiliza dos instrucciones llamadas cargar acumulador desde registro/memoria (por ejemplo, "LDA r") y almacenar acumulador en registro/memoria (por ejemplo, "STA r"). El modelo de Knuth también tiene muchas otras instrucciones.
La configuración de 1945 de ENIAC tenía 20 acumuladores, que podían operar en paralelo. [4] : 46 Cada uno podía almacenar un número de ocho dígitos decimales y sumarle (o restarle) un número que recibiera. [4] : 33 La mayoría de las primeras computadoras "científicas" binarias de IBM, comenzando con el IBM 701 de tubo de vacío en 1952, usaban un solo acumulador de 36 bits , junto con un registro multiplicador/cociente separado para manejar operaciones con resultados más largos. El IBM 650 , una máquina decimal, tenía un distribuidor de 10 dígitos y dos acumuladores de diez dígitos; el IBM 7070 , una máquina decimal transistorizada posterior, tenía tres acumuladores. El IBM System/360 y el PDP-6 de Digital Equipment Corporation tenían 16 registros de propósito general, aunque el PDP-6 y su sucesor, el PDP-10 , los llaman acumuladores.
El PDP-8 de 12 bits fue uno de los primeros miniordenadores en utilizar acumuladores, e inspiró a muchas máquinas posteriores. [5] El PDP-8 tenía un solo acumulador. El HP 2100 y el Data General Nova tenían 2 y 4 acumuladores. El Nova se creó cuando esta continuación del PDP-8 fue rechazada en favor de lo que se convertiría en el PDP-11 . El Nova proporcionaba cuatro acumuladores, AC0-AC3, aunque AC2 y AC3 también podían utilizarse para proporcionar direcciones de desplazamiento, tendiendo hacia una mayor generalidad de uso para los registros. El PDP-11 tenía 8 registros de propósito general, en la línea del System/360 y el PDP-10; la mayoría de las máquinas CISC y RISC posteriores proporcionaban múltiples registros de propósito general.
Los primeros microprocesadores de 4 y 8 bits, como el 4004 , el 8008 y muchos otros, solían tener acumuladores individuales. El microcontrolador 8051 tiene dos, un acumulador primario y un acumulador secundario, donde el segundo se utiliza solo para las instrucciones al multiplicar (MUL AB) o dividir (DIV AB); el primero divide el resultado de 16 bits entre los dos acumuladores de 8 bits, mientras que el segundo almacena el cociente en el acumulador primario A y el resto en el acumulador secundario B. Como descendiente directo del 8008, el 8080 y el 8086 , los modernos y omnipresentes procesadores Intel x86 aún utilizan el acumulador primario EAX y el acumulador secundario EDX para la multiplicación y división de números grandes. Por ejemplo, MUL ECX multiplicará los registros de 32 bits ECX y EAX y dividirá el resultado de 64 bits entre EAX y EDX. Sin embargo, MUL y DIV son casos especiales; otras instrucciones aritmético-lógicas (ADD, SUB, CMP, AND, OR, XOR, TEST) pueden especificar cualquiera de los ocho registros EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI como acumulador (es decir, operando izquierdo y destino). Esto también se admite para multiplicar si no se requiere la mitad superior del resultado. x86 es, por lo tanto, una arquitectura de registros bastante general, a pesar de estar basada en un modelo acumulador. [6] La extensión de 64 bits de x86, x86-64 , se ha generalizado aún más a 16 en lugar de 8 registros generales.