ASM Los Registros
From Movaxes
Contents |
Registros
Introducción
El CPU tiene varias localidades especiales para almacenamiento temporal de información, esto sirve para procesar los datos con mayor velocidad (menos ciclos de máquina) en lugar de tener que acceder a la memoria.
Registros de propósito general
La x86 tiene 4 registros de propósito general (GPR: General Purpose Registers) de 32bits. Estos nos sirven para almacenar cualquier información dependiendo del modo de direccionamiento, pero también tienen su uso especial en algunas ocaciones.
En lugar de su dirección se les da un nombre para poder facilitar las cosas, los nombres son: EAX,EBX,ECX,EDX. Estos registros pueden ser direccionados de estas formas:
EAX (32bits) = AX(16bits) = AH(8bits) y AL(8bits) EBX (32bits) = BX(16bits) = BH(8bits) y BL(8bits) ECX (32bits) = CX(16bits) = CH(8bits) y CL(8bits) EDX (32bits) = DX(16bits) = DH(8bits) y DL(8bits)
En donde la L = Low y la H = High y la E = Extended (extendido).
Si se direcciona un registro de 8bits (AH por ejemplo), solo se modifica esa parte del registro, permaneciendo lo demás intacto.
EAX (Acumulador)
El acumulador se usa en operaciones aritméticas.
EBX (Indice de Base)
Se usa también como un puntero a una locación de memoria localisada en el segmento de datos (DS).
ECX (Contador)
Usado por instrucciones como contador por varias instrucciones.
EDX (Datos)
Usado en operaciones aritméticas conteniendo parte del producto de una multiplicación o parte del dividendo en una división.
Otros registros de propósitos múltiples
Estos registros pueden usarse como registros de propósito general también, o para su uso específico.
EBP (Puntero de base)
Apunta a una localidad de memoria para transferir datos. Puede direccionarse como BP o EBP.
EDI (Indice de destino)
Direcciona datos del destino de las cadenas para instrucciones de cadenas. Puede direccionarse como DI o EDI.
ESI (Indice de fuente)
Direcciona datos del origen de las cadenas para instrucciones de cadena. Puede direccionarse como SI o ESI.
Registros de Segmentos
Los 6 registros se segmentos (Segment Registers) son:
- SS : Stack Segment. Puntero al segmento de pila (stack).
- CS : Code Segment. Puntero al segmento de código
- DS : Data Segment. Puntero al segmento de datos
- ES : Extra Segment. Puntero a un segmento de datos extra
- FS : F Segment. Puntero a otro segmento de datos extra (complementario)
- GS : G Segment. Puntero a otro segmento de datos extra (complementario)
Puntero a Instrucción (EIP)
Direcciona la instrucción siguiente de una sección de memoria definida como un segmento de código (CS). Es IP cuando se está en modo real y EIP en modo protegido. Puede modificarse con una instrucción de salto o la llamada a una subrutina.
Apuntador de Pila
Direcciona el área de la pila (stack). La pila almacena datos por medio de este apuntador. SP para 16bits y ESP para 32bits.
Registro EFLAGS
Este registro de 32 bits es un vector que contiene información sobre diversas operaciones y controla el estado del procesador, pueden contener un solo valor binario (0/1).
Las banderas (Flags) son:
- bit 0 : Acarreo = Si hay acarreo de operaciones de suma o resta. También es usado por programas para condiciones de error.
- bit 2 : Paridad = El valor lógico cero indica una paridad impar, y el valor lógico de uno indica paridad par.
- bit 4 : Ajuste = El acarreo de operaciones en números Binary Code Decimal (BCD).
- bit 6 : Cero = Si el resultado de una operación es cero (0).
- bit 7 : Signo = Si el resultado de una operación es negativo.
- bit 8 : Trampa = Habilita la función de depuración, si está habilitada el procesador interrumpe el flujo del programa bajo las condiciones indicadas por los registros de depuración y los de control.
- bit 9 : Interrupción = Indica si los interruptores están habilitados. Es controlado por las instrucciones CLI y STI, para indicar la operación de la terminal de entrada INTR (Solicitud de interrupción).
- bit 10: Dirección = Indica si se está usando el modo de incremento o decremento para los registros DI y SI durante instrucciones de cadena. Si la bandera está = 1 los registros decrecen automáticamente, si está = 0 aumentan. Se activa con STD y se desactivo con CLD.
- bit 11: Desbordamiento = Ocurre al sumar o restar números con signo al excederse la capacidad.
- bit 12: Nivel de privilegio de E/S = Selecciona el nivel de privilegio para la Entrada y Salida.
- bit 14: Tarea Anidada = Indica que la tarea actual está anidada en otra, se activa cuando la tarea es anidada por un programa. Usado en Modo Protegido.
- bit 16: Resumir = Utilizado durante depuración para reanudar la siguiente instrucción.
- bit 17: Modo Virtual = Indica si se está en modo Virtual-8086 en Modo protegido.
- bit 18: Verificación de alineación = Se activa al direccionar una palabra o doble palabra en una dirección que no es par o múltiplo de 4.
- bit 19: Interrupción Virtual = Copia del bit de bandera de interrupcion.
- bit 20: Interrupción Virtual Pendiente = Da información sobre una interrupción en modo virtual.
- bit 21: Identificación = Señala si el procesador acepta onstrucciones CPUID.