Vous êtes sur la page 1sur 33

Procesador y ensamblador

Familia procesadores intel

Familia procesadores intel


Core i3 Clarkdale Sandy Bridge Ivy Bridge Haswell Lynnfield Clarkdale Sandy Bridge Sandy Bridge Ivy Bridge Ivy Bridge Haswell Haswell Bloomfield Lynnfield Gulftown Sandy Bridge Sandy Bridge-E Sandy Bridge-E Ivy Bridge Haswell Ivy Bridge-E Ivy Bridge-E Bloomfield Gulftown Sandy Bridge-E Ivy Bridge-E 2 2 2 2 4 2 4 2 4 2 4 2 4 4 6 4 6 4 4 4 4 6 4 6 6 6 CORES 32 nm 32 nm 22 nm 22 nm 45 nm 32 nm 32 nm 32 nm 22 nm 22 nm 22 nm 22 nm 45 nm 45 nm 32 nm 32 nm 32 nm 32 nm 22 nm 22 nm 22 nm 22 nm 45 nm 32 nm 32 nm 22 nm January 2010 February 2011 September 2012 September 2013 September 2009 January 2010 January 2011 February 2011 April 2012 April 2012 June 2013 June 2013 November 2008 September 2009 July 2010 January 2011 November 2011 February 2012 April 2012 June 2013 TBA TBA November 2008 March 2010 November 2011 TBA

Core i5

CORES

Core i7

CORES

Core i7 Extreme Edition

CORES

y siguen surgiendo

Diseo modular del 8086 (14 registros)


AX BX

unidad de ejecucin

CX DX

AH BH CH DH SP BP DI SI

AL BL CL DL

registros de segmento

registros de propsito general

CS DS SS ES

IP (o PC)

lgica de control del bus

ALU

UC

cola de instrucciones

SR (FLAGS)

unidad de interfaz con el bus (BIU)


4

Diseo modular del Pentium 4

Detalle del Intel i7

Registros arquitectura intel 32 bits (386 +)


Los registros se dividen en tres grupos: Registros de propsito general Registros de segmentos Registros especiales
- Registro de banderas (flags) - Registro puntero de instrucciones

Registros de propsito general

Los registros pueden ser de 2 tamaos diferentes:


- de 8/16 bits (8086, +)
AH, AL, BH, BL, / AX (AH AL), BX, BP, SI, DI,

- de 32 bits (80386, +)
reg 16 bits + parte extendida (EAX, EBX, EBP, ESP, )
8

Registros de propsito general (cont.)


AX: acumulador, instrucciones aritmticas BX: base, indicar un desplazamiento (offset) CX: contador, dentro bucles o iteraciones DX: datos, tambin para operaciones aritmticas SI (source index): desplazamiento relativo a datos origen DI (destination index): desplazamiento relativo a datos destino SP (stack pointer): puntero de la pila, direccin relativa al segmento de pila BP (base pointer): se utiliza para fijar el puntero de la pila
9

Registros de segmentos
CS (code segment): apunta a la base del segmento de cdigo, es decir, las instrucciones del programa DS (data segment): apunta a la base de un segmento de datos, es decir, el rea de memoria donde estn los datos SS (stack segment): apunta a la base del segmento de pila ES (extra segment): apunta a la base de un segmento de datos extra FS (80386, +): apunta a la base de un segmento de datos GS (80386, +): apunta a la base de un segmento de datos
10

Flags (indicadores)
(16 bits) CF (carry flag): bit de acarreo, se pone a uno si una operacin aritmtica genera un acarreo PF (parity flag): bit de paridad, se pone a 1 cuando el resultado de la operacin tiene un nmero par de 1s AF (auxiliar flag): bit auxiliar de acarreo, se utiliza cuando hay acarreo en operaciones con nmeros BCD (decimal codificado en binario) ZF (zero flag): bit de cero, se coloca a 1 cuando el resultado de una operacin es cero SF (sign flag): bit de signo, se activa para indicar que un nmero es positivo (complemento a dos)
11

Modelos de memoria
Modelo plano
FFFFh

Mquina terica
0000h

Modelo segmentado (Real)


FFFFFh

Dir. Lgica Dir. Fsica = Segmento. Selector. + Offset


00000h

Mquina real

12

Segmentacin

13

Segmentacin (cont.)

14

Cmo forma las direcciones?

15

Ejemplos: direccin lgica direccin fsica Direccin lgica


Segmento:Desplazamiento 2000H:0205H 5100H:1000H F000H:FFFFH 2010H:0105H 2020H:0005H 1900H:7205H

Direccin fsica
20205H 52000H FFFFFH ? ? ?

16

Puntero de instruccin (IP o CP) La siguiente instruccin a ejecutar en el procesador se localiza en la direccin CS:IP. Todas las instrucciones de ruptura de secuencia modifican el contenido del registro IP y pueden modificar tambin el registro CS si la direccin de salto se encuentra en un segmento diferente.

17

Segmentos y registros asociados Segmento cdigo


Cada instruccin se direcciona mediante:
registro de segmento: CS registro de desplazamiento: IP

Segmento datos
Los datos se direccionan mediante:
registro de segmento: DS registro de desplazamiento: BX, SI o DI

18

Segmentos y registros asociados (cont.) Segmento pila


Los datos se direccionan mediante:
registro de segmento: SS registro de desplazamiento: SP o BP

Segmento extra
Los datos se direccionan mediante:
registro de segmento: ES registro de desplazamiento: BX, SI o DI

19

Prefijos de segmento
Combinaciones entre los cuatro registros de segmentos y los seis registros de desplazamiento

CS IP SP BP BX SI DI
si no prefijo prefijo prefijo prefijo

SS
no si por defecto prefijo prefijo prefijo

DS
no no prefijo por defecto por defecto por defecto

ES
no no prefijo prefijo prefijo por defecto
20

10

Longitud de los datos

Palabra

Doble palabra

21

Constantes
Existen cinco tipos:
- Binario 1011b - Decimal 129d - Hexadecimal 0E23h (no puede empezar por letra) - Octal 1477q (puede especificarse q u o) - Carcter ABC (las comillas pueden ser simples o dobles)

22

11

Operadores
Un operador es un modificador que se usa en el campo de operandos de una instruccin. Se puede utilizar varios operadores y combinar entre s en una sentencia. Existen cinco clases de operadores:
Aritmticos Lgicos Relacionales De retorno de valores De atributos
+, -, *, /, MOD, AND, OR, NOT, EQ, NE, LT, OFFSET, TYPE, BYTE PTR, WORD PTR,

23

Algunas instrucciones
ADC (sumar con acarreo) ADD (sumar) CALL (llamar a una subrutina) CMP (comparar dos operandos) DEC (decrementar) DIV (dividir sin signo) IN (entrada) INC (incrementar) JMP (saltar / bifurcar incondicionalmente) LEA (cargar direccin efectiva) LOOP (ciclar) MOV (transferir datos) MUL (multiplicar sin signo) NEG (negar) OUT (salida) POP (sacar palabra de la pila) PUSH (introducir palabra en la pila) RET (retornar de una subrutina) SUB (restar) Saltos condicionales
24

12

ADC (sumar con acarreo) Sintaxis: ADC destino, origen


- Suma los operandos origen, destino y el valor del indicador de acarreo (CF: 0 1) almacenando el resultado en el operando destino. - Se utiliza normalmente para sumar nmeros grandes, de ms de 16 bits, en varios pasos, considerando lo que nos llevamos (el acarreo) de la suma anterior.

Ejemplos: add ax,cx adc bx,dx

;fuente en dx,cx ;destino en bx,ax


25

ADD (sumar dos operandos)


Sintaxis: ADD destino, origen
- Suma los operandos destino y origen almacenando el resultado en el operando destino. - El acarreo se activa si se desborda el registro destino durante la suma. - Los operandos deben ser del mismo tipo.

Ejemplos: add ax,bx add cl,012h


26

13

CALL (llamar a una subrutina)


Sintaxis: CALL destino
- Transfiere el control del programa a una subrutina / procedimiento, salvando previamente en la pila la direccin de la instruccin siguiente, para poder volver a ella una vez ejecutado el procedimiento. - Se almacena en la pila una direccin de retorno de 16 bits o dos palabras de 16 bits indicando en este ltimo caso tanto el offset (IP) como el segmento (CS) a donde volver (funciona como el push).

Ejemplos: call proc1 proc1 proc . ret proc1 endp


27

CMP (comparar dos operandos)


Sintaxis: CMP destino, origen
- Resta origen de destino (dest orig) sin retornar el resultado. Los operandos quedan inalterados, pero los indicadores se actualizan, pudindose consultar a continuacin mediante una instruccin de bifurcacin condicional (je, jge,). - Los operandos pueden ser de tipo byte o palabra pero ambos deben ser de la misma dimensin.

Ejemplos: cmp bx, word ptr ds:[di] cmp ch,cl


28

14

DEC (decrementar)
Sintaxis: DEC destino
- Resta una unidad del operando destino. El operando puede ser un byte o una palabra. - Si todos los bits estn en 0, pasarn a 1 con un DEC. - Typecast imprescindible en el caso de un operando de memoria.

Ejemplos: dec ax dec word ptr ds:[di]


29

DIV (dividir sin signo)


Sintaxis: DIV origen (origen no puede ser operando inmediato)
- Divide, sin considerar el signo, un nmero contenido en el acumulador y su extensin (AH, AL si el operando es de tipo byte o DX, AX si el operando es palabra) entre el operando origen. - El cociente se guarda en AL o AX y el resto en AH o DX segn el operando sea byte o palabra respectivamente. DX o AH deben ser cero antes de la operacin. - Si el cociente es mayor que el resultado mximo que puede almacenarse, entonces el cociente y resto quedan indefinidos, producindose una interrupcin tipo cero. - En caso de que las partes ms significativas del cociente tengan un valor distinto de cero se activan los indicadores CF y OF.

Ejemplos: mov ax,11 mov bx,2 div bx

;ax=5, dx=1
30

15

IN (entrada) Sintaxis: IN acumulador,puerta


- Transfiere un byte o una palabra de una puerta de entrada del procesador al registro AL o AX, respectivamente.

Ejemplo: in ax,012h

;leer sobre AX una ;palabra de la puerta 012h

31

INC (incrementar)
Sintaxis: INC destino
- Incrementa el operando destino. El operando destino puede ser un byte o un word (palabra). - Si todos los bits estn en 1, pasarn a 0 con un INC y se truncar el nmero de bits del operando - Typecast imprescindible en el caso de un operando de memoria Ejemplos: inc al inc word ptr ss:[sp+4] inc word ptr es:[bx+di+7]
32

16

JMP (saltar / bifurcar)


Sintaxis: JMP direccin o JMP SHORT direccin
- Transfiere el control incondicionalmente a la direccin indicada en el operando. - Las direcciones destino de salto se pueden especificar mediante etiquetas.

Ejemplos: jmp etiqueta1 . etiqueta1: ;resto del cdigo


33

LEA (cargar direccin efectiva)


Sintaxis: LEA destino, origen
- Transfiere el desplazamiento del operando fuente al operando destino. - El operando destino debe ser un registro de propsito general (AX, BX, CX, DX, SI, DI, BP, SP) - En general, esta instruccin es equivalente a MOV destino,OFFSET fuente

Ejemplos: lea dx,datos[si] lea di,offset datos mov ax,ds:[di] ;accedemos a var. datos.
34

17

LOOP
Sintaxis: LOOP desplazamiento
- Decrementa el registro contador CX; si CX es cero, ejecuta la siguiente instruccin, en caso contrario transfiere el control a la direccin resultante de sumar a IP + desplazamiento. - El desplazamiento debe estar comprendido entre -128 y +127 de esta instruccin.

Ejemplos: mov cx,10 bucle: ....... ....... loop bucle


35

MOV (transferir de datos)


Sintaxis: MOV destino, origen
- Transfiere datos del operando origen al operando destino. - Tanto el operando origen como el operando destino puede ser cualquier registro o posicin de memoria. - Los dos operandos deben tener el mismo tamao.

Ejemplos: mov mov mov mov mov mov

ah,025h al,040h bx,0FFFFh ds,ax di,065h bp,ds:[di]

;ah=025h ;al=040h ;bx=0FFFFh ;ds=02540h ;di=00065h ;bp=(025465h)


36

18

MUL (multiplicar sin signo)


Sintaxis: MUL origen (origen no puede ser operando inmediato)
- Multiplica el contenido sin signo del acumulador (AX) por el operando origen. - Si el operando origen es de un byte el acumulador usado es AL guardndose el resultado en AX (si AH es distinto de 0 se activan los indicadores CF y OF). Si el operando origen es una palabra, el acumulador usado es AX almacenndose el resultado en DX y AX (si DX es distinto de cero los indicadores CF y OF se activan).

Ejemplos: mov ax,5 mov bx,10h mul bx

; ax=ax*bx= 5h*10h=50h

37

NEG (negar)
Sintaxis: NEG destino
- Calcula el valor negativo del operando, es decir, resta el operando de cero almacenando el resultado en el mismo lugar (complemento a 2 de un nmero).

Ejemplos: neg ax neg al neg byte ptr es:[bx+si+2]

38

19

OUT (salida)
Sintaxis: OUT puerta, acumulador
- Transfiere un byte o una palabra del registro AL o AX a una puerta de salida del procesador.

Ejemplos: out 012h,ax

;transferir el valor de ax ;al puerto 012h

39

POP (sacar palabra de la pila)


Sintaxis: POP destino
- Transfiere el dato (tipo palabra) que se encuentra en lo alto de la pila (apuntado por SP) al operando destino y luego incrementa el registro SP en dos (SP=SP+2).

Ejemplos: pop ax pop bx pop word ptr ds:[di]

40

20

PUSH (introducir palabra en la pila)


Sintaxis: PUSH origen
- Decrementa el puntero de pila (SP) en 2 (SP=SP-2) y luego transfiere la palabra especificada en el operando origen a lo alto de la pila. -

Ejemplos: push ax push bx push word ptr ds:[di]

41

RET (retornar de una subrutina)


Sintaxis: RET
- Retorna de una subrutina / procedimiento extrayendo de la pila la direccin de la siguiente direccin (funciona similar al pop).

Ejemplos: proc2 proc . ret proc2 endp

42

21

SUB (restar) Sintaxis: SUB destino, origen


- Resta el operando origen al operando destino, colocando el resultado en el operando destino. - Los operandos pueden tener o no tener signo, siendo necesario que sean del mismo tamao, byte o palabra.

Ejemplos: sub al,bl sub dx,dx sub word ptr es:[0],0CDh


43

Saltos condicionales
Las siguientes instrucciones son de transferencia condicional de control a la instruccin que se encuentra en la posicin IP + desplazamiento (comprendido entre -128 y +127) si se cumple la condicin. Algunas condiciones se pueden denotar de diversas maneras.

44

22

Instrucciones de transferencia condicional


JA/JNBE, JAE/JNB, JB/JNAE/JC, JBE/JNA, JCXZ, JE/JZ, JG/JNLE Saltar si es mayor (above) / si no es menor ni es igual (not below or equal) --- si CF=0 y ZF=0. Saltar si es mayor o igual (above or equal) / si no es menor (not below) --- si CF=0. Saltar si es menor (below) / si no es superior ni igual (not above or equal) / si hay acarreo --- si CF=1. Saltar si es menor o igual (not below or equal) / si no es mayor (not above) --- si CF=1 ZF=1. Saltar si CX=0. Saltar si es igual (equal) / si es cero (zero) --- si ZF=1. Saltar si es mayor (greater) / si no es menor ni igual (not less or equal) --- si ZF=0 y SF=0.

45

Instrucciones de transferencia condicional


JGE/JNL JL/JNGE JLE/JNG Saltar si es mayor o igual (greater or equal) / si no es menor (not less) --- si SF=0. Saltar si es menor (less) / si no es mayor ni igual (not greater or equal) --- si SF<>OF. Saltar si es menor o igual (less or equal) / si no es mayor (not greater) --- si ZF=0 y SF<>OF. Saltar si no hay acarreo --- si CF=0. Saltar si no es igual / si no es cero --- si ZF=0. Saltar si no hay desbordamiento --- si OF=0. Saltar si no hay paridad (impar) / si hay paridad impar --- si PF=0. Saltar si no hay signo / si es positivo --- si SF=0.

JNC JNE/JNZ JNO JNP/JPO JNS

46

23

Instrucciones de transferencia condicional


JO JP/JPE JS Saltar si hay desbordamiento --- si OF=1. Saltar si hay paridad (par) / si hay paridad par --- si PF=1. Saltar si hay signo --- si SF=1.

47

Modos de direccionamiento
Inmediato / valor Direccionamiento de registro Direccionamiento directo Direccionamiento indirecto Direccionamiento relativo a base Direccionamiento directo indexado Direccionamiento indexado a base
48

24

Direccionamiento inmediato / valor El operando fuente es un valor. Ejemplos: mov ax,25 ;ax=25 mov bl,023h ;bl= 23h add cx,2 ;cx=cx+2

49

Direccionamiento de registro Los dos operandos de la instruccin son registros. Ejemplos: mov ax,bx ;ax=bx mov bl,cl ;bl=cl add cx,dx ;cx=cx+dx

50

25

Direccionamiento directo (absoluto) El operando fuente es una direccin de memoria (una variable). Ejemplos:
prueba dw 1 ;Declaracin variable de dos bytes ........................ mov ax,prueba ;ax=prueba=1 add prueba,2 ;prueba=prueba+2 = 1+2=3

51

Direccionamiento indirecto
El operando se encuentra en un direccin apuntada por un registro ndice (SI, DI) por un registro base (BX, BP). Ejemplos:
mov ds,0h mov ax,[bx] ;ax=(ds:bx) Contenido de la direccin de ds:bx

mov ax,[bp] mov ax,[di] mov ax,[si]

;ax=(ss:bp) ;ax=(ds:di) ;ax=(ds:si)


52

26

Direccionamiento relativo a base


El operando se encuentra en la direccin apuntada por un registro base (BX, BP) ms un desplazamiento. Ejemplos:
mov ax,[bx]+4 mov ax,[bp]+4 mov ax,4+[bp] mov ax,[bp+4] ;ax=(ds : bx+4) ;ax=(ss : bp+4)

53

Direccionamiento directo indexado


El operando se encuentra en la direccin apuntada por un registro ndice (DI, SI) ms un desplazamiento. Ejemplo:
Array db 1,2,3,4,5 ;declaracin cadena de bytes. . mov ds, 0 mov di, 2 ; ds:di = 2 mov ax,[Array][di] ; ah=4 (Array[3]) , al=3 (Array [2])

54

27

Direccionamiento indexado a base


El operando se encuentra en la direccin apuntada por un registro base (BX, BP) ms un registro ndice (DI, SI) ms (opcionalmente) un desplazamiento. Ejemplos:
Array db 1,2,3,4,5 . mov bx, offset Array mov si, 2 mov ax,[bx+si] ;declaracin cadena de bytes ;bx direccin offset de Array ;ds:si = 2 ;ah=4 (Array[3]) , al=3 (Array [2])

Formatos vlidos: mov ax, [bx+si+desp] mov ax , [bx][si][desp]


55

Ejemplo
Una subrutina que suma los 10 primeros bytes a partir de la direccin de memoria 020000h y que guarda el resultado en la posicin 020100h.
1. 2. 3. 4. 5. 6. 7. 8. 9. mov al,0 mov bx,02000h mov ds,bx

;inicializo segmento de datos (direccin lgica:2000h ;real:20000h ->2000h*10h=20000h)

mov di,0 SigByte: add al,byte ptr ds:[di] ;suma al=al+posicin memoria inc di ;di=di+1 para la siguiente posicin de memoria cmp di,010 ;comparo con el mximo jne SigByte ;salto condicional si di!=10 (salta a SigByte =>204 ) mov ds:[100],al ;copio en memoria el resultado (direccin fsica o ;real= 20000h +100 =20100h).

56

28

Otro ejemplo
Mostrar los contenidos de la pila (stack), del registro stack pointer (SP) y del contador de programa (PC / IP) despus de la ejecucin de cada una de las instrucciones del siguiente programa. Asumir SS igual a 0000h.

57

4000 CALL SUB1

PC Antes de saltar 4000h a la subrutina SUB1

SP

Pila (stack)
0000h 0000h 0000h 0000h 0000h 0000h

A010h

A00Ch A00Eh A010h A00Ch A00Eh A010h


58

29

4000 CALL SUB1

PC Antes de saltar 4000h a la subrutina SUB1 Despus de saltar a la SUB1

SP

Pila (stack)
0000h 0000h 0000h 0000h

A010h

A00Ch A00Eh A010h A00Ch A00Eh A010h


59

4300h

A00Eh

4001h 0000h

5000 CALL SUB2

PC Antes de saltar 5000h a la subrutina SUB2

SP

Pila (stack)
0000h 4001h 0000h 0000h 4001h 0000h

A00Eh

A00Ch A00Eh A010h A00Ch A00Eh A010h


60

30

5000 CALL SUB2

PC Antes de saltar 5000h a la subrutina SUB2 Despus de saltar a la SUB2

SP

Pila (stack)
0000h 4001h 0000h 5001h

A00Eh

A00Ch A00Eh A010h A00Ch A00Eh A010h


61

5700h

A00Ch

4001h 0000h

5800 RET

PC Antes del RET de la subrutina SUB2

SP

Pila (stack)
5001h 4001h 0000h 5001h 4001h 0000h

5800h

A00Ch

A00Ch A00Eh A010h A00Ch A00Eh A010h


62

31

5800 RET

PC Antes del RET de la subrutina SUB2 Despus del RET de la SUB2

SP

Pila (stack)
5001h 4001h 0000h 5001h

5800h

A00Ch

A00Ch A00Eh A010h A00Ch A00Eh A010h


63

5001h

A00Eh

4001h 0000h

5100 RET

PC Antes del RET de la subrutina SUB1

SP

Pila (stack)
5001h 4001h 0000h 5001h 4001h 0000h

5100h

A00Eh

A00Ch A00Eh A010h A00Ch A00Eh A010h


64

32

5100 RET

PC Antes del RET de la subrutina SUB1 Despus del RET de la SUB1

SP

Pila (stack)
5001h 4001h 5001h

5100h

A00Eh

A00Ch A00Eh A010h A00Ch A00Eh A010h


65

4001h

A010h

4001h -

33

Vous aimerez peut-être aussi