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