Está en la página 1de 56

Procesadores IA-32 e Intel c 64

Alejandro Furfaro
Abril 2012
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 1 / 55
Agenda
1
Inroducci on
Genealoga
Arquitectura B asica
2
Modelo del Programador de aplicaciones
Arquitectura de 16 bits b asica
IA-32
Arquitectura Intel
R
64
3
Modos de Direccionamiento
Modo Implcito
Modo Inmediato
Modo Registro
Modos de Direccionamiento a memoria
Modo Desplazamiento
Modo Base Directo
Base + Desplazamiento
Base + Desplazamiento

Indice * escala + desplazamiento


Base +

Indice + Desplazamiento
Modo Base +

Indice * Escala + Desplazamiento
4
Tipos de Datos
Almacenamiento en memoria
Alineaci on en memoria
Representaci on de datos num ericos
5
La Pila
Bases
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 1 / 55
Inroducci on Genealoga
Orgenes
La arquitectura IA-32 deriva de la familia iAPx86 que se present o en
1978 de la mano del procesador de Intel 8086. Fue el primer
procesador de 16 bits. Meses luego Motorola lanzara el 68000 y Zilog
el Z8000A y Z8000B. Pero IBM ya haba decidido utilizar el procesador
de Intel para su modelo de Personal Computer (PC) que
revolucionara el mercado de computadores.
Por entonces, los usuarios de computadores demandaban disminuir el
costo de actualizaci on de sus equipos. En parte este elevado costo se
deba a la necesidad de reemplazar no solo el hardware sino adem as
el sistema operativo y las aplicaciones. Al lanzar el procesador 8086,
Intel se compromete a mantener compatibilidad ascendente en los
modelos subsiguientes de procesadores para satisfacer esta demanda
de los usuarios. Esto fue uno de los motivos de la decisi on de IBM de
adoptar esta familia de procesadores como base para su PC.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 2 / 55
Inroducci on Genealoga
Orgenes
Unos meses luego del lanzamiento del 8086, Intel presenta una
variante del mismo procesador: el 8088, que era id entico en su
arquitectura interna de 16 bits, salvo por su bus de datos que a
diferencia del bus de 16 bits del 8086 tena solo 8 bits, lo cual le daba
una mas directa conectividad con la innumerable cantidad de
perif ericos de 8 bits que por entonces haba disponibles. Finalmente
por esta mejor adaptaci on a nivel de hardware con los dispositivos
existentes, IBM lanzara su primer PC basada en un 8088. A partir de
entonces se armara el liderazgo de Intel en esta industria.
En 1982 Intel presenta el 80286, que mejoraba la CPU 8086 en la
ejecuci on de numerosas instrucciones e incorporando multitasking. Su
arquitectura de 16 bits segua siendo la misma. A partir de este
procesador IBM dise na el modelo de PC conocido como AT.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 3 / 55
Inroducci on Genealoga
Orgenes
En 1984 Intel lanza el primer procesador de 32 bits, el 80386, y con el
la arquitectura IA-32. Ya la industria comienza a hablar de los
procesadores x86. Aparecen fabricantes que producir an procesadores
IA-32, bajo licencia de Intel primero, y a partir de que esta lanza el
procesador Pentium en 1993 ya en forma independiente. Entre ellos
se destaca AMD.
A nes de los a nos 90 Intel comienza una sociedad con Hewlett
Packard que derivara en una nueva arquitectura llamada IA-64 y
cuyos procesadores de 64 bits Itanium e Itanium 2 no tendran el exito
de los x86. AMD en cambio apost o a la arquitectura dominante, e
ide o las extensiones de 64 bits para los procesadores IA-32. Llam o a
esta nueva arquitectura x86-64 y posteriormente AMD64. Intel por
primera vez debe incorporar a sus procesadores IA-32, funciones
desarrolladas por sus competidores. Llama a esta arquitectura Intel
R
64 .
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 4 / 55
Inroducci on Arquitectura B asica
Modos de Operaci on Legacy
Los procesadores IA-32 tienen tres modos de operaci on, de los cuales
surgen sus capacidades arquitecturales e instrucciones disponibles:
Modo Real: En este modo el procesador implementa el entorno
de operaci on del 8086, con algunas extensiones: puede pasar por
software al Modo Protegido o al Modo Mantenimiento del
Sistema, puede utilizar registros de 32 bits, puede recongurar la
ubicaci on del vector de interrupciones, ya que a pesar de que el
8086 no lo tena, ahora existe y es accesible desde modo Real el
registro IDTR (ver Interrupciones mas adelante). Para honrar su
compromiso de compatibilidad ascendente, todos los
procesadores IA-32 e Intel
R
64 arrancan en este Modo de
Trabajo.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 5 / 55
Inroducci on Arquitectura B asica
Modos de Operaci on Legacy
Modo Protegido: Este es el modo por excelencia de los
procesadores de esta familia inaugurado por el procesador
80286. En este modo se implementa multitasking y se despliega
un espacio de direccionamiento de 4 Gbytes, extensible a 64
Gbytes. A partir del procesador 80386 se lleva el modelo
arquitectural a 32 bits y se introduce un sub-modo al que puede
ponerse a una determinada tarea, denominado Virtual-8086 que
permite a un programa dise nado para ejecutarse en un
procesador 8086, poder ejecutarse como una tarea en Modo
Protegido. Esto fue muy util para implementar en Windows la
Ventana DOS. Actualmente no es utilizado, ya que la consola
que se ejecuta utiliza un c odigo diferente del DOS original, y es
en general una tarea mas.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 6 / 55
Inroducci on Arquitectura B asica
Modos de Operaci on Legacy
Modo Mantenimiento del Sistema: El procesador ingresa a este
modo por dos caminos: Activaci on de la se nal de interrupci on
#SMM, o mediante un mensaje SMI desde su APIC local. Este
modo fue introducido a partir de los modelos 386SL y 486SL para
realizar funciones especcas para la plataforma de hardware en
la cual se desempe na el procesador, como lo son ahorro de
energa y seguridad. Estos procesadores fueron los primeros
dise nados para notebooks. Al ingresar a este modo el procesador
resguarda en forma autom atica el contexto completo de la tarea o
programa interrumpido, y pasa a ejecutar en un espacio
separado. Una vez efectuadas las operaciones necesarias y
cuando debe salir de este modo el procesador reasume la tarea o
programa interrumpida independientemente del modo de
operaci on en el que se encuentra.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 7 / 55
Inroducci on Arquitectura B asica
Modos de Operaci on de 64 bits
Hasta la aparici on de las extensiones de 64 bits, estos eran los modos
de trabajo est andar de los procesadores IA-32. Los procesadores
Intel
R
64 adem as de los modos de trabajo de los IA-32 incluyen un
modo IA-32e, al que se pasa estando en modo protegido, con
paginaci on habilitada y PAE activo (Como estudiaremos en
Paginaci on). En este modo a su vez existen dos sub-modos (nada es
simple en este mundo).: Compatibilidad y Modo 64 bits
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 8 / 55
Inroducci on Arquitectura B asica
Modos de Operaci on de 64 bits
Modo Compatibilidad: Pensado tal vez para garantizar la
transici on, permite a las aplicaciones de 16 y 32 bits ejecutarse
sin recompilaci on bajo un sistema operativo de 64 bits. El entorno
de ejecuci on es el que veremos para la arquitectura IA-32
(registros de 32 bits, etc). No soporta el manejo de tareas del
modo IA-32 (TSS mediante), ni el modo Virtual 8086 (en esto nos
basamos para asegurar que est a obsoleto al referirnos a este
modo algunos p arrafos atr as. Incluye los mecanismos de
protecci on del modo 64 bits.
En el modo compatibilidad un Sistema Operativo de 64 bits puede
ejecutar junto con aplicaciones puras de 64 bits, tareas o
aplicaciones de 16 y 32 bits sobre la base de diferentes
segmentos de c odigo. La aplicaci on o tarea accede a una
arquitectura IA-32 pura, utilizando direcciones de 16 y 32 bits, con
4 Gbytes de espacio de direccionamiento y con la posibilidad de
acceder por encima de ese lmite habilitando PAE.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 9 / 55
Inroducci on Arquitectura B asica
Modos de Operaci on de 64 bits
Modo 64 bits: Este modo habilita a un Sistema Operativo de 64
bits a ejecutar tareas escritas utilizando direcciones lineales de 64
bits. En este modo se extienden de 8 a 16 los Registros de
prop osito general cuyo ancho de palabra ahora es de 64 bits
(para ello se introduce el prejo REX para las instrucciones que
deseen acceder a las versiones de Registros de prop osito general
de 64 bits), agreg andose los registros R8 a R15, y los registros
SIMD tambi en se extienden a 16 manteniendo su ancho de 128
bits, XMM0 a XMM15.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 10 / 55
Modelo del Programador de aplicaciones Arquitectura de 16 bits b asica
Registros y espacio de direccionamiento
AX
0 15
BX
CX
DX
SI
DI
BP
SP
AL
BL
CL
DL
AH
BH
CH
DH
IP
Flags
0 15
CS
SS
DS
ES
0 15
2^20 -1
0
Espacio de
direccionamiento
Figura: Entorno B asico de ejecuci on en 16 bits
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 11 / 55
Modelo del Programador de aplicaciones IA-32
Arquitectura de 32 bits compatible
AX
0 15
BX
CX
DX
SI
DI
BP
SP
AL
BL
CL
DL
AH
BH
CH
DH
IP
Flags
0 15
CS
SS
DS
ES
0 15
2^32 -1
0
Espacio de
direccionamiento
16 31
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
16 31
EIP
EFlags
FS
GS
Figura: Entorno B asico de ejecuci on del 80386
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 12 / 55
Modelo del Programador de aplicaciones IA-32
Floating Point Unit
EDX EFlags
0 63 79
R0
R1
R2
R3
R4
R5
R6
R7
S Exponente Mantisa
Control Register
Status Register
Tag Register
Last Instruction Pointer
Last Data (Operand) Pointer
0 15 0 47
Opcode Register
0 11
Figura: Entorno B asico de ejecuci on de la FPU
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 13 / 55
Modelo del Programador de aplicaciones IA-32
Floating Point Unit
0
22 31 23
0 51 63 52
0
0
0 63 79 64
Bit de Signo
Bits de exponente (Ca2)
Bits de la Mantisa o significando (1.mantisa)
Extended Double: 1:15:64
Double Precision 1:11:52
Single Precisin 1:8:23
Figura: Formatos de los Datos de Punto Flotante de la FPU
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 14 / 55
Modelo del Programador de aplicaciones IA-32
Floating Point Unit on board
AX
0 15
BX
CX
DX
SI
DI
BP
SP
AL
BL
CL
DL
AH
BH
CH
DH
IP
Flags
0 15
CS
SS
DS
ES
0 15
2^32 -1
0
Espacio de
direccionamiento
16 31
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
16 31
EIP
EFlags
0 63 79
R0
R1
R2
R3
R4
R5
R6
R7
S Exponente Mantisa
Control Register
Status Register
Tag Register
Last Instruction Pointer
Last Data (Operand) Pointer
0 15 0 47
Opcode Register
0 11
Registros de la FPU
FS
GS
Figura: Entorno B asico de ejecuci on con la FPU on board
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 15 / 55
Modelo del Programador de aplicaciones IA-32
Extensiones MMX
AX
0 15
BX
CX
DX
SI
DI
BP
SP
AL
BL
CL
DL
AH
BH
CH
DH
IP
Flags
0 15
CS
SS
DS
ES
0 15
2^32 -1
0
Espacio de
direccionamiento
16 31
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
16 31
EIP
EFlags
0 63 79
R0
R1
R2
R3
R4
R5
R6
R7
S Exponente Mantisa
Control Register
Status Register
Tag Register
Last Instruction Pointer
Last Data (Operand) Pointer
0 15 0 47
Opcode Register
0 11
Registros de la FPU
Registros Bsicos de Ejecucin
FS
GS
0 63
MM0
MM1
MM2
MM3
MM4
MM5
MM6
MM7
Registros MMX
Figura: Entorno B asico de ejecuci on con tecnologa MMX
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 16 / 55
Modelo del Programador de aplicaciones IA-32
Llega el Pentium III
AX
0 15
BX
CX
DX
SI
DI
BP
SP
AL
BL
CL
DL
AH
BH
CH
DH
IP
Flags
0 15
CS
SS
DS
ES
0 15
2^32 -1
0
Espacio de
direccionamiento
16 31
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
16 31
EIP
EFlags
0 63 79
R0
R1
R2
R3
R4
R5
R6
R7
S Exponente Mantisa
Control Register
Status Register
Tag Register
Last Instruction Pointer
Last Data (Operand) Pointer
0 15 0 47
Opcode Register
0 11
Registros de la FPU
Registros Bsicos de Ejecucin
FS
GS
0 63
MM0
MM1
MM2
MM3
MM4
MM5
MM6
MM7
Registros MMX
0 127
XMM0
XMM1
XMM2
XMM3
XMM4
XMM5
XMM6
XMM7
Registros XMM
XMCSR
0 31
Figura: Entorno B asico de ejecuci on IA-32 actual
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 17 / 55
Modelo del Programador de aplicaciones Arquitectura Intel
R
64
Extensiones de 64 bits
CS
SS
DS
ES
0 15
2^64 -1
0
Espacio de
direccionamiento
0 63 79
R0
R1
R2
R3
R4
R5
R6
R7
S Exponente Mantisa
Control Register
Status Register
Tag Register
Last Instruction Pointer
Last Data (Operand) Pointer
0 15 0 47
Opcode Register
0 11
Registros de la FPU
Registros de Propsito General
FS
GS
0 63
MM0
MM1
MM2
MM3
MM4
MM5
MM6
MM7
Registros MMX
0 127
XMM0
XMM1
XMM2
XMM3
XMM4
XMM5
XMM6
XMM7
Registros XMM
XMCSR
0 31
XMM8
XMM9
XMM10
XMM11
XMM12
XMM13
XMM14
XMM15
0 63
R8
R9
R10
R11
R12
R13
R14
R15
RAX
RBX
RCX
RDX
RSI
RDI
RBP
RSP
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
RIP EIP
RFlags EFlags
Figura: Entorno B asico de ejecuci on Intel
R
64
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 18 / 55
Modelo del Programador de aplicaciones Arquitectura Intel
R
64
Extensiones de 64 bits
En este modo los registros de Prop osito General se extienden a 64
bits y aparecen 8 registros de 64 bits adicionales. El procesador a
pesar de estar en modo 64 bits puede acceder a diferentes tama nos
de operador. Para ello es necesario que utilice el prejo REX,
antecediendo a cada instrucci on que requiera este tipo de operandos.
Registros de Propsito General
0 63
R8
R9
R10
R11
R12
R13
R14
R15
RAX
RBX
RCX
RDX
RSI
RDI
RBP
RSP
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
R8D
R9D
R10D
R11D
R12D
R13D
R14D
R15D
Figura: Intel
R
64 : Registros de Prop osito general para operandos Double
word, utilizando prejo REX
La Figura 9 muestra los registros disponibles para el acceso a
operandos de 32 bits cuando se utiliza el prejo REX.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 19 / 55
Modelo del Programador de aplicaciones Arquitectura Intel
R
64
Extensiones de 64 bits
Registros de Propsito General
0 63
R8
R9
R10
R11
R12
R13
R14
R15
RAX
RBX
RCX
RDX
RSI
RDI
RBP
RSP
AX
BX
CX
DX
SI
DI
BP
SP
R8W
R9W
R10W
R11W
R12W
R13W
R14W
R15W
Figura: Intel
R
64 : Registros de Prop osito general para operandos word,
utilizando prejo REX
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 20 / 55
Modelo del Programador de aplicaciones Arquitectura Intel
R
64
Extensiones de 64 bits
Registros de Propsito General
0 63
R8
R9
R10
R11
R12
R13
R14
R15
RAX
RBX
RCX
RDX
RSI
RDI
RBP
RSP
AL
BL
CL
DL
SIL
DIL
BPL
SPL
R8L
R9L
R10L
R11L
R12L
R13L
R14L
R15L
Figura: Intel
R
64 : Registros de Prop osito general para operandos byte,
utilizando prejo REX
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 21 / 55
Modelo del Programador de aplicaciones Arquitectura Intel
R
64
Flags, EFLAGS, RFLAGS
Figura: IA-32: Registro EFLAGS. Cortesa Intel
R
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 22 / 55
Modos de Direccionamiento
Como Obtener los Operandos
Como reglas generales, de acuerdo a la documentaci on disponible,
las instrucciones de estos procesadores pueden obtener los
operandos desde:
La instrucci on en si misma, es decir que el operando
est a implcito en la instrucci on)
Un registro
Una posici on de memoria
Un port de E/S
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 23 / 55
Modos de Direccionamiento
Como Almacenar los resultados
Del mismo modo el resultado de una instrucci on puede tener como
destino para su almacenamiento:
Un registro
Una posici on de memoria
Un port de E/S.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 24 / 55
Modos de Direccionamiento Modo Implcito
Que signica Direccionamiento Implcito?
Se trata de instrucciones en las cuales el c odigo de operaci on es
suciente como para establecer que operaci on realizar, y cual es el
operando.
Son ejemplos de este Modo, las instrucciones que operan sobre los
Flags, como por ejemplo:
CLC: Clear Carry. El operando (el Flag CF), est a implcito en la
operaci on. Lo mismo ocurre con STC (Set Carry), CMC
(Complement Carry),
CLD (Clear Direction Flag), STD (Set Direction Flag),
CLI y STI para limpiar y setear el ag de Interrupciones (IF),
entre otros.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 25 / 55
Modos de Direccionamiento Modo Implcito
Mas Instrucciones con Direccionamiento Implcito
Otras instrucciones con modo de direccionamiento implcito son
algunas que en realidad no requieren operandos, ya que tienen por
objeto indicar al procesador alguna acci on especca. Por ejemplo:
HLT, que suspende la ejecuci on del procesador y lo pone en un estado que se
dene como HALT, en el que est a suspendido, en un modo de consumo de
energa mnimo, y del cual se puede salir solo mediante alguna Interrupci on de
Hardware, incluidas NMI y SMI, alguna excepci on de debug, o una se nal #BINIT,
#INIT, o RESET,
NOP que provoca que el procesador no haga nada durante el intervalo de una
instrucci on en el ujo de instrucciones.
Ajustes para operaciones aritm eticas sobre n umeros en formato BCD o ASCII
empaquetado, como AAA (ASCII Adjust after Adition), AAD (ASCII Adjust after
Division), AAM (ASCII Adjust after Multiplication), AAS ASCII Adjust after
Substraction), DAA (Decimal Adjust after Adition), DAS (Decimal Adjust after
Substraction). Todas estas instrucciones operan sobre el Acumulador AX, raz on
por la cual no es necesario indicar el operando en la instrucci on.
CWD/CDQ/CQO Convert Word to Double Word y Convert Double Word to
Quadword, que operan con el contenido de AX EAX y RAX extendi endolo con
signo a DX:AX, EDX:EAX, y RDX:RAX respectivamente,
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 26 / 55
Modos de Direccionamiento Modo Inmediato
Que signica direccionar en Modo Inmediato?
En este modo, el operando fuente viene dentro del c odigo de la
instrucci on, con lo cual no es necesario ir a buscarlo a memoria luego
de decodicada la instrucci on.
1 ; / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
2 ; as c i i r eci be en al un byt e deci mal no empaquetado
3 ; y r et or na su as c i i en el mismo r egi s t r o
4 ; / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
5 a s c i i :
6 add al , 0
7 cmp al , 9
8 j l e l i s t o
9 add al , A 9 1
10 l i s t o : r et
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 27 / 55
Modos de Direccionamiento Modo Registro
Que signica direccionar a Registro?
Todos los operandos involucrados son Registros del procesador. No importa si hay
uno o dos operandos, son todos Registros.
Registros de Prop osito General tanto de 64, 32, 16 u 8 bits de acuerdo con las
arquitecturas IA-32 e Intel
R
64
Registros de segmentos
EFlags (o RFlags)
Registros de la FPU,
MM0 a MM7,
XMM0 a XMM7 o XMM15 seg un sea IA-32 o Intel
R
64 respectivamente,
Registros de Control
Registros de Debug
MSRs (Model Specic Registers)
1 i nc r dx ; I ncrement a en cont eni do del r egi s t r o RDX
2 mov eax , ebp ; Mueve al r egi s t r o EAX el cont eni do del EBP
3 mov cr0 , eax ; Mueve al r egi s t r o cr 0 el cont eni do del EAX
4 f mul st ( 0) , st ( 3) ; ST( 0) = ST( 0) ST( 3)
5 sqr t pd xmm2, xmm6 ; Raz cuadrada de dos doubl e pr eci si on FP
6 ; empaquetados en xmm6. Resul t ados en xmm2.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 28 / 55
Modos de Direccionamiento Modos de Direccionamiento a memoria
Como nos referimos desde el software a un
Operando en Memoria?
Para identicar un operando (fuente o destino) de una instrucci on en
memoria, se utiliza lo que Intel denomina direcci on l ogica.
Este nombre obedece a que es una direcci on abstracta expresada en
t erminos de su arquitectura pero que necesita ser procesada para
convertirse nalmente en la direcci on fsica que es la que saldr a hacia
el bus del sistema por las lneas de address.
Figura: IA-32: Direcci on l ogica
Figura: Intel
R
64 : Direcci on L ogica
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 29 / 55
Modos de Direccionamiento Modos de Direccionamiento a memoria
Segmentos para cada direcci on L ogica
El valor del segmento en una direcci on l ogica, puede especicarse de manera
implcita.
Por lo general este es el modo en que se hace, aunque es posible explicitar con
que segmento se desea direccionar un operando de memoria determinado.
Si no se especica explcitamente el segmento como parte de la direcci on l ogica
el procesador lo establecer a autom aticamente de acuerdo a la tabla
Referencia a: Reg. Segmento Regla de selecci on por defecto
Instrucciones CS Segmento de C odigo Cada opcode fetch
Pila SS Segmento de Pila Todos los push y pop, cualquier re-
ferencia a memoria que utilice co-
mo registro base ESP o EBP.
Datos Locales DS Segmento de datos Cualquier referencia a un dato, ex-
cepto en el stack o un destino de
instrucci on de string
Strings Destino ES Segmento de datos
extra direccionado
por ES
Destino de Instrucciones de mane-
jo de strings
Cuadro: Reglas de selecci on de segmento predenidos
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 30 / 55
Modos de Direccionamiento Modos de Direccionamiento a memoria
Desplazamiento para ubicar operandos en Memoria
La riqueza de modos de direccionamiento de operandos en memoria la da el
desplazamiento. Aqu es Intel puso todo el esfuerzo dando una gran cantidad de
alternativas para calcular el desplazamiento.
B asicamente un desplazamiento tiene al menos uno de los siguientes componentes,
o cualquiera de las combinaciones posibles:
Desplazamiento directo: Se trata de un valor de 8, 16, o 32 bits, explcitamente
incluido en la instrucci on.
Base: Se trata de un valor contenido en un registro de prop osito general, que
indica una direcci on a partir de la cual se calcula el desplazamiento. Es un valor
de 32 bits en el modo IA-32 y de 64 bits en IA-32e.

Indice: Se trata de un valor contenido en un registro de prop osito general, que


se representa la direcci on a la cual nos queremos referir. Tpicamente es un
valor que al incrementarse permite recorrer por ejemplo un buffer de memoria.
Es un valor de 32 bits en el modo IA-32 y de 64 bits en IA-32e.
Escala: Es un valor por el cual se multiplica el valor del

Indice: Puede valer 2, 4,
u 8.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 31 / 55
Modos de Direccionamiento Modos de Direccionamiento a memoria
Calculando el desplazamiento
A partir de estos cuatro componentes o combinaci on de algunos de ellos, se obtiene
lo que Intel denomina Direcci on Efectiva. Esta denominaci on intenta representar el
signicado del offset dentro de un segmento: es la direcci on que ocupa efectivamente
el elemento direccionado respecto del inicio del segmento.
Los cuatro componentes anteriores pueden ser positivos o negativos en
representaci on Ca2 (excepto el valor del factor de escala que es siempre positivo).
A continuaci on se presenta los diferentes registros y valores que pueden integrar
cada uno de los cuatro componentes descriptos:
Base

Indice Escala Desplazamiento
_
_
_
_
_
_
_
_
_
_
_
_
EAX
EBX
ECX
EDX
ESP
EBP
EDI
ESI
_

_
+
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
EAX
EBX
ECX
EDX
EBP
EDI
ESI
_
_
_
_
_
_
_
_
_
_

_
_
_
_
_
_
_
_
_
_
1
2
4
8
_
_
_
_
_
_
_
_
_
_
_

_
+
_
_
_
_
_
_
_
_
_
_
Nada
8bits
16bits
32bits
_

_
En general la expresi on general que representa el c alculo interno del procesador es:
DireccionEfectiva = Base + (Indice escala) + Desplazamiento
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 32 / 55
Modos de Direccionamiento Modos de Direccionamiento a memoria
Casos particulares
Cuestiones a destacar, respecto de la matriz anterior:
El registro ESP (o RSP), no puede utilizarse de

Indice. Esto es
bastante l ogico ya que su uso privilegiado es como puntero de
pila. Por lo tanto modicarlo para recorrer otro array de datos que
no sea la pila es poco menos que imprudente.
Cuando se emplean como registros base ESP y EBP (o RSP y
RBP), se utilizan asociados al registro de segmento SS. Para el
resto de los usos se asocian al DS.
El factor de escala solo se puede emplear cuando se utiliza un
Registro

Indice. En otro caso no se emplea.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 33 / 55
Modos de Direccionamiento Modo Desplazamiento
El Offset puede venir directo en la Instrucci on?
Se incluye en la instrucci on un valor en forma explcita que representa
en forma directa el valor del offset.
En el listado siguiente se muestran diversos ejemplos de instrucciones
de este Modo.
1 or ecx , dword [ 0x300040A0 ] ; Cal cul a l a or l ogi ca ent r e
2 ; ECX y l a dobl e word cont eni da
3 ; a p a r t i r de l a di r ecci on de
4 ; memoria 0x300040A0.
5 i nc byt e [ 0xAF007600 ] ; I ncrement a el byt e cont eni do
6 ; por l a di r ecci on de memoria
7 ; 0xAF007600
8 dec dword [ i ] ; El val or de l a di r ec c i on de l a
9 ; var i abl e i se cal cul a di r ect a
10 ; mente y el val or se reempl aza
11 ; en t i empo de compi l aci on
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 34 / 55
Modos de Direccionamiento Modo Base Directo
Una de las formas de direccionar en forma indirecta
En este modo el ofsset est a contenido directamente en un
registro Base.
El procesador simplemente lo toma desde el registro, sin otro
c alculo.
1 mov edx , i ; edx = despl azami ent o de i en el segmento
2 ; de dat os
3 i nc [ edx ] ; i ncrementamos i di r ecci onada a t r av es de
4 ; un r egi s t r o punt er o base.
El ejemplo anterior es trivial ya que la variable como vimos puede
incrementarse de manera directa
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 35 / 55
Modos de Direccionamiento Base + Desplazamiento
Formas mas utiles de direccionar en forma indirecta
Combina el valor contenido en un registro que apunta a la base de
un bloque de datos con un valor explcito puesto en la instrucci on,
que permite calcular la direcci on efectiva del operando.
Tambi en resulta util para acceder a una estructura mas compleja
de datos, apuntando a la base de la estructura con un registro y
utilizando el Desplazamiento para acceder al campo deseado de
la estructura.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 36 / 55
Modos de Direccionamiento Base + Desplazamiento
Formas mas utiles de direccionar en forma indirecta
1 ORG 8000h
2 use16 ; Estamos en Modo Real=>C odi go de 16 b i t s
3 s t a r t : jmp main ; Sal t o al i n i c i o del programa.
4 ALIGN 8
5 gdt : resb 8 ; NULL Descr i pt or . Dejamos 8 byt es si n usar .
6 Dat a sel equ $gdt ; Cal cul a di n amicamente l a posi ci on del s l ec t or
7 K dat a : dw 0 x f f f f ; l mi t e 15. 00
8 dw 0x0000 ; base 15. 00
9 db 0x00 ; base 23. 16
10 db 10010010b ; Present e Segmento Datos Read Wr i t e
11 db 0xCF ;G = 1 , D/ B = 1 , y l mi t e 0Fh
12 db 0x00 ; base 31. 24
13 gdt si ze equ $gdt ; cal cul a di n amicamente el tama no de l a gdt
14 main :
15 . . .
16 . . .
17 mov ebx , K dat a ; ebx apunta a l a base del descr i pt or
18 ; / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
19 ; Lee con di r ecci onami ent o base + despl azami ent o l os at r i but os del descr i pt or
20 ; de segmento de dat os def i ni do en l a t abl a ant er i or
21 mov al , byt e [ ebx + 5]
22 ; / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
23 t es t al , 0 x80 ; Testea b i t de pr esent e
24 j z NoPresente ; Si no est a present e , sal t a
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 37 / 55
Modos de Direccionamiento

Indice * escala + desplazamiento
Formas mas utiles de direccionar en forma indirecta
Es una forma eciente de acceder a elementos de un array cuyo
tama no es 2, 4, u 8 bytes
El Desplazamiento puede ubicar el inicio del array y el valor ndice
se guarda en un registro que al incrementar pasa al siguiente
elemento permitiendo con la escala ajustar al tama no del mismo
1 % def i ne Di r Tabl a 0x2000F000
2 % def i ne mascara 0xFFFFFFE
3 mov ecx , s i z e t abl a ; ecx = cant i dad de el ementos de
4 ; 4 byt es de l a t abl a.
5 xor esi , esi ; esi apunta al i n i c i o de l a t abl a
6 mas:
7 and [ esi 4 + Di r Tabl a ] , mascara
8 ; bor r a b i t menos s i g n i f i c a t i v o
9 ; del el emento de l a t abl a
10 i nc esi ; esi apunta al si gui ent e
11 ; el emento de 4 byt es
12 l oop mas ; va por el si gui ent e el emento
13 ; hast a que exc sea 0
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 38 / 55
Modos de Direccionamiento Base +

Indice + Desplazamiento
Formas mas utiles de direccionar en forma indirecta
Este modo es especial para acceder a matrices bidimensionales.
Un ejemplo obligado es el buffer de video
Cuando trabaja en modo texto el buffer de video es una matriz de
25 las por 80 columnas.
Cada elemento consta de dos bytes: el primero contiene el ASCII
del caracter a presentar y el segundo los atributos (intensicado,
video inverso, y colores de caracter y fondo).
Vamos a escribir un c odigo que aprovechando este modo de
direccionamiento sirva para limpiar el contenido de la pantalla.
El registro base apunta a cada lnea de la pantalla y el ndice
apunta a cada elemento de la lnea.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 39 / 55
Modos de Direccionamiento Base +

Indice + Desplazamiento
Formas mas utiles de direccionar en forma indirecta
1 ; El si gui ent e c odi go l i mpi a l a pant al l a dej andol a en modo
2 ; bl anco sobre negr o. El buf f er de vi deo comienza en l a
3 ; di r ec c i on f si ca 0x000B8000. Ut i l i zamos est e val or como
4 ; despl azami ent o en el c al c ul o de l a di r ec c i on e f e c t i v a .
5 xor ebx , ebx ; r esul t ado ebx = 0 .
6 ; ebx apunta a l a 1 er . f i l a de 80 car act er es
7 col :
8 xor edi , edi ; r esul t ado edi = 0 .
9 ; edi apunta al pr i mer el emento de l a f i l a
10 mov ecx , si ze r ow ; ecx = cant i dad de f i l a s para l oop
11 row:
12 ; car act er nul o no i mpri me nada en pant al l a
13 mov byt e [ ebx + edi + 0x000B8000 ] , 0 x00
14
15 add edi , 2 ; edi apunta al por x. el emento de 2 byt es
16 l oop row ; s i CX = 0 se compl et o f i l a
17 add ebx , 160 ; Apunta a l a si gui ent e f i l a
18 cmp ebx , 0 x1000 ; f i n del buf f er ?
19 j l e col
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 40 / 55
Modos de Direccionamiento Modo Base +

Indice * Escala + Desplazamiento
Formas mas utiles de direccionar en forma indirecta
1 ; El si gui ent e c odi go l i mpi a l a pant al l a dej andol a en modo
2 ; bl anco sobre negr o. El buf f er de vi deo comienza en l a
3 ; di r ec c i on f si ca 0x000B8000. Ut i l i zamos est e val or como
4 ; despl azami ent o en el c al c ul o de l a di r ec c i on e f e c t i v a .
5 xor ebx , ebx ; r esul t ado ebx = 0 .
6 ; ebx apunta a l a 1 er . f i l a de 80 car act er es
7 col :
8 xor edi , edi ; r esul t ado edi = 0 .
9 ; edi apunta al pr i mer el emento de l a f i l a
10 mov ecx , si ze r ow ; ecx = cant i dad de f i l a s para l oop
11 row:
12 ; car act er nul o no i mpri me nada en pant al l a
13 mov byt e [ ebx + edi 2 + 0x000B8000 ] , 0 x00
14
15 i nc edi ; edi apunta al por x. el emento de 2 byt es
16 l oop row ; s i CX = 0 se compl et o f i l a
17 add ebx , 160 ; Apunta a l a si gui ent e f i l a
18 cmp ebx , 0 x1000 ; f i n del buf f er ?
19 j l e col
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 41 / 55
Tipos de Datos
Tipos b asicos de datos
Figura: IA-32 e Intel
R
64 : Tipos de datos fundamentales
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 42 / 55
Tipos de Datos Almacenamiento en memoria
Little endian
Desde el procesador 8086, esta familia maneja el
almacenamiento en memoria de las variables en el formato little
endian.
Dicho de otra forma: una variable de varios bytes de tama no
almacena su byte menos signicativo en la direcci on con que se
referencia la variable y a partir de all coloca el resto de los bytes
en orden de signicancia, terminando con el almacenamiento del
byte mas signicativo, en la direcci on de memoria mas alta (es
decir termina con el menor, de all little endian).
Esta situaci on se representa en pr oximo slide. A simple vista
pareciera que est an almacenados al rev es, ya que si lo miramos
en la memoria est a de atr as hacia adelante.
Otros procesadores utilizan el formato Big Endian, es decir
colocando la informaci on en el orden en el que normalmente
esperamos encontrarla.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 43 / 55
Tipos de Datos Almacenamiento en memoria
Little endian
Figura: IA-32 e Intel
R
64 : Alineamiento en memoria para los diferentes tipos
de datos
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 44 / 55
Tipos de Datos Almacenamiento en memoria
Little endian
La raz on por la que Intel adopt o Little Endian, obedece a que el
procesador 8086 (y sus sucesores por cuesti on de
compatibilidad), administra la memoria de a bytes.
Esto signica que cada direcci on de memoria tiene una capacidad
de almacenamiento de 8 bits.
Por lo tanto, y debido a esta decisi on de dise no, es que un bus de
datos de 16 bits primero, 32 mas tarde, y 64 actualmente, se
conecta a bancos de memoria RAM Din amica organizados en
bytes.
Por lo tanto, cuando el procesador lee un dato de 64 bits a trav es
del bus de datos, cada byte de las direcciones de memoria que se
leen viaja por un byte del bus de datos, de acuerdo al
ordenamiento que la informaci on tiene en la memoria, de la
manera en que se muestra en el pr oximo slide.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 45 / 55
Tipos de Datos Almacenamiento en memoria
Little endian
Banco 0 Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6 Banco 7
0x00000000
0x00000008
0x00000010
0x00000018
0xFFFFFFF0
0xFFFFFFF8
0x7E 0x31 0x9C 0XB3 0x4D 0x00 0xCE 0xB7
0x33 0xDF 0x57 0X21 0x07 0xAA 0x4B 0x1A
0x33
0xDF
0x57
0X21
0x07
0xAA
0x4B
0x1A
Quadword
0x1A4BAA072157DF33
Data0
Data63
Bus de datos
T
e
r
m
i
n
a
l
e
s

d
e

D
a
t
o
s
d
e
l

p
r
o
c
e
s
a
d
o
r
Figura: IA-32 e Intel
R
64 : Alineamiento en memoria para los diferentes tipos
de datos
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 46 / 55
Tipos de Datos Alineaci on en memoria
Porque conviene alinear los datos?
Los procesadores IA-32 e Intel
R
64 no ponen restricciones
respecto de la alineaci on en memoria para las diferentes variables
de los programas (consecuencia favorable de la administraci on de
memoria de a bytes).
Esto otorga gran exibilidad a la hora de aprovechar al m aximo la
memoria.
Pero si una variable queda repartida en dos las diferentes, se
requerir an dos ciclos de lectura para accederla.
Esta situaci on se representa en el siguiente slide.
La variable se trae al procesador con dos lecturas de memoria
Estas dos lecturas de memoria son transparentes a nivel de
software (la aplicaci on no debe ser modicada en absoluto), ya
que el procesador aut onomamente realiza las dos lecturas.
Entonces cual es el problema?. La respuesta es: performance.
Dos ciclos de lectura en lugar de uno solo tornan mas lento el
acceso a la variable. Esto puede evitarse usando las directivas de
alineaci on que todos los lenguajes poseen.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 47 / 55
Tipos de Datos Alineaci on en memoria
Acceso a datos no alineados
Banco 0 Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6 Banco 7
0x00000000
0x00000008
0x00000010
0x00000018
0xFFFFFFF0
0xFFFFFFF8
0x7E 0x31 0x9C 0XB3 0x4D 0x00 0xCE 0xB7
0x33 0xDF 0x57 0X21 0x07 0xAA 0x4B 0x1A
0x33
0xB7
Quadword
0x1A4BAA072157DF33
Data0
Data63
Bus de datos
T
e
r
m
i
n
a
l
e
s

d
e

D
a
t
o
s
d
e
l

p
r
o
c
e
s
a
d
o
r
P
r
i
m
e
r

c
i
c
l
o

d
e

l
e
c
t
u
r
a
S
e
g
u
n
d
o

C
i
c
l
o

d
e

L
e
c
t
u
r
a
Figura: IA-32 e Intel
R
64 : Acceso a datos no alineados: Ejemplo con una
word
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 48 / 55
Tipos de Datos Representaci on de datos num ericos
Formato de Enteros con y sin signo
7 0
Byte Entero No Signado
15
0
Word Entera No Signada
31
0
Doble Word Entera No Signada
63
0
Quad Word Entera No Signada
7 0
Byte Entero Signado
15
0
Word Entera Signada
31
0
Doble Word Entera Signada
63 0
Quad Word Entera Signada
6
Signo
Signo
14
Signo
30
Signo
62
Figura: IA-32 e Intel
R
64 : Tama nos de datos enteros con y sin signo
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 49 / 55
Tipos de Datos Representaci on de datos num ericos
Rangos de Enteros con y sin signo
Formato Codicaci on Ca2
Signo
Positivo M aximo 0 11....11
. .
. .
Mnimo 0 00....01
Cero 0 00....00
Negativo Mnimo 1 11....11
. .
. .
M aximo 1 00....01
Indenido 1 00....00
Byte entero Signado 7 bits
Word entero Signado 15 bits
DoubleWord entero Signado 31 bits
QuadWord Signado 63 bits
Cuadro: Codicaci on de enteros signados
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 50 / 55
Tipos de Datos Representaci on de datos num ericos
Representaci on en punto otante
0
22 31 23
0 51 63 52
0
0
0 63 79 64
Bit de Signo
Bits de exponente (Ca2)
Bits de la Mantisa o significando (1.mantisa)
Extended Double: 1:15:64
Double Precision 1:11:52
Single Precisin 1:8:23
9 15 10 0
Half Precisin 1:5:10
Figura: Formato de Datos en representaci on de Punto Flotante
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 51 / 55
Tipos de Datos Representaci on de datos num ericos
Rangos de N umeros en punto otante
Tipo de Dato Longitud Precisi on Rango Normalizado (aproximado)
Binario Decimal
Half Precision 16 11 2
14
a 2
15
3,1x10
5
a 6,50x10
4
Single Precision 32 24 2
126
a 2
127
1,18x10
38
a 3,40x10
38
Double Precision 64 53 2
1022
a 2
11023
2,23x10
308
a 1,79x10
308
Extended Double Precision 80 64 2
16382
a 2
16383
3,37x10
4932
a 1,18x10
4932
Cuadro: Codicaci on de n umeros en Punto Flotante
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 52 / 55
La Pila Bases
Funcionamiento b asico
La pila (stack) es un area de memoria contigua, referenciada por un
segmento cuyo selector est a siempre en el registro SS del procesador.
El tama no de este segmento en el modo IA-32, puede llegar hasta 4
Gbytes de memoria, en especial cuando el sistema operativo utiliza el
modelo de segmentaci on Flat (como veremos en clases subsiguientes).
El segmento se recorre mediante un registro de prop osito general,
denominado habitualmente en forma gen erica stack pointer, y que en
estos procesadores seg un el modo de trabajo es el registro SP, ESP, o
RSP (16, 32, o 64 bits respectivamente).
Para guardar un dato en el stack el procesador tiene la instrucci on
PUSH, y para retirarlo, la instrucci on POP.
Cada vez que ejecuta PUSH, el procesador primero decrementa el
stack pointer (SP, ESP, o RSP) y luego escribe el dato en el stack, en la
direcci on apuntada por el registro de segmento SS, y el stack pointer
correspondiente al modo de trabajo.
Cada vez que ejecuta un POP, el procesador lee el tem apuntado por el
pas SS y el stack pointer, y luego incrementa este ultimo registro.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 53 / 55
La Pila Bases
Funcionamiento b asico
El stack es un segmento expand down, ya que a medida que lo utilizamos
(PUSH) su registro de desplazamiento se decrementa tendiendo a las
direcciones mas bajas de memoria (num ericamente menores).
Estas operaciones se pueden realizar en cualquier momento, pero hablando
mas generalmente, podemos armar que la pila se usa cuando:
Cuando llamamos a una subrutina desde un programa en Assembler,
mediante la instrucci on CALL.
Cuando el hardware mediante la interfaz adecuada enva una
Interrupci on al Procesador.
Cuando desde una aplicaci on, ejecutamos una Interrupci on de software
mediante la instrucci on INT type.
Cuando desde un lenguaje como el C se invoca a una funci on
cualquiera.
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 54 / 55
La Pila Bases
Funcionamiento b asico
El stack pointer debe apuntar a direcciones de memoria alineadas de
acuerdo con su ancho de bits.
Por ejemplo, el ESP (32 bits) debe estar alineado a double words.
Al denir un stack en memoria se debe cuidar el detalle de la alineaci on.
El tama no de cada elemento de la pila se corresponde con el atributo de
tama no del segmento (16, 32, o 64 bits), es decir, con el modo de
trabajo en el que est a el procesador, y no con el del operando en s.
Ej: PUSH AL, consume 16, 32, o 64 bits dependiendo del tama no del
segmento. Nunca consume 8 bits.
El valor en que se decrementa el Stack Pointer se corresponde con el
tama no del segmento (2, 4, u 8 bytes).
Alejandro Furfaro () Procesadores IA-32 e Intel c 64 Abril 2012 55 / 55

También podría gustarte