¿Qué tipos de registros de CPU hay y qué hacen?

Un registro es una pieza de memoria muy costosa y muy rápida que se puede encontrar dentro de su CPU. Cuando su computadora agrega dos números, copiará cada número en un registro diferente, agregará los valores (que están en los registros) y colocará el resultado en un registro. Luego puede copiar ese resultado de su registro en la memoria normal o usarlo para otra cosa. A veces, un registro contendrá un número para agregar, a veces mantendrá una dirección a una ubicación en la memoria.

Hay diferentes tipos de registros y vienen en diferentes tamaños.

Muchas arquitecturas de CPU tienen registros especializados destinados a contener cierta información. Por ejemplo, el contador del programa y el puntero de la pila tienden a ser registros especializados. El contador del programa generalmente se usa para realizar un seguimiento de las instrucciones que se encuentran dentro de un programa. Mientras que el puntero de la pila por lo general contiene la dirección de memoria donde estaba en el espacio de la pila antes de llamar a la función actual; en otras palabras, ayuda a administrar la pila de memoria.

Peter Hand tiene una gran respuesta. Me gustaría agregar un poco de historia a su pregunta. Y, tenga en cuenta que el 90% de lo que digo ahora es tecnología OBSOLETO. Dicho esto, es útil saber de dónde provienen los sistemas modernos.

//

Pero primero, una vieja broma de FORTRAN para animar las cosas secas:

Entonces, si tenemos un GOTO, ¿por qué no podemos tener un “COMEFROM”?

//

Ahora a los registros:

Existen básicamente tres tipos de registros: contadores; Acumuladores; y calculadoras.


Comenzaremos con los años 50:

Los contadores son lo que dicen que son, cuentan cosas. El mejor ejemplo es un registro oculto que no puede afectar directamente sin instrucciones especiales, incluido el contador P o el contador de posición de ejecución. Este registro contiene la dirección actual o la siguiente para una búsqueda de instrucciones. En una máquina de palabras de 32 bits (solo Word direccionable, como el Ford 102, entonces este registro contendrá la dirección de la instrucción * next * que se ejecutará. En el Ford 102, un programador puede ejecutar dos instrucciones para modificar este contador : SKIP (salta sobre la siguiente instrucción) y JUMP (salta a una nueva dirección de ejecución). De lo contrario, aumenta secuencialmente, una palabra a la vez.

Los acumuladores también son lo que dicen que son, acumulan números. Entonces, si agrega una serie de números, el acumulador dedicado en su sistema simplemente aumenta el valor. Aquí solo se pueden usar cuatro instrucciones generales: SET (establecido en cero u otro número específico); AGREGAR (agregue un número al número actualmente en el acumulador); LEA (lea el contenido del registro). Tenga en cuenta que SUBTRACT fue una función de un SET -1 y luego un ADD para crear un valor negativo, que luego podría usarse como una máscara para el concepto (simulado) SUBTRACT. ¡Sip! Las computadoras en realidad no restan, ¡solo calculan un par de adiciones!

Los titulares de direcciones son exactamente lo que dicen. Tienen una dirección, por ejemplo, de un elemento en una matriz para que el elemento pueda ser recuperado y modificado.


Ahora para los años 60 y 70

Con la creación de IBM S / 360 (como ejemplo) se produjeron algunos cambios. Debido al aumento de la tecnología, el uso de transistores discretos (muy caros) se combinó en chips TTL siempre que fue posible. Como consecuencia, la estructura de los registros cambió. Ahora, con la capacidad ampliada, se produjeron algunos cambios. Principalmente en el aumento de registros de doble uso (o de propósito general). En lugar de tener solo dos registros de 32 bits, como el Ford 102, ¡el S / 360 tenía 16! ¡Y tenía algunos nuevos disponibles, registros FPS!

Luego vinieron las máquinas CDC, como la Cyber ​​204, y los registros FPS se agruparon para crear registros vectoriales (un vector que tiene 8 registros FPS de 60 bits agrupados). Cray amplió esto con 64 registros FPS de 64 bits.

Los registros son solo almacenes de números: pequeños trozos de RAM local si lo desea. Hay varios tipos No sé con qué CPU está familiarizado, imagino, ninguno, ya que hace una pregunta tan fundamental, por lo que me referiré principalmente a ese favorito académico, el 8051, que tiene una arquitectura muy simple. Podrías aprender todo esto leyendo la hoja de datos, por supuesto. Intel MCS-51 en Wikipedia lo ayudará a comenzar. Dudo si alguna vez programarás un 8051, pero probablemente conocerás el Atmel AVR.

  • Propósito general: estos pueden almacenar un número, y eso es todo. Los registros GP pueden ser el origen de una operación aritmética, pero no el destino. R3 en el 8051 sería un registro de este tipo. Es bastante incapaz.
  • Registros aritméticos: tales cosas incluyen el acumulador clásico, el destino predeterminado para todas las operaciones aritméticas, pero la arquitectura RISC inició una tendencia de que cualquier registro podría usarse como origen, destino o ambos. Generalmente se llama ‘A’ si es un acumulador, por ejemplo, A en el 8051 (que también tiene un acumulador ‘B’ un poco menos versátil). ‘ADD A, R4’ agrega R4 a A y deja el resultado en A. En una CPU RISC como la serie AVR, cualquiera de los 32 registros puede ser el origen o el destino, por ejemplo, ‘ADD R5, R6’ agrega R5 a R6 y pone el resultado en R5. ARM es aún más versátil, ya que el registro de destino se especifica por separado como un tercer campo. ‘AGREGAR R0, R1, R2’ agrega R1 y R2 y coloca el resultado en R0.
  • Registros de puntero: estos tienen una ruta hacia el bus de direcciones, y el número que contiene puede usarse como puntero para acceder a la memoria. El 8051 tiene tres registros de puntero: R0 y R1, que tienen una longitud de 8 bits y solo se pueden usar en un rango restringido, y DPTR, un registro de 16 bits que puede llegar a toda la memoria. La familia AVR tiene tres punteros de 16 bits, XY y Z, cada uno de los cuales en realidad consiste en dos registros de 8 bits que se pueden usar por separado para cualquier otro propósito. A veces, los registros del puntero también pueden indexarse , es decir, la instrucción incluye un campo de desplazamiento que se agrega al valor del puntero, por ejemplo, si (AVR) Y = 1234, entonces ‘LD R1, Y’ carga R1 con el contenido de la ubicación de memoria 1234, pero ‘LDD R1, Y + 10’ agrega 10 a la dirección y carga R1 con el contenido de 1244.
  • Propósito especial: estos incluyen el contador del programa, el puntero de la pila, el registro de bandera, los registros de segmento y (en el mundo de la PC) una gran cantidad de registros poco conocidos asociados con el modo protegido. Casi todos los registros de propósito especial son, de alguna manera, registros de puntero.
  • Registros IO: bueno, estos son algo muy diferente. Se parecen a los otros registros, pero son la cara accesible de una pieza de hardware. Cuando escribe en un registro IO, el número no solo se almacena allí, sino que generalmente hace que algo suceda en el mundo físico. Cuando lees uno, el valor que lees representa el estado de algo físico.

Espero que esto te ayude a comenzar. Lee las hojas de datos.

Puede echar un vistazo a esta respuesta que ya he escrito: ¿Cuántos registros hay en la CPU?