Вы находитесь на странице: 1из 61

Arquitectura a Nivel de

Lenguaje
Mquina de la Familia
de procesadores x86

Evolucin de la
familia

Modelo de
Programacin
Modos de operacin
Registros del procesador
Tipos de datos
Modos de direccionamiento
Conjunto de instrucciones: IA-32

16-bit real mode:

Modos de
operacin

nico modo disponible en los procesadores 86-186.


Se conserva para compatibilidad con los procesadores de 16
bits.
Los registros de segmento permiten manejar la memoria
como bloques de 64KB.
20 bits de direcciones, i.e., memoria direccionable 1MB.

16-bit protected mode:


El modo protegido restringe ciertas operaciones del
procesador, con el objetivo de poder implementar
protecciones en el sistema operativo.
Los registros de segmento son apuntadores a tablas de
descriptores.
Memoria direccionable 24 bits, 16MB.

Modos de
operacin
32-bit protected mode:
Se introduce el modo de direccionamiento plano
de 32 bits.
Se introduce la gestin de memoria paginada y el
manejo de memoria virtual.

64-bit long mode:


Es el nico modo que permite acceso a registros
de 64 bits.
Algunos cambios al conjunto de instrucciones
disponibles.

Todos los procesadores inician en modo real y


el S.O. hace el cambio a uno de los otros
modos.

Registros de
propsito general
Los registros de propsito general se
pueden acceder en varios tamaos: Byte,
Palabra de 16 bit (Word), palabra de 32
bits (Double word) y palabra de 64 bits
(Quad word).

Registros de propsito
general

Registros de
segmento

En la actualidad el modelo de memoria segmentada prcticamente no se usa.


En su lugar se usa el modelo de memoria plana (flat memory) donde todo el
espacio de memoria se mapea como un arreglo lineal con direcciones de 32
bits.
La paginacin, aunque de suprema importancia para el SO es transparente
para el programador.

Registro de banderas
(flags)

Contador de
Programa
(Instruction
Pointer)

Little-endian vs. Bigendian


Dos alternativas para guardar palabras de ms de
8 bits, cuando la memoria est organizada por
bytes.
Ejemplo:
Sea la palabra de 32 bits 1A2B3CF4h

Tipos de datos (1)


General:

Palabra
Palabra
Palabra
Palabra

de
de
de
de

8 bits: byte
16 bits: word
32 bits: double word
64 bits: quad word

Enteros: Nmeros enteros signados


representados en notacin de complemento a 2.
Su rango es -2b-1..0..2b-1-1.
Ordinales: Nmeros enteros sin signo en el rango
0..2b-1.

Tipos de datos (2)


Nmeros BCD: Nmeros decimales
codificados en binario empaquetados.
Punteros: Direcciones de memoria de 32
bits/64 bits.
Campo de bits: Secuencia contigua de bits
de longitud mxima 232-1.
Cadena de bytes: Una secuencia de bytes
de hasta 232-1 bytes.

Tipos de datos (3)


Punto flotante Formatos IEEE 754
Precisin sencilla: 32 bits
Precisin doble: 64 bits
Precisin doble ampliada: 80 bits

Tipos de datos (4)


Valores especiales en punto flotante:

Valores denormalizados:
Si el exponente son todos ceros, pero la
fraccin es distinta de cero, entonces se
asume que el bit inicial es cero. En este
caso:

Dnde estn los


operandos
Los operandos fuente y resultado
pueden estar en uno de los
siguientes
lugares
de
almacenamiento:
Registros de la CPU
Memoria principal
RAM
Memoria virtual
Cache

Dispositivo I/O

Modos de
direccionamiento

Modos de
direccionamiento

Ejemplo: La instruccin mov para


transferencia de datos
mov ax,bx ; De registro a registro
mov ax,1 ; Dato inmediato a registro
mov ax,[102h] ; Direccionamiento directo a
memoria
mov ax,[di] ; Indirecto por registro
mov ax,[bx+di] ; Indirecto con registro base
mov ax,[bx+di+10h]; Indirecto con registro
base, ndice y desplazamiento

Modos de
direccionamiento
Procesadores de 16
bits:

Modos de
direccionamiento
Procesadores de 32
bits:

Modos de
direccionamiento
Procesadores de 64
bits:

Lenguaje Mquina
y
El lenguaje mquina lo
constituyen los cdigos
Lenguaje
binarios tal como se almacenan en la memoria
Ensamblador
para que el procesador
los ejecute.

El lenguaje ensamblador asigna cdigos


nemotcnicos para facilitar el trabajo de un
programador.
La correspondencia es directa y se hace
automticamente utilizando un programa
ensamblador, por ejemplo:

MASM: Microsoft Macro Assembler


NASM: Netwide assembler
FRESH: Flat Assembler + IDE
Go: Assembler, Resource Compiler, Linker + IDE

Qu es un set de
instrucciones?

Es la coleccin completa de instrucciones


que son entendidas por la CPU, o que
puede ejecutar la CPU
Cdigo de mquina
Binario
Usualmente es representado con lenguaje
ensamblador

Elementos de una
instruccin

Cdigo de la operacin (op code)


Haga esto

Referencia a operandos fuente


a esto

Referencia a operandos resultado


y ponga el resultado aqu,

Referencia de la prxima instruccin


cuando haya terminado esta instruccin, siga
con esta

Representacin de las
instrucciones
Cada instruccin se representa con una
secuencia de bits nica:
La instruccin es dividida en campos
correspondientes a cada uno de los
elementos constituvivos.
En la mayora de los sets de instrucciones
se emplea ms de un formato.

Ejemplo

Conjunto de
Instrucciones
Segn su propsito se agrupan as:
Transferencia de datos
Aritmticas
Lgicas
Rotacin y desplazamiento
Control de flujo
Otras
Interrupciones

Directivas del
ensamblador

Instrucciones de
transferencia de
mov dst,src
datos
xchg dst,src
movzx reg,reg/mem
movsx reg,reg/mem
lea reg,[addr]
xlat

Instrucciones para
transferencia de
movsb / movsw / movsd
cadenas
stosb / stosw / stosd
lodsb / lodsw / lodsd
rep
Ejemplo:
lea esi, fuente
lea edi, destino
mov ecx, longitud
rep movsb

Instrucciones
Aritmticas (1)

add dst,src
sub dst,src
mul src
imul src
div src
idiv src
neg src

Instrucciones
Aritmticas (2)

adc dst,src
sbb dst,src
inc src
dec src
cmp arg1,arg2

Instrucciones Lgicas

and dst,src
or dst,src
xor dst,src
not src
test arg1,arg2
bt, bts, btr, btc dst,pos
bsf dst,src
bsr dst,src

Instrucciones
aritmticas/lgicas
para bloques (strings)

scasb / scasw / scasd


cmpsb / cmpsw / cmpsd
repe / repz / repne / repnz

Ejemplos

Instrucciones de
desplazamiento

shr src,bits
shl src,bits
sar src,bits
sal src,bits

Instrucciones de
rotacin

ror src,bits
rol src,bits
rcr src,bits
rcl src,bits

Instrucciones de control
de flujo (1)

jmp addr
je, jne
jb, jbe, ja, jae : Aritmtica sin signo
jg, jge, jl, jle : Aritmtica con signo
jo, jno
jnz, jz
jp, jpe, jnp
jcxz, jecxz : CX=0, ECX=0

Condiciones de salto
(Jcc)

Condiciones de salto
(Jcc)

Ejemplo: if/then/else

Ejemplo: Ciclo for


Sumar 2 vectores

Instrucciones para
manejo de
sti, cli :
Poner/Borrar
IF
banderas

std, cld :
Poner/Borrar DF
stc, clc, cmc : Poner/Borrar CF
sahf, lahf
setcc dst

Operacin de la pila

Pila descendente
Direccin del tope de la pila:
SS:SP (16 bit mode),
SS:ESP (32 bit mode),
RSP (64 bit mode)

El puntero de pila es la direccin


del ltimo dato escrito en la pila.

Instrucciones para
manejo de pila

push mem/reg
pop mem/reg
pushf, popf
pusha, popa
enter size,nestLevel
leave

Stack Frames (Marcos


de pila)

reas de memoria reservada en la


pila para las variables locales de
un procedimiento/funcin.
El registro RBP (64bit), SS:EBP
(32bit), SS:BP (16bit) se utiliza para
almacenar la direccin de comienzo
del marco.
Permiten la implementacin de
funciones recursivas.

Stack Frames

Instrucciones de control
de flujo (2)

call addr
ret
loop addr
loope, loopne, loopz, loopnz
addr

Convenciones de
llamadas

Los
compiladores
utilizan
distintas
convenciones sobre el orden de paso de
parmetros en la pila.
La forma ms usualmente utilizada en
lenguaje C es: Se insertan los argumentos
de derecha a izquierda (el primer
argumento queda en el tope de la pila).
El valor de retorno (si se puede ajustar en
una palabra de 32/64 bits) se retorna en
el registro EAX, RAX.
Otra convencin es que quien hace la
llamada, es responsable de limpiar la pila
al regresar.

Ejemplo: Fibonacci
Recursivo

Interrupciones

int n
into
iret

Otras instrucciones
(1)

nop : No operacin.
hlt : Detener el procesador. Solo continua
despus de una interrupcin o reset.
lock : Activa la seal lock del bus
durante la ejecucin de la instruccin
siguiente. Garantiza acceso exclusivo a
memoria. El operando destino debe ser
un direccionamiento a memoria.
wait
:
Asegura
la
ejecucin
de
instrucciones
de
punto
flotante
(pendientes, no enmascaradas) antes de
continuar la ejecucin.

Otras instrucciones
(2)

Entradas y salidas
in acc,port
out port,acc

Otras instrucciones (3)


Invocando el sistema
operativo

sysenter
CS SYSENTER_CS_MSR
EIP SYSENTER_EIP_MSR
SS SYSENTER_CS_MSR+8
ESP SYSENTER_ESP_MSR
Cambia a nivel de privilegio 0
sysexit
CS SYSENTER_CS_MSR+16
SS SYSENTER_CS_MSR+24
ESP ECX
EIP EDX
Cambia a nivel de privilegio 3
rdmsr, wrmsr : Leer escribir registros MSR

Otras instrucciones
(4)

rdtsc : Leer el timestamp counter. El


valor se incrementa monotnicamente
en cada periodo de clock. El resultado
de 64bits es devuelto en EDX:EAX. Para
ms
detalles:
http://en.wikipedia.org/wiki/Time_Stamp
_Counter
cpuid : Devuelve informacin sobre la
identificacin del procesador. Varias
consultas son posibles dependiendo del
valor presente en el registro EAX al
momento de ejecutar la instruccin.
Para
ms
detalles:
http://en.wikipedia.org/wiki/CPUID

Floating Point Unit


(FPU)

Los primeros miembros de


la familia x86 no disponan
de unidad de punto
flotante. Se utilizaba un
co-procesador, el x87, o
se implementaban por
software.
A partir de 386, todos los
procesadores incluyen la
FPU. Modelos recientes
han tenido mnimos
cambios arquitectnicos.

Arquitectura de la
FPU

La FPU cuenta con un conjunto de 8


registros, llamados ST0,...,ST7.
Los registros operan como una pila.
Las instrucciones de la FPU toman
los operandos del tope de la pila y
almacenan el resultado en la pila.
Las operaciones deben planificarse
utilizando
la
notacin
polaca
inversa (RPN).

Instrucciones de la
FPU (1)
Apilar (push) datos en
el tope de la pila
de registros

fld1 : Push 1.0


fld0 : Push 0.0
fldpi : Push PI
fld DWORD [reg/mem] : Push 32bit float
fild DWORD [reg/mem] : Push 32bit int
fld QWORD [reg/mem] : Push 64bit double
fld stN : Push a copy of stN

Desapilar (pop) datos del tope de la pila


de registros.
fstp DWORD [reg/mem] : Pop and store float
fstp QWORD [reg/mem] : Pop and store double
fst DWORD [reg/mem] : Store st0 (no pop)

Instrucciones de la
FPU (2)

Operaciones aritmticas bsicas

faddp : st1+st0
fsubp : st1-st0
fmulp : st1*st0
fdivp : st1/st0
fabs : |st0|
fsqrt : sqrt(st0)
fsin : sin(st0)
fcos : cos(st0)
fpatan : atan(st1,st0)

Ejemplo: Solucin
de la ec.
cuadrtica

Material de
referencia

Manuales de referencia de software de Intel


http://www.intel.com/products/processor/ma
nuals/
PC Assembly Language Paul Carter
http://www.drpaulcarter.com/pcasm/
Wikibooks x86 Assembly
http://en.wikibooks.org/wiki/X86_Assembly
Referencia en lnea del set de instrucciones:
http://siyobik.info/index.php?module=x86
Listado completo de instrucciones x86,
incluyendo cuando fueron aadidas:
http://en.wikipedia.org/wiki/X86_instruction_
listings

Вам также может понравиться