Registros
Los procesadores de 64 bits disponen de una serie de
registros formada por registros de propósito general y registros específicos.
Los registros de propósito son 16 de 64 bits y 6 registros específicos con segmento de 16
bits, también dispone de un registro de estado de 64 bits (RFLAGS) y de un registro contador de programa de
64 bits (RIP).
Registros de propósito general
Consta de 16 registros de datos de 64 bits (8 bytes):
RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP y R8-R15.
Los 8 primeros registros se nombran de forma parecida a
los 8 registros de propósito general de 32 bits disponibles en la arquitectura de
32 bits (EAX, EBX, ECX, EDX, ESI, EDI, EBP y ESP). Los registros se pueden acceder de cuatro formas
diferentes:
-Como registros de 64 bits (quad word).
-Como registros de 32 bits (double word), se accede a
los 32 bits de peso menor.
-Como registros de 16 bits (word), se accede a los 16
bits de peso menor.
-Como registros de 8 bits (byte), accediendo individualmente
a uno o dos de los bytes de menor peso según el registro.
El acceso a registros de byte tiene ciertas
limitaciones según el registro.
La nomenclatura que se utiliza según si se quiere
acceder a registros de 8, 16, 32 o 64 bits y según el registro se muestra en la
figura siguiente:
Existen limitaciones en el uso de registros de
propósito general:
-En una misma instrucción no se puede usar un registro
del grupo AH,
BH, CH, DH junto con cualquiera del grupo SIL, DIL,
BPL, SPL, R8B – R15B.
-Registro RSP: posee una función especial, es el apuntador de pila, contiene siempre la
dirección del primer elemento de la pila. No es posible utilizarlo con
otra finalidad, pues perderíamos el acceso a la pila.
-Cuando se utiliza un registro de 32 bits como operando
destino de una instrucción, la parte alta del registro se fija a 0.
Registros de propósito específico
Existen
varios registros de propósito específico:
Registros de segmento:
Hay 6 registros de segmento de 16 bits.
- CS: code
segment
- DS: data
segment
- SS: stack
segment
- ES: extra
segment
- FS: extra
segment
- GS: extra
segment
Estos registros son usados en modelos de memoria
segmentados (heredados de la arquitectura de 32 bits). En estos modelos, la
memoria se divide en segmentos, de forma que en un momento dado el procesador
solo puede acceder a seis segmentos de memoria usando cada uno de los seis
registros de segmento.
En el modo de 64 de bits, estos registros apenas se
utilizan, pues se trabaja con un modelo de memoria lineal y el valor de estos
registros se establece en 0 (excepto para los registros FS y GS, que pueden ser
usados como registros base en el cálculo de direcciones).
Registro de instrucción o instruction pointer (RIP):
es el registro contador de programa (PC) y contiene la dirección efectiva (o
dirección lineal) de 64 bits de la instrucción siguiente que se ha de ejecutar.
Cada vez que se lee la siguiente instrucción de la
memoria, este registro se actualiza con la dirección de la instrucción
siguiente que se tiene que ejecutar; también se puede modificar el contenido de
este registro durante la ejecución de una instrucción de ruptura de secuencia (una
llamada a una subrutina, o bien a través de un salto condicional o
incondicional).
Registro de estado o Flags register (RFLAGS):
este registro posee información sobre el estado interno del procesador e
información sobre el resultado de la ejecución de las instrucciones, es también
de 64 bits.
Pero sólo se usa la parte baja del registro (bits de 31
a 0), que corresponde al registro EFLAGS de la arquitectura de 32 bits. La
parte alta no se utiliza.
El registro de estado se utiliza para consultar el
valor individual de cada uno de sus bits; eso se realiza a través de instrucciones específicas, como las
instrucciones de salto condicional que consultan uno o más bits para determinar
si saltan o no según el estado de alguno de estos bits.
La última instrucción que los ha modificado no tiene
por qué ser la última instrucción que se haya ejecutado.
A continuación se muestra una tabla con el significado
de los bits de este registro.
tomado de Cartagena99.com |
Modo extendido de 64 bits
El modo extendido de 64 bits es el modo que utilizan
los sistemas operativos de 64 bits. Este modo general dispone de un modo de
operación de 64 bits y un modo de
compatibilidad con los modos de operación anteriores de las arquitecturas de 16
y 32 bits.
En un sistema operativo de 64 bits, los programas de 64
bits se ejecutan en modo de 64 bits y las aplicaciones de 16 y 32 bits se
ejecutan en modo de compatibilidad. Los programas de 16 y 32 bits que se tengan
que ejecutar en modo real o virtual x86 no se podrán ejecutar en modo extendido a no ser que sean emulados.
Modo de 64 bits
El modo de 64 bits permite el acceso a 16 registros
generales de 64 bits cada uno. En este
modo se utilizan direcciones virtuales (o lineales) que por defecto son de 64 bits y también permite acceder
a un espacio de memoria lineal de 264 bytes.
El tamaño por defecto de los registros operadores se
mantiene en 32 bits para la mayor parte de las instrucciones. Se permite
cambiar este tamaño por defecto de forma individual en cada instrucción a
través de modificadores. Por otra parte
permite el direccionamiento relativo al PC (RIP en esta arquitectura) en el
acceso a los datos de cualquier instrucción.
Modo de compatibilidad
Este modo permite a un sistema operativo de 64 bits
ejecutar directamente aplicaciones de 16 y 32 bits sin tener que recompilarlas.
En este modo, las aplicaciones utilizan direcciones de 16 y 32 bits, y tienen
acceso a un espacio de memoria de 4 Gb. El tamaño de los operandos puede ser de
16 o 32 bits. Las aplicaciones, lo ven como si se estuviera trabajando en modo protegido dentro del modo heredado.
Modo heredado de 16
y 32 bits
El modo heredado de 16 y 32 bits lo utilizan los
sistemas operativos de 16 y 32 bits. Cuando el sistema operativo utiliza estos modos
de 16 bits o de 32 bits, el procesador actúa como un procesador x86 y solo se
puede ejecutar código de 16 o 32 bits. Este modo solo permite utilizar
direcciones de 32 bits, de este modo, se limita el espacio de direcciones
virtual a 4 GB. Dentro de este modo general hay tres modos:
Modo real.
Implementa el modo de programación del microprocesador Intel 8086, pero con la
capacidad de permitir pasar al modo protegido o al modo de gestión del sistema.
El procesador se inicia en modo real al arrancar el sistema y cuando se reinicia. Es el único modo
de operación que permite utilizar un sistema operativo de 16 bits.
El modo real dispone de un espacio de memoria de 1 MB
con direcciones de memoria de 20 bits y con acceso a direcciones hardware (como
el sistema de E/S). No proporciona protección de memoria en sistemas multitarea
ni de código con diferentes niveles de privilegio.
Modo protegido. Es el modo por defecto del procesador. Puede usar características
como memoria virtual, paginación o multitarea. Las capacidades de este modo incluyen
la posibilidad de ejecutar código en modo
real, modo virtual-8086, en cualquier tarea en ejecución.
Modo virtual 8086. Posibilita ejecutar programas de 16 bits como si
fueran tareas dentro del modo protegido.
Modo de gestión de sistema
Este modo, también llamado system management mode (SMM) consiste en un modo de operación transparente del
software convencional (sistema operativo y aplicaciones). Consiste en la
suspensión de la ejecución normal (incluido el sistema operativo) y se ejecuta
un software especial con grandes niveles de privilegios, diseñado específicamente para controlar el
sistema.
Las tareas habituales de este modo, son tales como la
gestión de energía, la depuración asistida por hardware, ejecución de
microhardware (software asistido por hardware).
Este modo es el que utiliza la BIOS y los controladores
de dispositivo de bajo nivel. Se accede al SMM a través de una interrupción de
gestión del sistema (SMI, system
management interrupt). Este tipo de peticiones se generan
con acontecimientos independientes o pueden ser disparadas a través del software
del sistema al acceder a una dirección de E/S considerada especial por la
lógica de control del sistema.
Basado en Programación en Ensamblador (x86-64)
No hay comentarios:
Publicar un comentario