|
|
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>
| + | |