Volver a la página principal
martes 4 febrero 2025
26

Tipos de Registros en x86 (32 bits)

En la arquitectura x86 de 32 bits hay varios tipos de registros:

1. Registros de Propósito General (GPR - General Purpose Registers)

Son usados para almacenar datos y realizar operaciones matemáticas o lógicas. En modo de 32 bits, hay 8 registros principales:

Registro Uso común
EAX (Acumulador) Operaciones aritméticas y de entrada/salida
EBX (Base) Base para acceder a estructuras de datos
ECX (Contador) Contador para bucles (loop) y operaciones en cadena
EDX (Datos) Operaciones de multiplicación y división
ESI (Índice fuente) Direcciones de origen en operaciones con cadenas
EDI (Índice destino) Direcciones de destino en operaciones con cadenas
EBP (Base Pointer) Apunta al inicio del stack frame de una función
ESP (Stack Pointer) Apunta a la cima de la pila

Nota:

Cada registro de 32 bits tiene versiones más pequeñas:

  • EAX (32 bits)AX (16 bits)AH y AL (8 bits cada uno)
  • EBX (32 bits)BX (16 bits)BH y BL (8 bits cada uno)

Ejemplo:

mov eax, 0x12345678   ; Carga 32 bits en EAX
mov ax, 0x5678        ; Solo modifica los 16 bits inferiores
mov al, 0x78         ; Solo los 8 bits bajos

2. Registros de Segmento (Segment Registers)

En el modo real (16 bits) y en algunos usos en modo protegido, estos registros manejan segmentos de memoria.

Registro Uso
CS (Código) Apunta al segmento donde está el código ejecutable
DS (Datos) Apunta al segmento de datos
SS (Stack) Apunta al segmento de la pila
ES (Extra) Segmento de datos adicional
FS/GS Segmentos adicionales para acceso a estructuras del sistema

En modo protegido (32 bits), estos registros se usan con descriptores de segmentos.

3. Registros de Control (Control Registers)

Se usan para gestionar el estado del procesador.

Registro Función
CR0 Control general del procesador (habilitar paginación, modo protegido)
CR2 Dirección de página fallida en fallos de página
CR3 Dirección de la tabla de páginas (paginación)
CR4 Control de características avanzadas (SSE, PAE, etc.)

4. Registros de Estado/Banderas (EFLAGS)

Controlan el flujo del programa almacenando banderas de estado.

Bandera Descripción
ZF (Zero Flag) Se activa si el resultado de una operación es cero
CF (Carry Flag) Se activa si hay un acarreo en una operación matemática
SF (Sign Flag) Indica si el resultado es negativo
OF (Overflow Flag) Se activa si hay desbordamiento en una operación
PF (Parity Flag) Indica si el número de bits 1 en el resultado es par
IF (Interrupt Flag) Habilita/deshabilita interrupciones

Ejemplo:

cmp eax, ebx  ; Compara eax con ebx
je etiqueta   ; Salta si la bandera ZF está activada (si son iguales)

5. Registros de Punto Flotante (FPU - x87)

Usados en operaciones de coma flotante.

Registro Uso
ST(0) - ST(7) Pila de registros para cálculos de punto flotante

Ejemplo:

fld dword ptr [miNumero]  ; Carga un número en ST(0)
fadd st(0), st(1)         ; Suma ST(0) y ST(1)
fstp dword ptr [resultado] ; Guarda el resultado

6. Registros MMX/SSE/AVX (Extensiones SIMD)

  • MMX (MM0 - MM7): 64 bits, optimizado para multimedia.
  • SSE (XMM0 - XMM7): 128 bits, operaciones vectoriales.
  • AVX (YMM0 - YMM15): 256 bits, cálculos en paralelo.

Ejemplo con SSE:

movaps xmm0, [vector1]  ; Carga un vector en xmm0
movaps xmm1, [vector2]  ; Carga otro vector en xmm1
addps xmm0, xmm1        ; Suma los dos vectores (4 números en paralelo)
movaps [resultado], xmm0 ; Guarda el resultado
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer