Acumulador (informática)
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, cambio, etc.) en la memoria principal, tal vez solo para leerlo de nuevo y usarlo en la siguiente operación.
El acceso a la memoria principal es más lento que el acceso a un registro como un acumulador porque la tecnología utilizada para la gran memoria principal es más lenta (pero más económica) que la utilizada para un registro. Los primeros sistemas informáticos electrónicos a menudo se dividían en dos grupos, los que tenían acumuladores y los que no.
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 propósito especial todavía usan un solo acumulador.
Concepto básico
Las operaciones matemáticas a menudo se realizan 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 verse así:
- buscar el número de horas trabajadas de la tarjeta de tiempo del empleado
- buscar la tarifa de pago para ese empleado de una tabla
- multiplicar las horas por la tarifa de pago para obtener su salario semanal básico
- multiplicar su salario básico por un porcentaje fijo para contabilizar el impuesto sobre la renta
- restar ese número de su salario básico para obtener su pago semanal después de impuestos
- multiplicar ese resultado por otro porcentaje fijo para contabilizar los planes de jubilación
- restar ese número de su salario básico para obtener su pago semanal después de todas las deducciones
Un programa de computadora que realiza la misma tarea seguiría la misma secuencia básica de operaciones, aunque los valores que se buscan se almacenarían en la memoria de la computadora. En las primeras computadoras, la cantidad de horas probablemente se mantendrí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. Y 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 pueden pasar a la siguiente con una penalización de rendimiento mínima o nula. En el ejemplo anterior, el pago semanal básico se calcularía y se colocaría en el acumulador, que luego podría usarse inmediatamente para el cálculo del impuesto sobre la renta. Esto elimina una operación de guardar y una de leer de la secuencia, operaciones que generalmente tomaban decenas o cientos de veces más tiempo que la multiplicación misma.
Máquinas acumuladoras
Una máquina acumuladora, también llamada máquina de 1 operando, o CPU con arquitectura basada en acumuladores, es un tipo de CPU donde, 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 eran máquinas acumuladoras con solo las 'supercomputadoras' de alto rendimiento. tener varios 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 a partir de 2014, como PICmicro y 8051, son máquinas basadas en acumuladores.
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") se utilizan como fuente y destino para los cálculos. Estas CPU no se consideran "máquinas acumuladoras".
La característica que distingue a un registro como acumulador de una arquitectura de computadora 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 puede tener una instrucción como: ADD memaddress
que agrega el valor leído de la ubicación de memoria memaddress al valor en el acumulador, volviendo a colocar el resultado en el acumulador. El acumulador no está identificado 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.
Historia del acumulador informático
Cualquier sistema que utilice una sola "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. Percy Ludgate fue el primero en concebir un acumulador multiplicador (MAC) en su Máquina Analítica de 1909.
Una 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:
- "La primera parte de nuestro órgano aritmético... debe ser un órgano de almacenamiento paralelo que puede recibir un número y añadirlo al ya en él, que también es capaz de aclarar su contenido y que puede almacenar lo que contiene. Llamaremos a tal órgano un acumulador. Es bastante convencional en principio en máquinas informáticas pasadas y presentes de los tipos más variados, por ejemplo, multiplicadores de escritorio, contadores IBM estándar, máquinas de relé más modernas, el ENIAC" (Goldstine y von Neumann, 1946; p. 98 en Bell y Newell 1971).
Solo algunas de las instrucciones son, por ejemplo (con alguna interpretación moderna):
- Acumulador claro y añadir número desde la ubicación de memoria X
- Acumulador claro y número de subtracto de la ubicación de memoria X
- Agregar número copiado de la ubicación de memoria X al contenido del acumulador
- Número restante copiado de la ubicación de memoria X del contenido del acumulador
- Acumulador claro y cambio de contenido del registro en acumulador
No existe ninguna convención con respecto a los nombres de las operaciones de registros a acumulador y de acumulador a registros. La tradición (por ejemplo, la hipotética computadora MIX de Donald Knuth (1973), por ejemplo, usa dos instrucciones llamadas cargar acumulador desde el registro/memoria (por ejemplo, "LDA r") y almacenar acumulador para registrar/memoria (por ejemplo, "STA r"). El modelo de Knuth también tiene muchas otras instrucciones.
Computadoras notables basadas en acumuladores
La configuración de ENIAC de 1945 tenía 20 acumuladores, que podían operar en paralelo. Cada uno podría almacenar un número de ocho dígitos decimales y agregarle (o restarle) un número que recibió. La mayor parte de los primeros binarios 'científicos' de IBM Las computadoras, comenzando con el tubo de vacío IBM 701 en 1952, usaban un solo acumulador de 36 bits, junto con un registro separado de multiplicador/cociente para manejar operaciones con resultados más largos. La IBM 650, una máquina decimal, tenía un distribuidor de 10 dígitos y dos acumuladores de diez dígitos; la 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.
La PDP-8 de 12 bits fue una de las primeras minicomputadoras en usar acumuladores e inspiró a muchas máquinas posteriores. El PDP-8 solo tenía un acumulador. La HP 2100 y Data General Nova tenían 2 y 4 acumuladores. El Nova se creó cuando se rechazó esta continuación del PDP-8 a favor de lo que se convertiría en el PDP-11. El Nova proporcionó cuatro acumuladores, AC0-AC3, aunque AC2 y AC3 también podrían usarse para proporcionar direcciones compensadas, tendiendo hacia una mayor generalización del uso de los registros. El PDP-11 tenía 8 registros de propósito general, en la línea del System/360 y PDP-10; la mayoría de las máquinas CISC y RISC posteriores proporcionaron múltiples registros de propósito general.
Los primeros microprocesadores de 4 y 8 bits, como el 4004, el 8008 y muchos otros, normalmente tenían acumuladores individuales. El microcontrolador 8051 tiene dos, un acumulador primario y un acumulador secundario, donde el segundo es usado por instrucciones solo 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 ubicuos procesadores Intel x86 todavía usan 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 registro bastante general, a pesar de estar basada en un modelo acumulador. 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.
Contenido relacionado
B (lenguaje de programación)
Cambio de contexto
IEEE 802.11