You are on page 1of 58

Arquitectura IA-32

Antecedentes

Ao 1978: Se lanza la familia iaPx86


Procesador 8086: 16 bits 8 meses despus: Procesador 8088. dem 8086 pero bus externo = 8 bits
Compromiso pblico de compatibilidad ascendente. Procesador base de la primer IBM PC

Ao 1982: Procesador 80286


Arquitectura de 16 bits Capacidad de multitasking Sin suficientes recursos de hardware para hostear un UNIX clsico

Antecedentes (2)

Ao 1985: Procesador 80386. Presentacin de la Arquitectura IA-32 Hasta el presente mas de 15 modelos de procesadores compatibles y 7 microarquitecturas diferentes.

Modos de operacin

Real Protegido Virtual 8086 Mantenimiento del Sistema (SMM) Extended Memory 64 Technology (IA-32e)
Modo Compatibilidad (32 bits) Modo 64 bits

Modos de operacin (2)

Modo Real: Entorno de ejecucin en 16 bits

Cualquier procesador IA-32 arranca en este modo de operacin. Presenta de manera exacta el entorno de ejecucin de un 8086. Razones de esto: Compatibilidad. Administracin de memoria por medio de segmentos. No posee paginacin

Administracin de memoria Generalidades

Existen dos formas de organizar la memoria de un computador


En segmentos En pginas

Segmentacin

Los segmentos son de tamao variable No necesariamente son contiguos. Se pueden solapar o estar disjuntos. Se direcciona por medio de un registro base mas otro que determina un desplazamiento u offset.

Un Contador de Programa a travs de un segmento de cdigo. Un Stack Pointer a travs de un Segmento de pila

Segmentacin (2)

Ventajas.
Manteniendo fijo el valor del segmento el movimiento a travs del mismo se realiza solo con el registro de desplazamiento. Reubicacin en memoria simple de cdigo, pilas y bloques de datos.

Desventajas
Es engorroso administrar memoria con bloques de tamao variable

Paginacin

Tamao fijo. Ej: 4 Kbytes No se solapan. Ventajas.


Administracin simple de la memoria (tamao fijo)

Desventajas
Si requiero memoria para una variable de 1 byte el sistema me asigna una pgina completa. Si se requiere reubicar cdigo el algoritmo, en principio, es complejo.

Administracin de Memoria en x86

Al principio Intel defini organizar el espacio de direccionamiento de la Familia iAPx86 en segmentos. El compromiso de compatibilidad at a los siguientes procesadores a mantener este esquema. Los procesadores 8086 y 8088 definieron 4 registros de segmento para almacenar hasta 4 selectores de segmento. Al trabajar con registros de 16 bits los segmentos tienen a lo sumo 64K de tamao.

Modo Real: Entorno de ejecucin en 16 bits


El Modelo de 32 bits de Registros Generales El Modelo de 32 bits de Registros Generales est disponible en Modo Real est disponible en Modo Real

Direccionamiento en modo real


Direccin Lgica

15

15 0
Desplazamiento

Selector
16 19 0 Direccin Base

19 0 Direccin Fsica Al Bus de Address

Reglas de Seleccin de Segmentos

Modo protegido

Modo de trabajo no default, pero natural para este tipo de procesadores Se setea por software desde Modo Real Implementa una alta capacidad de direccionamiento de memoria

4 Gbytes hasta el procesador Pentium y Pentium MMX 64 Gbytes en los procesadores Pentium Pro en adelante (activando por software extensiones de memoria)

Modo protegido (2)


Empleado por sistemas operativo modernos. 32 bits Permite el modo Virtual 8086 para ejecutar un programa desarrollado para un procesador 8086/8088 como una tarea en modo protegido.

Modo Mantenimiento del Sistema (SMM)

Modo de trabajo para realizar operaciones especiales como Manejo de energa o seguridad. Introducido por los procesadores 80386SL y 80486SL. Se ingresa por medio de:

Seal de hardware Pin SMI# Mediante un mensaje SMI recibido desde el APIC (Advanced Programmable Interrupt Controller)

Modo Mantenimiento del Sistema (2)

Cuando ingresa a este estado el procesador salva el contexto de la tarea en ejecucin. Pasa a ejecutar un software especfico para este modo Cuando termina la ejecucin del cdigo SMM, retorna retomando la tarea interrumpida en el punto exacto en que la abandon.

Modo IA-32e - Modo Compatibilidad

Permite ejecutar cualquier programa desarrollado en una arquitectura IA-32 sin necesidad de recompilar. Apto para escribir cdigo de sistemas operativos de 64 bits que permitan migrar el cdigo binario existente sin re-compilar el cdigo La arquitectura de programacin es el misma que en IA-32

Los mismos registros El mismo espacio de direccionamiento de memoria

Modo IA-32e - Modo Compatibilidad (2)

No compatible con

Tareas que ejecutan con modo Virtual 8086 Tareas manejadas por hardware.

Modo IA-32e - Modo 64 bits

Se referencia normalmente como modo 64 bits Las aplicaciones acceden a un espacio lineal de direcciones de 64 bits, pero fsicamente 40 bits Los registros de propsito general se extienden a 64 bits 16 registros SIMD de 128 bits Por default el tamao de operando es 32 bits El prefijo REX permite trabajar con operandos de 64 bits extendiendo las instrucciones existentes a esta capacidad de operandos

Modo IA-32e - Modo 64 bits (2)

No usa segmentacin slo paginacin Los segmentos son FLATS, pierden sentido los registros selectores

Registros en IA-32

Registros en IA-32 (2)

Registros en IA-32 (3)

Registro EFLAGS

Flags en IA-32e
Es igual que en IA-32 En vez de llamarse EFLAGS se llama RFLAGS

Flags en IA-32e
Es igual que en IA-32 En vez de llamarse EFLAGS se llama RFLAGS

Registros de propsito general en IA-32e


32 bits: EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, R8D a R15D 64 bits: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8 a R15 Con el prefijo REX se accede a mas cantidad de registos.

Registros de propsito general en IA-32e (2)

Modos de direccionamiento

Implcito

Clc (Clear Carry Flag) mov eax,0x20 sub eax,edx add [2C00h],ecx

Inmediato

Registro

Desplazamiento (Directo)

Modos de direccionamiento indirecto

Base

inc [edx] push ebp ;resguardamos ebp mov ebp,esp ;lo apuntamos a la pila mov eax,[ebp+12] ;extraemos el parmetro que est ;12 bytes hacia el fondo de la pila.

Base + desplazamiento

Modos de direccionamiento indirecto (2)

Indexado

mov mov mas: and inc loop and

ecx, size_tabla esi, tabla [esi],0xFE esi mas [esi + 4],0xFE

Indexado + desplazamiento

Modos de direccionamiento indirecto (3)

Base + Indexado * escala

mov ebx,0x0B8000; Base buffer video. col: mov ecx, size_row xor edi, edi row: mov [ebx + edi * 2 ],70h ; Video Inverso inc edi ; edi apunta al siguiente elemento ; de 2 bytes loop row ; si CX = 0 complet fila add ebx, 160 cmp ebx, 0x0B9000 ; fin del buffer? jle col

Clculo de la direccin efectiva

Tipos de datos

Datos en memoria

Nmeros enteros

Nmeros de punto flotante (IEEE 754)

Set de instrucciones

Leer captulo 5 del IA-32 Intel Architecture Software Developer's Manual (Volume 1: Basic Architecture)

Movimiento de Datos

Movimientos (MOV) Movimiento Condicional (CMOV) Exchange


XCHG BSWAP CMPXCHG CMPXCHG8B

Movimiento de Datos (2)

Manipulacin de la pila

PUSH y POP PUSHA y POPA ENTER y LEAVE

Conversin de tipos (CBW, CWD, CWDE)

Aritmtica Binaria

Suma y Resta. (ADD, ADC, SUB, SBB) Incremento y decremento (INC, DEC) Comparacin (CMP, NEG) Multiplicacin y Divisin (MUL, DIV, IMUL, IDIV)

Aritmtica Decimal

Ajustes decimales para nmeros BCD empaquetados


DAA DAS

Ajustes decimales para nmeros BCD Desempaquetados


AAA AAS AAM AAD

Lgicas

AND OR XOR

Shift y Rotate

SHR SAR SHL/SAL SHRD SHLD ROL ROR RAL RAR

Bits y Bytes

BT, BTS, BTR, BTC BSF, BSR TEST SET

Transferencias

Incondicionales

JMP, CALL, RET, INT, IRET Jcc (cc = condicin) LOOP JECXZ JCXZ INTO

Condicionales

Strings

MOVSB, MOVSW, MOVSD SCAB, SCAW, SCAD STOSB, STOSW, STOSD LODSB, LODSW, LODSD CMPSB, CMPSW, CMPSD Prefijos de repeticin

REP REPZ, REPE REPNZ, REPNE

Entrada / Salida
IN OUT INSB,

INSW, INSD OUTSB, OUTSW, OUTSD

Control de Flags

Carry

STC, CLC, CMC CLD, STD LAHF, SAHF, PUSHF, POPF, PUSHFD, POPFD CLI, STI

Direction Flag

Registro EFLAGS

Flag de Interrupciones

Registros de segmento

MOV y POP

Cuando el operando destino es ES, DS, SS, FS, o GS. Nunca CS

JMP y CALL far. RET far INT, IRET BOUND Carga de punteros far

LDS, LSS, LES, LGS, LFS

Miscelneas

LEA XLAT, XLATB CPUID NOP UD2

Llamadas a subrutinas

Se realizan mediante la instruccin CALL Cuando finaliza la subrutina se ejecuta RET para volver al flujo de programa desde el que se realiz la llamada va CALL. El stack es un espacio lineal de direcciones. Las operaciones son con words o dwords dependiendo del tipo de segmento definido (16 o 32 bits) El stack debe estar alineado a word o dword segn el tipo de segmento.

Stack en llamadas a subrutina

Llamadas FAR y NEAR

Referencias

Intel 64 and IA-32 Architecture Software Developers Manual Volume 1: Basic Architecture.

Captulos 1 a 5

Intel 64 and IA-32 Architecture Software Developers Manual Volume 2A: Instruction Set Reference A-M Intel 64 and IA-32 Architecture Software Developers Manual Volume 2B: Instruction Set Reference N-Z

You might also like