stringtranslate.com

registro de índice

Visualización del registro de índice en una computadora central IBM 7094 de principios de la década de 1960

Un registro de índice en la CPU de una computadora es un registro de procesador (o una ubicación de memoria asignada) [1] que se utiliza para señalar direcciones de operandos durante la ejecución de un programa. Es útil para recorrer cadenas y matrices . También se puede utilizar para contener iteraciones de bucles y contadores. En algunas arquitecturas se utiliza para leer/escribir bloques de memoria. Dependiendo de la arquitectura, puede ser un registro de índice dedicado o un registro de propósito general. [2] Algunos conjuntos de instrucciones permiten utilizar más de un registro de índice; en ese caso, campos de instrucciones adicionales pueden especificar qué registros de índice usar. [3]

Generalmente, el contenido de un registro de índice se suma (en algunos casos se resta) a una dirección inmediata (que puede ser parte de la instrucción misma o mantenerse en otro registro) para formar la dirección "efectiva" de los datos reales (operando). . Por lo general, se proporcionan instrucciones especiales para probar el registro de índice y, si la prueba falla, incrementa el registro de índice en una constante inmediata y se bifurca, generalmente al inicio del ciclo. Mientras que normalmente los procesadores que permiten que una instrucción especifique múltiples registros de índice suman los contenidos, IBM tenía una línea de computadoras en las que los contenidos estaban juntos. [4]

Los registros de índice han demostrado ser útiles para realizar operaciones de vectores / matriz y en el procesamiento de datos comerciales para navegar de un campo a otro dentro de los registros. En ambos usos, los registros de índice redujeron sustancialmente la cantidad de memoria utilizada y aumentaron la velocidad de ejecución.

Historia

En las primeras computadoras sin ningún tipo de direccionamiento indirecto , las operaciones de matriz debían realizarse modificando la dirección de la instrucción, lo que requería varios pasos adicionales del programa y consumía más memoria de la computadora, [5] un recurso escaso en las instalaciones informáticas de la era temprana (como así como en las primeras microcomputadoras dos décadas después).

Los registros de índice, comúnmente conocidos como líneas B en las primeras computadoras británicas, como registros B en algunas máquinas y registros X [a] en otras, se utilizaron por primera vez en la computadora británica Manchester Mark 1 , en 1949. En general, los registros de índice Los registros se convirtieron en una parte estándar de las computadoras durante la segunda generación de la tecnología , aproximadamente entre 1954 y 1966. La mayoría de las máquinas [b] de la serie de mainframe IBM 700/7000 los tenían, comenzando con el IBM 704 en 1954, aunque eran opcionales en algunas máquinas más pequeñas como el IBM 650 y el IBM 1401 .

Las primeras "pequeñas máquinas" con registros de índice incluyen la AN/USQ-17 , alrededor de 1960, y la serie 9 de computadoras en tiempo real de Scientific Data Systems , de principios de la década de 1960.

El UNIVAC 1107 de 1962 tiene 15 registros X, cuatro de los cuales también eran registros A.

El GE-635 de 1964 tiene 8 registros X dedicados; sin embargo, también permite la indexación por el contador de instrucciones o por la mitad del registro A o Q.

El PDP-6 de Digital Equipment Corporation (DEC) , introducido en 1964, y el IBM System/360 , anunciado en 1964, no incluyen registros de índice dedicados; en cambio, tienen registros de propósito general (llamados "acumuladores" en el PDP-6) que pueden contener valores numéricos o direcciones. La dirección de memoria de un operando es, en el PDP-6, la suma del contenido de un registro de propósito general y un desplazamiento de 18 bits y, en el System/360, la suma del contenido de dos registros de propósito general. y un desplazamiento de 12 bits. [6] [7] La ​​línea PDP-10 compatible de sucesores del PDP-6, y el IBM System/370 y posteriores sucesores compatibles del System/360, incluido el actual z/Architecture , funcionan de la misma manera.

Las minicomputadoras Data General Nova de 1969 y su sucesora Eclipse , y DEC PDP-11 de 1970 , también proporcionaron registros de propósito general (llamados "acumuladores" en Nova y Eclipse), en lugar de acumuladores y registros de índice separados, como lo hicieron sus Eclipse MV y VAX. Sucesores de superminicomputadoras de 32 bits . En PDP-11 y VAX, se podía utilizar cualquier registro al calcular la dirección de memoria de un operando; en Nova, Eclipse y Eclipse MV, solo se pueden usar los registros 2 y 3. [8] [9] [10]

El CDC STAR-100 de 1971 tiene un archivo de registro de 256 registros de 64 bits, 9 de los cuales están reservados. A diferencia de la mayoría de las computadoras, las instrucciones STAR-100 solo tienen campos de registro y campos de operandos, por lo que los registros sirven más como registros de puntero que como registros de índice tradicionales.

Mientras que el Intel 8008 de 1972 permitía el direccionamiento indirecto mediante pares de registros, el primer microprocesador con un registro de índice verdadero parece haber sido el Motorola 6800 de 1974 .

En 1975, el procesador MOS Technology 6502 de 8 bits tenía dos registros de índice 'X' e 'Y'. [11]

En 1978, el Intel 8086 , el primer procesador x86 , tenía ocho registros de 16 bits, denominados "de propósito general", todos los cuales pueden usarse como registros de datos enteros en la mayoría de las operaciones; cuatro de ellos, 'SI' (índice de origen), 'DI' (índice de destino), 'BX' (base) y 'BP' (puntero base), también se pueden utilizar al calcular la dirección de memoria de un operando, que es la suma de uno de esos registros y un desplazamiento, o la suma de uno de 'BX' o 'BP", uno de 'SI' o 'DI' y un desplazamiento. [12] El Intel 8088 de 1979 y el Los sucesores de Intel 80186 , Intel 80188 e Intel 80286 de 16 bits funcionan igual. En 1985, el i386 , un sucesor de 32 bits de esos procesadores, al presentar la versión IA-32 de 32 bits de la arquitectura x86, amplió los ocho de 16. registros de bits a 32 bits, con "E" agregada al comienzo del nombre del registro en IA-32, la dirección de memoria de un operando es la suma de uno de esos ocho registros, uno de siete de esos registros (la pila); El puntero no está permitido como segundo registro aquí) multiplicado por 1, 2, 4 u 8, y un desplazamiento [13] : 3-11–3-12, 3-22–3-23  The Advanced Micro Devices Opteron ,. cuyo primer modelo se lanzó en 2003, introdujo x86-64 , la versión de 64 bits del conjunto de instrucciones x86; en x86-64, los registros de propósito general se ampliaron a 64 bits y se agregaron ocho registros de propósito general adicionales; la dirección de memoria de un operando es la suma de dos de esos 16 registros y un desplazamiento. [14] [13] : 3–12, 3–24 

Los conjuntos de instrucciones de computación de conjunto de instrucciones reducido (RISC) introducidos en las décadas de 1980 y 1990 proporcionan registros de uso general que pueden contener valores numéricos o valores de dirección. En la mayoría de esos conjuntos de instrucciones, hay 32 registros de propósito general (en algunos de esos conjuntos de instrucciones, el valor de uno de esos registros está cableado a cero) que podrían usarse para calcular la dirección del operando; no tenían registros de índice dedicados. En la versión de 32 bits de la arquitectura ARM , desarrollada por primera vez en 1985, hay 16 registros designados como "registros de propósito general", pero sólo 13 de ellos pueden usarse para todos los propósitos, y el registro R15 contiene el contador de programa . La dirección de memoria de una instrucción de carga o almacenamiento es la suma de cualquiera de los 16 registros y un desplazamiento u otro de los registros con la excepción de R15 (posiblemente desplazado hacia la izquierda para escalar). [15] En la versión de 64 bits de la arquitectura ARM, hay 31 registros de propósito general de 64 bits más un puntero de pila y un registro cero; la dirección de memoria de una instrucción de carga o almacenamiento es la suma de cualquiera de los 31 registros y un desplazamiento u otro de los registros. [dieciséis]

Ejemplos

A continuación se muestra un ejemplo sencillo del uso del registro de índice en pseudocódigo en lenguaje ensamblador que suma una matriz de 100 entradas de palabras de 4 bytes:

 Borrar_acumulador Load_index 400,index2 //carga 4*tamaño de matriz en el registro de índice 2 (index2)loop_start: Add_word_to_accumulator array_start,index2 //Agrega a AC la palabra en la dirección (array_start + index2) Branch_and_decrement_if_index_not_zero loop_start,4,index2 //bucle que disminuye en 4 hasta que el registro de índice sea cero

Ver también

Notas

  1. ^ El término registros X también se utilizó para acumuladores, por ejemplo, en el CDC 6600 .
  2. ^ Los 702, 705 y 7080 no tenían registros de índice.

Referencias

  1. ^ "Instrucciones: índice de palabras" (PDF) . Principios de funcionamiento de IBM 7070-7074 (PDF) . IBM. 1962. pág. 11. GA22-7003-6.
  2. ^ "¿Qué es un registro índice? (con imagen)". EasyTechJunkie . Consultado el 24 de julio de 2022 .
  3. ^ Manual de referencia de IBM 709, formulario A22-6501-0, 1958, pág. 12
  4. ^ Principios de funcionamiento de IBM 7094 (PDF) . Quinta edición. IBM. 21 de octubre de 1966. A22-6703-4.
  5. ^ Manual de referencia de IBM 1401, formulario A24-1403-4, 1960, pág. 77
  6. ^ Manual del procesador de datos programado-6 (PDF) . Corporación de equipos digitales . Agosto de 1964. págs. 20-22.
  7. ^ Principios de funcionamiento de IBM System/360 (PDF) (Octava ed.). IBM . Septiembre de 1968. págs. 8, 12-14. A22-6821-7.
  8. ^ Manual de referencia del programador, Nova Line Computers (PDF) . Datos generales . Enero de 1976. págs. I-1, II-7.
  9. ^ Manual de referencia del programador, computadoras de la línea Eclipse (PDF) . Datos generales . Marzo de 1975. págs. 1–1, 2–6.
  10. ^ Principios de funcionamiento de los sistemas ECLIPSE de 32 bits (PDF) . Datos generales . Agosto de 1984. págs. 1–2.
  11. ^ "Registros - Asamblea 6502". www.6502.buss.hk. ​Consultado el 24 de julio de 2022 .
  12. ^ "Manual del usuario de la familia 8086" (PDF) . Corporación Intel. Octubre de 1979. págs. 2–6, 2–68. Archivado (PDF) desde el original el 4 de abril de 2018 . Consultado el 28 de marzo de 2018 .
  13. ^ ab Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, volumen 1: arquitectura básica. Corporación Intel. Marzo de 2018. Capítulo 3. Archivado desde el original el 26 de enero de 2012 . Consultado el 19 de marzo de 2014 .
  14. ^ Manual del programador de arquitectura AMD64 Volumen 1: Programación de aplicaciones (PDF) . Micro dispositivos avanzados . Octubre de 2020. págs.3, 16.
  15. ^ Manual de referencia de arquitectura ARM. Brazo . 2005. págs. A2-6, A3-21.
  16. ^ Manual de referencia de arquitectura Arm Armv8, para el perfil de arquitectura Armv8-A. Brazo . 2022. págs. C1-227, C3-252.