Arquitectura IA-32

Anuncio
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
Descargar