Arquitectura IA-32 Ing. Marcelo Doallo Marzo 2013 Ing. Marcelo Doallo Arquitectura IA-32 Antecedentes Año 1978: Se lanza la familia iaPx86 Procesador 8086: 16 bits 8 meses después: Procesador 8088. Ídem 8086 pero bus externo = 8 bits Compromiso público de compatibilidad ascendente Procesador base de la primer IBM PC Año 1982: Procesador 80286 Arquitectura de 16 bits Capacidad de multitasking Sin suficientes recursos de hardware para hostear un UNIX clásico Ing. Marcelo Doallo Arquitectura IA-32 Antecedentes (2) Año 1985: Procesador 80386. Presentación de la Arquitectura IA-32 Hasta el presente mas de 15 modelos de procesadores compatibles y 7 microarquitecturas diferentes. Ing. Marcelo Doallo Arquitectura IA-32 Modos de operación Real Protegido Virtual 8086 Mantenimiento del Sistema (SMM) Extended Memory 64 Technology (IA-32e) Modo Compatibilidad (32 bits) Modo 64 bits Ing. Marcelo Doallo Arquitectura IA-32 Modos de operación (2) Ing. Marcelo Doallo Arquitectura IA-32 Modo Real: Entorno de ejecución en 16 bits Cualquier procesador IA-32 arranca en este modo de operación Presenta de manera exacta el entorno de ejecución de un 8086 Razones de esto: Compatibilidad Administración de memoria por medio de segmentos No posee paginación Ing. Marcelo Doallo Arquitectura IA-32 Administración de memoria - Generalidades Existen dos formas de organizar la memoria de un computador Por segmentos por páginas Ing. Marcelo Doallo Arquitectura IA-32 Segmentación Los segmentos son de tamaño 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 través de un segmento de código Un puntero a la pila a través de un segmento de datos Dos punteros para segmentos de datos Ing. Marcelo Doallo Arquitectura IA-32 Segmentación (2) Ventajas: Manteniendo fijo el valor del segmento el movimiento a través del mismo se realiza solo con el registro de desplazamiento Reubicación en memoria simple de código, pilas y bloques de datos Desventajas: Es engorroso administrar memoria con bloques de tamaño variable Ing. Marcelo Doallo Arquitectura IA-32 Paginación Tamaño fijo. Ej: 4 Kbytes No se solapan Ventajas: Administración simple de la memoria (tamaño fijo) Desventajas: Si requiero memoria para una variable de 1 byte el sistema me asigna una página completa Si se requiere reubicar código el algoritmo, en principio, es complejo. Ing. Marcelo Doallo Arquitectura IA-32 Administración 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 tamaño Ing. Marcelo Doallo Arquitectura IA-32 Modo Real: Entorno de ejecución en 16 bits Ing. Marcelo Doallo Arquitectura IA-32 Direccionamiento en modo real Ing. Marcelo Doallo Arquitectura IA-32 Ing. Marcelo Doallo Arquitectura IA-32 Reglas de Selección de Segmentos Ing. Marcelo Doallo Arquitectura IA-32 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) Ing. Marcelo Doallo Arquitectura IA-32 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 Ing. Marcelo Doallo Arquitectura IA-32 Modo Mantenimiento del Sistema (SMM) Modo de trabajo para realizar operaciones especiales como Manejo de energı́a o seguridad Introducido por los procesadores 80386SL y 80486SL Se ingresa por medio de: Señal de hardware Pin SMI# Mediante un mensaje SMI recibido desde el APIC (Advanced Programmable Interrupt Controller) Ing. Marcelo Doallo Arquitectura IA-32 Modo Mantenimiento del Sistema (2) Cuando ingresa a este estado el procesador salva el contexto de la tarea en ejecución Pasa a ejecutar un software especı́fico para este modo Cuando termina la ejecución del código SMM, retorna retomando la tarea interrumpida en el punto exacto en que la abandonó Ing. Marcelo Doallo Arquitectura IA-32 Modo IA-32e En este modo el procesador posee dos sub-modos: Modo Compatibilidad Modo 64 bits Ing. Marcelo Doallo Arquitectura IA-32 Modo IA-32e - Modo Compatibilidad Permite ejecutar cualquier programa desarrollado en una arquitectura IA-32 sin necesidad de recompilar Apto para escribir código de sistemas operativos de 64 bits que permitan correr código existente sin recompilar La arquitectura de programación es el misma que en IA-32 Mismos registros Mismo espacio de direccionamiento de memoria Ing. Marcelo Doallo Arquitectura IA-32 Modo IA-32e - Modo Compatibilidad (2) No compatible con: Tareas que ejecutan con modo Virtual 8086 Tareas manejadas por hardware. El procesador está en este modo cuando se accede a un segmento de código descripto de 32 bits. Ing. Marcelo Doallo Arquitectura IA-32 Modo IA-32e - Modo 64 bits Se lo denimina normalmente como modo 64 bits Las aplicaciones acceden a un espacio lineal de direcciones de 64 bits, pero fı́sicamente puede ser inferior en bits (Por Ejemplo: 40 bits) Los registros de propósito general se extienden a 64 bits 16 registros SIMD de 128 bits Ing. Marcelo Doallo Arquitectura IA-32 Modo IA-32e - Modo 64 bits (2) Por default el tamaño de operando es 32 bits El prefijo REX permite trabajar con operandos de 64 bits extendiendo las instrucciones existentes a esta capacidad de operandos No usa segmentación, sólo paginación Los segmentos son FLATS, pierden importancia los registros selectores en algunos casos Ing. Marcelo Doallo Arquitectura IA-32 Registros en IA-32 Ing. Marcelo Doallo Arquitectura IA-32 Registros en IA-32 (2) Ing. Marcelo Doallo Arquitectura IA-32 Registros en IA-32 (3) Ing. Marcelo Doallo Arquitectura IA-32 Registro EFLAGS Ing. Marcelo Doallo Arquitectura IA-32 Flags en IA-32e Es igual que en IA-32 En vez de llamarse EFLAGS se llama RFLAGS Ing. Marcelo Doallo Arquitectura IA-32 Registros de propósito 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. Ing. Marcelo Doallo Arquitectura IA-32 Registros de propósito general en IA-32e (2) Ing. Marcelo Doallo Arquitectura IA-32 Modos de direccionamiento Implı́cito clc (Clear Carry Flag) Inmediato mov eax,0x20 Registro sub eax,edx Desplazamiento (Directo) add [2C00h],ecx Ing. Marcelo Doallo Arquitectura IA-32 Modos de direccionamiento indirecto Base inc [edx] Base + desplazamiento push ebp ;resguardamos ebp mov ebp,esp ;lo apuntamos a la pila mov eax,[ebp+12] ;extraemos el parámetro que está ;12 bytes hacia el fondo de la pila. Ing. Marcelo Doallo Arquitectura IA-32 Modos de direccionamiento indirecto (2) Indexado mov ecx, size tabla mov esi, tabla mas: and [esi],0xFE inc esi loop mas Indexado + desplazamiento and [esi + 4],0xFE Ing. Marcelo Doallo Arquitectura IA-32 Modos de direccionamiento indirecto (3) Base + Indexado * escala mov ebx, 0x0B8000 col: mov ecx, size row xor edi, edi row: mov [ebx + edi * 2 ], 70h inc edi loop row add ebx, 160 cmp ebx, 0x0B9000 jle col Ing. Marcelo Doallo ; Base buffer video. ; Video Inverso ; edi apunta al siguiente ; elemento de 2 bytes ; si CX = 0 completó fila ; fin del buffer? Arquitectura IA-32 Cálculo de la dirección efectiva Ing. Marcelo Doallo Arquitectura IA-32 Tipos de datos Ing. Marcelo Doallo Arquitectura IA-32 Datos en memoria Ing. Marcelo Doallo Arquitectura IA-32 Números enteros Ing. Marcelo Doallo Arquitectura IA-32 Números de punto flotante (IEEE 754) Ing. Marcelo Doallo Arquitectura IA-32 Set de instrucciones Leer capı́tulo 5 del “IA-32 Intel Architecture Software Developer’s Manual” (Volume 1: Basic Architecture) Ing. Marcelo Doallo Arquitectura IA-32 Movimiento de Datos Movimientos MOV Movimiento Condicional CMOV Exchange XCHG, BSWAP, CMPXCHG, CMPXCHG8B Ing. Marcelo Doallo Arquitectura IA-32 Movimiento de Datos (2) Manipulación de la pila PUSH y POP PUSHA y POPA ENTER y LEAVE Conversión de tipos CBW, CWD, CWDE Ing. Marcelo Doallo Arquitectura IA-32 Aritmética Binaria Suma y Resta ADD, ADC, SUB, SBB Incremento y decremento INC, DEC Comparación CMP, NEG Multiplicación y División MUL, DIV, IMUL, IDIV Ing. Marcelo Doallo Arquitectura IA-32 Aritmética Decimal Ajustes decimales para números BCD empaquetados DAA DAS Ajustes decimales para números BCD Desempaquetados AAA AAS AAM AAD Ing. Marcelo Doallo Arquitectura IA-32 Lógicas AND OR XOR Ing. Marcelo Doallo Arquitectura IA-32 Shift y Rotate SHR SAR SHL/SAL SHRD SHLD ROL ROR RAL RAR Ing. Marcelo Doallo Arquitectura IA-32 Bits y Bytes BT, BTS, BTR, BTC BSF, BSR TEST SET Ing. Marcelo Doallo Arquitectura IA-32 Transferencias Incondicionales JMP, CALL, RET, INT, IRET Condicionales Jcc (cc = condición) LOOP JECXZ JCXZ INTO Ing. Marcelo Doallo Arquitectura IA-32 Strings MOVSB, MOVSW, MOVSD SCAB, SCAW, SCAD STOSB, STOSW, STOSD LODSB, LODSW, LODSD CMPSB, CMPSW, CMPSD Prefijos de repetición REP REPZ, REPE REPNZ, REPNE Ing. Marcelo Doallo Arquitectura IA-32 Entrada / Salida IN OUT INSB, INSW, INSD OUTSB, OUTSW, OUTSD Ing. Marcelo Doallo Arquitectura IA-32 Control de Flags Carry STC, CLC, CMC Direction Flag CLD, STD Registro EFLAGS LAHF, SAHF, PUSHF, POPF, PUSHFD, POPFD Flag de Interrupciones CLI, STI Ing. Marcelo Doallo Arquitectura IA-32 Operaciones con registros de segmento MOV y POP. El operando destino puede ser DS, ES, SS, FS, o GS (registros de segmento), pero no CS JMP, CALL far, RET far, INT y IRET. Alteran CS BOUND LDS, LES, LSS, LFS, LGS. Cargan punteros Ing. Marcelo Doallo Arquitectura IA-32 Misceláneas LEA XLAT, XLATB CPUID NOP UD2 Ing. Marcelo Doallo Arquitectura IA-32 Llamadas a subrutinas Se realizan mediante la instrucción CALL Cuando finaliza la subrutina se ejecuta RET para volver al flujo de programa desde el que se realizó la llamada vı́a CALL El stack es un espacio lineal de direcciones, allı́ se almacena la dirección de retorno 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 según el tipo de segmento Ing. Marcelo Doallo Arquitectura IA-32 Stack en llamadas a subrutina Ing. Marcelo Doallo Arquitectura IA-32 Llamadas FAR y NEAR en IA-32 Ing. Marcelo Doallo Arquitectura IA-32 Referencias R 64 and IA-32 Architecture Software Developer’s Intel Manual Volume 1: Basic Architecture. Capı́tulos 1 a 5 R 64 and IA-32 Architecture Software Developer’s Intel Manual Volume 2A: Instruction Set Reference A-M R 64 and IA-32 Architecture Software Developer’s Intel Manual Volume 2B: Instruction Set Reference N-Z Ing. Marcelo Doallo Arquitectura IA-32