7. Comparative Analysis
7.1. Profile of EIA in the three cases
Espacio de direcciones
Los procesadores IA-32 pueden acceder a 4 GB de memoria en modo protegido; este límite se basa en el tamaño de una dirección representada por un número entero binario sin signo, de 32 bits. Los programas en modo de direccionamiento real tienen un rango de memoria de 1 MB. Si el procesador se encuentra en modo protegido y ejecuta varios programas en modo 8086 virtual, cada programa tiene su propia área de memoria de 1 MB.
Registros básicos de ejecución de un programa
Los registros son ubicaciones de almacenamiento de alta velocidad, que se encuentran directamente dentro de la CPU, y están diseñados para una velocidad de acceso mucho mayor que la de la memoria convencional. Por ejemplo, cuando se optimiza un ciclo de procesamiento en base a la velocidad, los contadores del ciclo se guardan en registros, en vez de variables. La fi gura 2-9 muestra los registros básicos de ejecución de un
programa. Hay ocho registros de propósito general, seis registros de segmento, un registro de las banderas
de estado del procesador (EFLAGS), y un apuntador de instrucciones (EIP).
Figura2–9 Registros básicos de ejecución de un programa de los procesadores IA-32.
#3 33 $3 %)0 %&,!'3 2EGISTROS %!8 %"8 %#8 %$8 2EGISTROS %3 &3 '3 %"0 %30 %3) %$)
Registros de propósito general Los registros de propósito general se utilizan principalmente para las operaciones aritméticas y el movimiento de datos. Como se muestra en la siguiente fi gura, cada registro puede direccionarse como un valor individual de 32 bits, o como dos valores de 16 bits.
AH AL 16 bits 8 AX EAX 8 32 bits 8 bits 8 bits
Hay partes de algunos registros que pueden direccionarse como valores de 8 bits. Por ejemplo, el regis- tro EAX de 32 bits tiene una mitad inferior de 16 bits llamada AX. A su vez, el registro AX tiene una mitad
2.2 Arquitectura del procesador IA-32 35
superior de 8 bits llamada AH, y una mitad inferior de 8 bits llamada AL. La misma relación de traslape existe para los registros EAX, EBX, ECX y EDX:
32 bits 16 bits 8 bits (superior) 8 bits (inferior)
EAX AX AH AL
EBX BX BH BL
ECX CX CH CL
EDX DX DH DL
El resto de los registros de propósito general sólo tienen nombres específi cos para sus 16 bits inferiores. Por lo general, los registros de 16 bits que se muestran aquí se utilizan cuando se escriben programas en modo de direccionamiento real:
32 bits 16 bits
ESI SI
EDI DI
EBP BP
ESP SP
Usos especializados Algunos registros de propósito general tienen usos especializados:
• EAX es el registro que utilizan de manera automática las instrucciones de multiplicación y división. A menudo se le conoce como el registro acumulador extendido.
• La CPU utiliza de manera automática a ECX como su contador de ciclo.
• ESP direcciona datos en la pila (una estructura de memoria del sistema). Se utiliza raras veces para operaciones aritméticas o de transferencia de datos ordinarias. A menudo se le conoce como el registro
apuntador de pila extendido.
• ESI y EDI son los registros que utilizan las instrucciones de transferencia de memoria de alta velocidad. Algunas veces se les conoce como registros índice de origen extendido, e índice de destino extendido. • EBP es el registro que utilizan los lenguajes de alto nivel para hacer referencia a los parámetros de funcio-
nes y las variables locales en la pila. No debe utilizarse para operaciones aritméticas o de transferencia de datos ordinarias, excepto en un nivel avanzado de programación. A menudo se le conoce como el registro
apuntador de estructura extendido.
Registros de segmento En el modo de direccionamiento real, los registros de segmento indican las direcciones base de las áreas preasignadas de memoria, conocidas como segmentos. En el modo protegido, los registros de segmento guardan apuntadores a tablas de descriptores de segmento. Algunos segmentos guardan instrucciones de un programa (código), otros guardan variables (datos), y otro segmento llamado
segmento de pila guarda las variables de funciones locales y los parámetros de funciones.
Apuntador de instrucciones El registro EIP, o apuntador de instrucciones, contiene la dirección de la siguiente instrucción a ejecutar. Ciertas instrucciones de máquina manipulan a EIP, para que el programa se bifurque hacia una nueva ubicación.
Registro EFLAGS El registro EFLAGS (o simplemente Flags) consiste en bits binarios individuales que controlan la operación de la CPU, o que refl ejan el resultado de alguna operación de la CPU. Algunas ins- trucciones evalúan y manipulan las banderas individuales del procesador.
Una bandera se activa cuando es igual a 1; se desactiva (o borra) cuando es igual a 0.
Banderas de control Las banderas de control controlan la operación de la CPU. Por ejemplo, pueden hacer que la CPU salga de un ciclo después de ejecutar cada instrucción, generar una interrupción cuando se detecta un desbordamiento aritmético, entrar al modo 8086 virtual y entrar al modo protegido.
Los programas pueden activar bits individuales en el registro EFLAGS para controlar la operación de la CPU. Algunos ejemplos son las banderas de Dirección y de Interrupción.
Banderas de estado Las banderas de estado refl ejan los resultados de las operaciones aritméticas y ló- gicas que realiza la CPU. Estas banderas son: Desbordamiento, Signo, Cero, Acarreo Auxiliar, Paridad y Acarreo. Sus abreviaturas se muestran justo después de sus nombres:
• La bandera Acarreo (CF) se activa cuando el resultado de una operación aritmética sin signo es demasia- do grande para caber en el destino.
• La bandera Desbordamiento (OF) se activa cuando el resultado de una operación aritmética con signo es demasiado grande o pequeño para caber en el destino.
• La bandera Signo (SF) se activa cuando el resultado de una operación aritmética o lógica genera un re- sultado negativo.
• La bandera Cero (ZF) se activa cuando el resultado de una operación aritmética o lógica genera un resul- tado de cero.
• La bandera Acarreo auxiliar (AC) se activa cuando una operación aritmética produce un acarreo del bit 3 al bit 4, en un operando de 8 bits.
• La bandera Paridad (PF) se activa si el byte menos signifi cativo en el resultado contiene un número par de bits que sean 1. En caso contrario, PF está desactivada. En general, se utiliza para comprobar errores cuando existe la posibilidad de que los datos estén alterados o corruptos.
Registros del sistema
Los procesadores IA-32 tienen una variedad de registros importantes del sistema. MS-Windows sólo permite el acceso a estos registros a los programas que se ejecutan en el nivel más alto de privilegio (nivel 0). El núcleo (kernel) del sistema operativo es uno de estos programas. Los registros del sistema son:
• IDTR (Registro de tabla de descriptores de interrupciones): este registro contiene la dirección de la Tabla de descriptores de interrupciones, la cual proporciona los medios para manejar las interrupciones (rutinas del sistema, diseñadas para responder a eventos tales como los generados por el teclado y el ratón). • GDTR (Registro de tabla de descriptores globales): el registro GDTR contiene la dirección de la Tabla
de descriptores globales, una tabla que contiene apuntadores a los segmentos de estado de las tareas y tablas de descriptores locales de los programas.
• LDTR (Registro de tabla de descriptores locales): el registro LDTR contiene apuntadores al código, los datos y la pila de los programas que se están ejecutando en un momento dado.
• Registro de tareas: este registro contiene la dirección del TSS (Segmento de estado de tarea) para la tarea que se está ejecutando en un momento dado.
• Registros de depuración: los registros de depuración permiten que los programas establezcan puntos de interrupción al momento de depurar los programas.
• Registros de control CR0, CR2, CR3, CR4: los registros de control contienen banderas de estado y campos de datos que controlan las operaciones a nivel del sistema, como la conmutación, la paginación y la habilitación de la memoria caché (el registro CR1 no se utiliza).
• Registros específi cos del modelo: estos registros se utilizan para tareas del sistema operativo tales como el monitoreo del rendimiento y la comprobación de la arquitectura de la máquina. Su uso varía, depen- diendo de los distintos procesadores IA-32.
En el capítulo 11 hablaremos sobre los registros GDTR y LDTR, en el contexto de la administración de memoria en modo protegido. Los programas de aplicaciones no pueden acceder a los registros del sistema. Como este libro se centra en los programas de aplicaciones en lenguaje ensamblador, no utilizaremos los registros del sistema.
2.2.3 Unidad de punto fl otante
La unidad de punto fl otante (FPU) de los procesadores IA-32 realiza operaciones aritméticas de punto fl otan- te, de alta velocidad. Hace tiempo se requería un chip coprocesador separado para esto. A partir del Intel486
2.2 Arquitectura del procesador IA-32 37
a la fecha, la FPU está integrada en el chip procesador principal. Hay ocho registros de datos de punto fl o- tante en la FPU, cuyos nombres son: ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6) y ST(7). El resto de los registros de control y de apuntadores se muestran en la fi gura 2-10.
Figura 2–10 Registros de la unidad de punto fl otante.
2EGISTROS