Registro del procesador

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 17 de junio de 2019; las comprobaciones requieren 24 ediciones .

El registro del procesador  es un campo de una longitud determinada en la memoria de acceso aleatorio ultrarrápida(SRAM) del procesador. Es utilizado por el propio procesador, puede ser accesible o inaccesible por software. Por ejemplo, al obtener la siguiente instrucción de la memoria, se coloca en el registro de instrucciones , al que el programador no puede acceder.

Registros programáticamente inaccesibles

Los registros inaccesibles mediante programación son todos los registros del procesador a los que no se puede acceder de una forma u otra desde el programa en ejecución. Un ejemplo de tales registros es el ya mencionado registro de instrucciones .

Registros accesibles por software

Los registros accesibles mediante programación son registros a los que se puede acceder de una forma u otra desde el programa en ejecución. Casi cada uno de estos registros se designa por su identificador de nombre en el nivel del lenguaje ensamblador y el código identificador numérico correspondiente en el nivel del lenguaje máquina. En términos de accesibilidad, los registros accesibles mediante programación no son lo mismo y se dividen prácticamente en dos grandes subgrupos:

Los registros especiales [3] contienen datos necesarios para el funcionamiento del procesador: compensaciones de la tabla base, niveles de acceso, etc.

Parte de los registros especiales pertenecen al dispositivo de control , que controla el procesador generando una secuencia de microinstrucciones .

El acceso a los valores almacenados en los registros se realiza directamente a la frecuencia del reloj del procesador y, por regla general, varias veces más rápido que el acceso a los campos en la RAM (incluso si la memoria caché contiene los datos necesarios), pero la cantidad de RAM mucho supera la cantidad total de registros del procesador, la "capacidad" total de registros de uso general/datos para procesadores x86 (por ejemplo, Intel 80386 y posteriores) 8 registros de 4 bytes = 32 bytes (en procesadores x86-64 - 16 de 8 bytes = 128 bytes y algunos registros vectoriales).

Algunos ejemplos

La tabla muestra el número de registros de propósito general en varias arquitecturas de microprocesadores comunes. Vale la pena señalar que en algunas arquitecturas, el uso de registros individuales puede ser complicado. Entonces, en SPARC y MIPS, el registro número 0 no almacena información y siempre se lee como 0, y en los procesadores x86 con un registro ESP(puntero a la pila), solo pueden funcionar algunos comandos.

Arquitectura
registros enteros
FP -
registros
notas
x86-32 ocho ocho
x86-64 dieciséis dieciséis
Sistema IBM/360 dieciséis cuatro
z/Arquitectura dieciséis dieciséis
Itanio 128 128
SPARC 31 32 El registro 0 (global) siempre se está ejecutando
Célula de IBM 4~16 1~4
ENERGÍA DE IBM 32 32
arquitectura de poder 32 32
Alfa 32 32
6502 3 0
W65C816S 5 0
FOTO una 0
AVR 32 0
BRAZO de 32 bits [4] dieciséis varios
BRAZO de 64 bits [5] 31 32
MIPS 31 32 El registro 0 es siempre cero
RISC-V 31 32 Además, existe el registro 0 que siempre devuelve cero
Elbrús 2000 256 alineado con

entero

32 registros de dos dígitos,

256 = 32 registros globales + 224 registros de pila de procedimientos [6]

arquitectura x86

IP ( Puntero de instrucciones en inglés  ) - un registro que indica el desplazamiento (dirección) de las instrucciones en el segmento de código (1234: 0100h segmento / desplazamiento).

IP - 16 bits (parte inferior de EIP)

EIP: analógico de 32 bits (parte inferior de RIP)

RIP: analógico de 64 bits

Los registros de segmento  son registros que apuntan a segmentos.

Todos los registros de segmento son de 16 bits.

CS ( segmento de código ) ,  DS ( segmento de datos ) , SS ( segmento de pila ) , ES ( segmento adicional ) , FS, GS    

En el modo real del procesador, los registros de segmento contienen la dirección del comienzo del segmento de 64 Kb, desplazada a la derecha 4 bits.

En el modo protegido del procesador, los registros de segmento contienen el selector del segmento de memoria asignado por el sistema operativo.

CS es un puntero a un segmento de código. El enlace CS:IP (CS:EIP/CS:RIP - en modo seguro/64 bits) apunta a la dirección de memoria de la siguiente instrucción.

En el modo de 64 bits, los registros de segmento CS, DS, ES y SS no participan en la formación de una dirección lineal (continua), ya que en este modo no se admite la segmentación.

Los registros de datos  se utilizan para almacenar cálculos intermedios.

RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 - R15 - 64 bits (registro AX)

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D - R15D - 32 bits (AX ampliado)

AX ( acumulador ) ,  CX ( registro de conteo ) , DX ( registro de datos ) , BX ( registro base ) , SP ( puntero de pila ) , BP ( puntero base ) SI (, índice de origen ), DI ( índice de destino ), R8W - R15W - 16 bits        

AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B - 8 bits (mitades de registros de 16 bits)

por ejemplo, AH - AX alto - mitad alta de 8 bits

AL - AX bajo - mitad baja de 8 bits

RAX RCX RDX RBX
EAX ECX EDX EBX
HACHA CX DX BX
Ah Alabama CH CL D. H. DL BH licenciado en Derecho


RSP RBP RSI RDI Rx
ESP PBE ESI EDI RxD
SP PA SI DI RxA
SPL BPL SIL DIL RxB

donde x es 8..15.
Los registros RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL solo están disponibles en el modo de procesador de 64 bits.

Registro de banderas FLAGS (16 bits) / EFLAGS (32 bits) / RFLAGS (64 bits) - contiene el estado actual del procesador.

Los registros del sistema GDTR, LDTR e IDTR se introdujeron en los procesadores a partir de Intel286 y están diseñados para almacenar las direcciones base de las tablas de descriptores  , los componentes más importantes de la arquitectura del sistema cuando se trabaja en modo protegido.

El registro GDTR contiene una dirección base de 32 bits (24 bits para Intel286) y un límite de tabla de descriptores globales ( GDT ) de 16 bits.

La parte visible del registro LDTR contiene solo el selector de descriptores de la tabla de descriptores locales (LDT). El propio descriptor LDT se carga automáticamente en la parte oculta LDTR de la tabla de descriptores globales.

El registro IDTR contiene una dirección base de 32 bits (24 bits para Intel286) y un límite de tabla de descripción de interrupción ( IDT ) de 16 bits. En modo real, se puede usar para cambiar la ubicación de la tabla de vectores de interrupción.

La parte visible del registro TR contiene el selector del descriptor de segmento de estado de tarea ( TSS ). El propio descriptor TSS se carga automáticamente en la parte oculta del TR desde la tabla de descriptores globales.

Un registro es una unidad funcional que recibe, almacena y transmite información. Los registros están formados por un grupo de disparadores , normalmente D. Según el tipo de recepción y emisión de la información, se distinguen 2 tipos de registros:

Los registros de desplazamiento son una cadena de flip- flops conectados en serie . El principal modo de operación es el cambio de los bits del código de un disparador a otro para cada pulso de la señal del reloj.

Por finalidad, los registros se diferencian en:

Contador de comandos

IP

IP ( Puntero de instrucción en inglés  ) : un registro que contiene el desplazamiento de dirección de la siguiente instrucción que se ejecutará en relación con el segmento de código CS en los procesadores de la familia x86 .

El registro de IP está asociado con CS como CS:IP, donde CS es el segmento de código actual e IP es el desplazamiento actual de ese segmento.

El registro IP es un registro puntero de 16 bits. Además, este tipo de registros incluye SP ( English  Stack Pointer  - puntero de pila) y BP ( English  Base Pointer  - puntero base).

Principio de funcionamiento

Por ejemplo, CS contiene el valor , el registro de IP almacena el desplazamiento . 2CB5[0]H123H

La dirección de la siguiente instrucción a ejecutar se calcula sumando la dirección en el CS (Segmento de Código) al desplazamiento en el registro IP:

2CB50H + 123H = 2CC73H

Así, la dirección de la siguiente instrucción a ejecutar es 2CC73H.

Cuando se ejecuta la instrucción actual, el procesador cambia automáticamente el valor en el registro IP, de manera que el par de registros CS:IP siempre apunta a la siguiente instrucción a ejecutar.

PIE

Comenzando con el procesador 80386 , se introdujo una versión de 32 bits del registro de puntero: EIP ( Puntero de instrucción extendida ) .  En este caso, IP es el extremo inferior de este registro (los primeros 16 bits). El principio de funcionamiento de EIP es generalmente similar al funcionamiento del registro de IP. La principal diferencia es que en el modo protegido, a diferencia del modo real, el registro CS es un selector (el selector no apunta al segmento en sí en la memoria, sino al descriptor del segmento en la tabla de descriptores).

DEP

Los procesadores de 64 bits usan su propio registro de puntero de instrucción: RIP .

La parte inferior de este registro es el registro EIP.

Basado en RIP, se ha introducido un nuevo método de direccionamiento relativo a RIP en los procesadores de 64 bits. El resto del trabajo de RIP es similar al trabajo del registro EIP.

Notas

  1. Bárbara J. Burian. Un enfoque simple para la programación en lenguaje ensamblador S/370. — Nueva York: Prentice-Hall, Inc., 1977.
  2. Pogorely S. D., Slobodyanyuk T. F. Software para sistemas de microprocesadores. Directorio. — 2º, revisado y complementado. - Kyiv: Technika, 1989. - S. 7, 48-51. — 301 pág. - (Manual del especialista). — 50.000 copias.  — ISBN 5-335-00169-0 .
  3. Manual del desarrollador de software de las arquitecturas Intel 64 e IA-32. Volumen 1: Arquitectura Básica. 3.4 REGISTROS DE EJECUCIÓN DE PROGRAMAS BÁSICOS Archivado el 24 de mayo de 2011 en Wayback Machine . 
  4. Estándar de llamada a procedimiento para la arquitectura ARM . ARM Holdings (16 de octubre de 2009). Consultado el 24 de abril de 2012. Archivado desde el original el 28 de abril de 2013.
  5. Estándar de llamada a procedimiento para la arquitectura ARM de 64 bits . ARM Holdings (25 de noviembre de 2011). Consultado el 24 de abril de 2012. Archivado desde el original el 28 de abril de 2013.
  6. MCST. Introducción a la arquitectura de Elbrus  (ruso)  ? . Alt Linux (31 de mayo de 2020). Consultado el 16 de julio de 2020. Archivado desde el original el 2 de junio de 2020.

Enlaces