En la arquitectura x86 de 32 bits hay varios tipos de registros:
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:
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
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.
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.) |
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)
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
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
Jorge García
Fullstack developer