Tema 4: Familia x86 Carlos Garre 1
Familia x86 Contenidos Concepto de familia: la familia x86. Generaciones de la familia x86. Primera generación: 8086. Segunda generación: 80286. Tercera generación: 80386. Cuarta generación: 80486. Quinta generación: Pentium. Siguientes generaciones: Pentium Pro, Pentium 4 Otras familias de Intel: Itanium, Core2, i7, Celeron... Resumen de características de la familia x86. Programación en ensamblador de la familia x86. 2
Versiones del P4 2002: P4 HT (Hyper Threading): 2 procesadores lógicos vs 1 procesador físico (multithread). Poco más que duplicar registros. 2003: P4 Extreme Edition: Caché L3 de 2MBs. FSB de 800MHz. 2004: P4 Prescott: 64 bits! instrucciones x86-64, registros, buses No confundir con IA-64 (Itanium) o con AMD-64 (un año antes). 13 nuevas instrucciones SSE3: operaciones horizontales en registros. Segmentación de 31 etapas. 2005: Pentium D: Dos Pentium 4 Prescott en un único integrado. Procesadores no monolíticos: 2 cachés, comunicación por FSB. 3
Familia x86 Contenidos Concepto de familia: la familia x86. Generaciones de la familia x86. Primera generación: 8086. Segunda generación: 80286. Tercera generación: 80386. Cuarta generación: 80486. Quinta generación: Pentium. Siguientes generaciones: Pentium Pro, Pentium 4 Otras familias de Intel: Itanium, Core2, i7, Celeron... Resumen de características de la familia x86. Programación en ensamblador de la familia x86. 4
Arquitectura Intel Core Evolución de la arquitectura x86 (P8: 8ª generación). Se vuelve a la arquitectura P6 (Pentium Pro) Intel abandona Netburst! Se conservan algunas aportaciones de los P4: SSE3, 2006: Intel CoreDuo: 2 procesadores de 32 bits en uno (monolítico): una sola caché. Intel CoreSolo (versión con un solo núcleo). 2006: Intel Core2: Varios núcleos de 64 bits: Core2 Duoy Pentium Dual Core, Quad. 32 nuevas instrucciones SSSE3 (Suplemental SSE3). Versiones Extreme. Ejemplo: Intel Core 2 Extreme Quad-Core: 4 núcleos de 64 bits. 12MBs de caché en total. FSB a 1600MHz. 5
Modelo Tic-Tac En Intel se impone un modelo en el que se van alternando dos tipos de innovaciones: TIC: Se reduce la escala de integración. TAC: Se implementan cambios en la arquitectura, que aprovechan el mayor número de transistores disponibles gracias al anterior TIC. 6
Arquitectura Nehalem Nueva arquitectura de Intel: 2008. Sucesora de Intel Core 2. Primera implementación: Intel Core i7. >700M transistores. 7
Características de Nehalem Hasta 8 núcleos. Procesador de gráficos integrado (IGP). QPI (QuickPathInterconnect): Reemplaza al clásico FSB. Conexión punto a punto con el procesador, de hasta 32GB/s (el doble que un FSB a 1600MHz). La memoria se conecta directamente al microprocesador, que tiene su propio controlador de memoria. 3 canales simultáneos de acceso a memoria. Se vuelve al HyperThreading(hasta 16 threads simultáneos). Caché: L1: 32KB + 32KBpor cada núcleo. L2: 256 KB por cada núcleo. L3: 8 MBscompartidos. 8
Arquitectura Itanium Arquitectura de 64 bits: IA-64. Intel y Hewlett-Packard, desde 2001. Arquitectura radicalmente diferente a x86 y x86-64. Modelo EPIC (VLIW: VeryLong InstructionWord): Paralelismo a nivel de instrucción explícito. El compilador decide qué instrucciones se van a paralelizar. La instrucción detalla el estado de todas las unidades funcionales del sistema. Compiladores muy complejos hardware muy sencillo. Instrucciones de 128 bits Compatibilidad hacia atrás nula! 6 instrucciones/ciclo (2 FPUs+ 4 ALUs) 9
Familia x86 Contenidos Concepto de familia: la familia x86. Generaciones de la familia x86. Primera generación: 8086. Segunda generación: 80286. Tercera generación: 80386. Cuarta generación: 80486. Quinta generación: Pentium. Siguientes generaciones: Pentium Pro, Pentium 4 Otras familias de Intel: Itanium, Core2, i7, Celeron... Resumen de características de la familia x86. Programación en ensamblador de la familia x86. 10
Evolución 11
Evolución (II) 12
Familia x86 Contenidos Concepto de familia: la familia x86. Generaciones de la familia x86. Primera generación: 8086. Segunda generación: 80286. Tercera generación: 80386. Cuarta generación: 80486. Quinta generación: Pentium. Siguientes generaciones: Pentium Pro, Pentium 4 Otras familias de Intel: Itanium, Core2, i7, Celeron... Resumen de características de la familia x86. Programación en ensamblador de la familia x86. 13
Entorno de Programación MASM http://www.masm32.com/ 1. Code Create New Console Application 2. Project Makeit.bat 3. Project Run program Salvad cambios siempre antes de ejecutar Makeit.bat! 14
Conceptos básicos 4 registros de propósito general: EAX, EBX, ECX, EDX. También se pueden utilizar: EDI, ESI, EBP. Enteros en complemento a 2. Segmentación de la memoria:.data: directiva para indicar comienzo del segmento de datos..code: directiva para indicar comienzo del segmento de código..stack: directiva para indicar comienzo del segmento de pila. Variables: Variable dd 100 dd: byte (8 bits), dw: word(16 bits), dd: double-word(32 bits). Variable dd100 inicializa Variable con el valor 100. Variable dd? crea Variablesin valor inicial. Cadena db Hola Mundo,0 declaración de strings. Matriz db00h, 11H, 22H, 33H declaración de arrays. 15
Modos de direccionamiento MOV destino, fuente Direccionamiento inmediato: MOV EAX, 100óMOV EAX, 100H ómov EAX, 100B Direccionamiento directo a registro: MOV EAX, EBX Direccionamiento directo (indirecto a registro DS implícito, con desplazamiento): MOV EAX, [1000H] Direccionamiento indirecto a registro con desplazamiento: MOV EAX, [EBX + 100H] ó MOV EAX, [EBX] Direccionamiento base más índice: MOV EAX, [BX + DI] ó MOV EAX, [BX + DI + 100H] 16
Instrucciones Aritméticas INC eax eax= eax+ 1 DEC eax eax= eax-1 ADD eax, ebx eax= eax+ ebx SUB eax, ebx eax= eax ebx MUL ebx Un operando siempre fijo: EAX resultado = eax* ebx El resultado se guarda en EDX:EAX IMUL para multiplicación con signo: IMUL eax, ebx eax= eax*ebx DIV ebx Un operando siempre fijo: EAX resultado = eax/ ebx El resto se guarda en EDX y el cociente en EAX. IDIV para división con signo: IDIV ebx 17
Instrucciones de Control Bifurcación incondicional: Etiqueta: JMP Etiqueta Bifurcaciones condicionales: Las condiciones se obtienen del registro de estado (flags): OF (desbordamiento): desbordamiento en operaciones con signo. SF (signo): signo resultante de una operación aritmética (1=negativo). ZF (cero): (1 = el resultado de la última operación fue 0). PF (paridad): paridad en operación de datos de ocho bits (1=paridad par). CF (acarreo): acarreo de operación aritmética óúltimo biten una operación de desplazamiento o rotación de bits. 18
Instrucciones de Control (II) Ejemplo: Saltar si dos registros son iguales: CMP EAX, EBX JE iguales 19
Instrucciones de Control (III) Instrucciones de subrutina: Llamada a subrutina: CALL subrutina Retorno de subrutina: RET Paso de parámetros por pila: PUSH eax guarda el contenido de EAX en la pila. POP eax extrae el último valor de la pila, y lo guarda en EAX. Si no queremos recuperar el valor utilizando POP, podemos vaciarla pila simplemente con: ADD esp, n nes el número de bytes que hemos subido con PUSH. 20
Otras instrucciones útiles LEA eax, variable eax= dir(variable) Operaciones en coma flotante: Numero REAL4 3.14 Inicializa la variable Numero a 3 14 REAL4 es un número real de 4 bytes (precisión simple IEEE-754). FADD, FSUB, FMUL, FDIV, FSQRT, FABS Cientos de instrucciones entre el juego básico, instrucciones SIMD, y otras extensiones. 21
Ejemplo Cálculo del factorial: 22
Práctica 1 Programación en Ensamblador x86 Primera práctica obligatoria. Práctica individual. Campus Virtual: Enunciado. Material de apoyo. Ejemplos de código. Fechas de entrega. Se valorará vuestra capacidad de estudiar por vuestra cuenta: uso de instrucciones no explicadas, optimizaciones bien documentadas, Si se detecta copia Suspensa toda la convocatoria! 23