Você está na página 1de 6

http://learnassembler.com/regseg.

html

Registros
Los registros se pueden clasificar como: Registros de propsito general. Almacenan datos y estn disponibles para ser usados por el programador. Registros de segmento. Estos registros permiten direccionar la memoria. Apuntador de instruccin. Este es un registro especial que apunta a la siguiente instruccin a ejecutar. Registros de punto flotante. Como su nombre lo indica estos registros se utilizan para realizar operaciones de punto flotante.

Registros de propsito general


Los registros de propsito general se utilizan para almacenar datos temporalmente. Debido a que estos registros han evolucionado desde una mquina de 8 bits (el 8080) un grupo de registros an se puede utilizar con un tamao de 8 bits para mantener compatibilidad con toda la lnea de procesadores. An cuando estos registros pueden mantener cualquier tipo de datos, algunos tienen cierta funcionalidad especfica o son usados de manera especial por algunas instrucciones. La siguiente tabla muestra los nombres de los registros y sus usos ms comunes:

Registro
eax ebx ecx edx edi esi esp ebp

Descripcin
Acumulador para operaciones aritmetico lgicas Registro base para acceder a memoria Contador para algunas instrucciones Registro de datos usado para algunas operaciones de entrada/salida Apuntador a destino para operaciones con cadenas de caracteres Apuntador a origen para operaciones con cadenas de caracteres Apuntador de pila Apuntador de marco de pila

En gas los registros se denotan anteponiendo el smbolo de % al nombre del registro. Los registros %eax, %ebx, %ecx y %edx pueden ser direccionados como registros con tamaos de 8, 16 o 32 bits cambiando su nomenclatura de acuerdo al

tamao. De forma similar, los registros %edi, %esi, %ebp y %esp se pueden direccionar como registros de 16 o 32 bits. El tamao del registro %eax se puede visualizar como:
%eax 32 bits %ax 16 bits %ah 8 bits %al 8 bits

De igual manera el tamao del registro %edi se puede ver como:


%edi 32 bits %di 16 bits

Registros de segmento
Los registros de segmento se utilizan para referenciar reas de memoria. La plataforma IA-32 permite direccionar la memoria segn el modelo de memoria lineal o el modelo de memoria segmentada. El modelo de memoria lineal presenta todo el espacio de direcciones de la memoria como un espacio contiguo. Todas las instrucciones, los datos y la pila se encuentran en el mismo espacio de direcciones de memoria. Cada posicin de memoria se referencia mediante una direccin especfica llamada "direccin lineal". El problema del enfoque anterior consiste en que todos los datos se encuentran mezclados entre si y a la vez distribuidos a lo largo de todo el espacio de direcciones memoria, lo cual hace que su manejo sea engorroso e ineficiente. El modelo de memoria segmentada resuelve este problema dividendo el espacio de direcciones en segmentos independientes entre si. Cada segmento contiene un tipo especfico de informacin, es decir el cdigo (las instrucciones) se ubica en un segmento, los datos en otro y la pila en un tercer segmento. Las posiciones de memoria en los segmentos se definen por direcciones lgicas. Una direccin lgica est compuesta por una direccin de segmento y un desplazamiento. El procesador traduce una direccin lgica a una direccin lineal. Nota: An cuando la siguiente informacin es muy til para aprender acerca de cmo est estructurada la memoria no es imprescindible para comenzar a programar en lenguaje ensamblador. Si quieres, puedes pasar directamente al tema acerca de las banderas. Los procesadores de la familia Intel poseen un grupo de registros creados con el fin de soportar el modelo de memoria segmentada, los cuales son conocidos como registros de segmento:

Registro de segmento

Descripcin

cs ds ss es fs gs

Segmento de cdigo Segmento de datos Segmento de pila Apuntador de segmento extra Apuntador de segmento extra Apuntador de segmento extra

El contenido de los mismos es interpretado de diferente forma dependiendo si el procesador se encuentra trabajando enmodo real o en modo protegido. Los procesadores ms antiguos de esta familia trabajaban en modo real, en el cual un registro de segmento simplemente contena una direccin lineal que sealaba el comienzo de un segmento. De esta forma, si un programa intentaba acceder a un dato ubicado en el desplazamiento "D" del segmento apuntado por el registro ds, la traduccin a una direccin lineal consista en tomar el contenido de dicho registro, multiplicarlo por 0x10 (esto es la direccin de inicio del segmento de datos en uso) y sumarle el desplazamiento "D". Por ejemplo:

Sin embargo, con el paso de los aos este enfoque result ser insuficiente, ya que por ejemplo, no haba forma de determinar si un desplazamiento causaba que la direccin lineal cayera fuera del segmento. Para solventar ste y otros problemas de seguridad, se implement a partir del procesador 80286 el modo protegido. En el modo protegido, el registro de segmento ya no contiene la direccin base del segmento, sino un selector de segmento, el cual permite seleccionar un descriptor de segmento. Este ltimo no es ms que una estructura de ocho bytes, la cual posee un formato definido y contiene entre otras cosas la direccin base del segmento en cuestin:

Descriptor de segmento del 80286

Descriptor de segmento del 80386 y posteriores De esta manera, la direccin base del segmento pasa ahora a ocupar 24 32 bits (dependiendo del procesador), en contraposicin a los 16 bits que pueden almacenarse en el registro de segmento en modo real. Adicionalmente se cuenta con un campo de lmite de segmento que puede ocupar 16 20 bits, lo que determina el tamao mximo de los segmentos en 64KB o 1MB. El descriptor de segmento del 80386 incluye una bandera (G) que indica que el campo lmite debe ser multiplicado por 4K, permitiendo entonces la existencia de segmentos entre 4KB y 4 GB. El descriptor de 80386 incluye dos banderas adicionales. La primera de ellas (D/B), permite determinar si se est trabajando en modo de 16 32 bits. La segunda (AVL) puede ser utilizada por los sistemas operativos para marcar el segmento descrito como disponible o no (Available). El campo de permisos de acceso posee los siguientes subcampos:

El campo RPL (Request Privilege Level) permite indicar el nivel de privilegio con el cual se est accediendo al segmento, siendo 00 el nivel ms bajo y 11 el ms alto. Este valor debe ser mayor o igual al del campo DPL del descriptor correspondiente. Adicionalmente el campo TI (Table Indicador) es una bandera que permite escoger la tabla en la cual ser seleccionado el descriptor de segmento con los bits restantes (0 = tabla de descriptores globales, 1 = tabla de descriptores locales). Los descriptores globales son utilizados por todos los programas y a menudo se les conoce como descriptores de sistema, mientras que los descriptores locales son exclusivos de un programa particular y a menudo se les conoce como descriptores de aplicacin. De esta forma, el mismo acceso a memoria que ejemplificamos anteriormente, se llevara a cabo de la siguiente manera en modo protegido:

En primer lugar, el descriptor de segmento indica que debe seleccionarse el descriptor nmero 2 (Selector = 0000000000010) de la tabla de descriptores locales (TI = 1) con un nivel de privilegio de 1 (RPL = 01). De esta manera, se procede a interpretar los ocho bytes correspondientes al mismo en la TDL. Dicho descriptor indica que la direccin base del segmento en cuestin es la 0x00020000, y que el tamao del mismo es de 0x0A000, lo que quiere decir que el lmite del mismo corresponde a la direccin 0x2A000. Dado que el RPL es mayor que el DPL (00) se permite el acceso al segmento. De manera similar, se verifica que la direccin lineal resultante (0x20000 + 0x8A00) se encuentra dentro de los lmites del segmento. El proceso de traduccin de direcciones es un poco ms complejo de lo que puede intuirse a partir de esta breve explicacin, involucrando el uso de una cach para agilizar el acceso a las tablas de descriptores. Es importante tener en mente tambin que la memoria puede estar paginada, en cuyo caso ser necesario transformar las direcciones lineales (virtuales) a direcciones fsicas o reales. Por ltimo, cabe acotar que los registros ES, FS y GS apuntan a segmentos de datos (o seleccionan descriptores de segmentos de datos).

Registro apuntador de instruccin


El registro apuntador de instruccin (eip) o contador de programa contiene la direccin de la prxima instruccin a ejecutarse.

Registros de punto flotante


Son ocho registros los cuales son tratados como una pila. Se denominan %st(0), %st(1), %st(2), etc. %st(0) se ubica en el tope de la pila.

Banderas
Las banderas proveen una manera de obtener informacin acerca de del estado actual de la mquina y el resultado de procesamiento de una instruccin. La plataforma IA-32 utiliza un registro de 32 bits llamado EFLAGS que contiene las banderas. Las banderas ms comunmente usadas son las siguientes:

Bandera Bit
CF PF AF ZF SF DF OF 0 2 4 6 7

Nombre
Bandera de acarreo (carry flag) Bandera de paridad (parity flag) Bandera de acarreo auxiliar (adjust flag) Bandera de cero (zero flag) Bandera de signo (sign flag)

10 Bandera de direccin (direction flag) 11 Bandera de desbordamiento (overflow flag)

La bandera de acarreo se activa cuando se produce acarreo en una suma o multiplicacin, o un "prstamo" en una resta entre nmeros sin signo. La bandera de paridad se usa para indicar si el resultado, en un registro, de una operacin matemtica es vlido. La bandera de paridad se usa para indicar si el resultado, en un registro, de una operacin matemtica es vlido. La bandera de acarreo auxiliar se utiliza en operaciones matemticas con nmeros decimales codificados en binario (BCD). Se activa si hay acarreo presente. La bandera de cero se activa si el resultado de una operacin aritmtico lgica es cero. La bandera de signo muestra el bit ms significativo del resultado de una operacin, el cual denota el signo del nmero. La bandera de direccin controla la seleccin de autoincremento (D=0) o autodecremento (D=1) de los registros %edi o %esi durante las operaciones con cadenas de caracteres. La bandera de direccin slo se utiliza con las instrucciones para el manejo de cadenas de caracteres. La bandera de desbordamiento se utiliza en la aritmtica de enteros con signo cuando un nmero sobrepasa la capacidad de representacin del registro.

Você também pode gostar