sábado, 17 de octubre de 2015

Ensamblador y arquitectura de microprocesadores 2ª Parte


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:
Registros de 64 bits




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.
Flags de 64 bits

A continuación se muestra una tabla con el significado de los bits de este registro.



tabla de flags de 64 bits
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.




No hay comentarios:

Publicar un comentario