Documente Academic
Documente Profesional
Documente Cultură
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
_
+
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
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