Académique Documents
Professionnel Documents
Culture Documents
Core i5
CORES
Core i7
CORES
CORES
y siguen surgiendo
unidad de ejecucin
CX DX
AH BH CH DH SP BP DI SI
AL BL CL DL
registros de segmento
CS DS SS ES
IP (o PC)
ALU
UC
cola de instrucciones
SR (FLAGS)
- de 32 bits (80386, +)
reg 16 bits + parte extendida (EAX, EBX, EBP, ESP, )
8
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
Mquina real
12
Segmentacin
13
Segmentacin (cont.)
14
15
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
Segmento datos
Los datos se direccionan mediante:
registro de segmento: DS registro de desplazamiento: BX, SI o DI
18
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
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
13
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.
;ax=5, dx=1
30
15
Ejemplo: in ax,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
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.
18
; 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).
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.
39
40
20
41
42
21
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
45
46
23
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
26
53
54
27
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
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
SP
Pila (stack)
0000h 0000h 0000h 0000h 0000h 0000h
A010h
29
SP
Pila (stack)
0000h 0000h 0000h 0000h
A010h
4300h
A00Eh
4001h 0000h
SP
Pila (stack)
0000h 4001h 0000h 0000h 4001h 0000h
A00Eh
30
SP
Pila (stack)
0000h 4001h 0000h 5001h
A00Eh
5700h
A00Ch
4001h 0000h
5800 RET
SP
Pila (stack)
5001h 4001h 0000h 5001h 4001h 0000h
5800h
A00Ch
31
5800 RET
SP
Pila (stack)
5001h 4001h 0000h 5001h
5800h
A00Ch
5001h
A00Eh
4001h 0000h
5100 RET
SP
Pila (stack)
5001h 4001h 0000h 5001h 4001h 0000h
5100h
A00Eh
32
5100 RET
SP
Pila (stack)
5001h 4001h 5001h
5100h
A00Eh
4001h
A010h
4001h -
33