ASM Los Registros

From Movaxes

(Difference between revisions)
(Registros de Segmentos)
 
Line 1: Line 1:
-
=Registros=
+
Esta página fue movida a [http://wiki.todoprogra.com/index.php?title=Registros Registros en Ensamblador] junto a toda la wiki :)
-
==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:
+
-
<pre>
+
-
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)
+
-
</pre>
+
-
En donde la '''L = Low''' y la '''H = High''' y la '''E = Extended (extendido)'''.<br>
+
-
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.
+
-
 
+
-
 
+
-
<br>
+
-
<br>
+

Current revision as of 18:21, 6 April 2007

Esta página fue movida a Registros en Ensamblador junto a toda la wiki :)

Personal tools