Vous êtes sur la page 1sur 75

Funcionamiento de los

Computadores

Ignacio Alvarez García


Octubre - 2004
Indice
 Introducción al funcionamiento del computador

 Ejecución de instrucciones de máquina

 Lenguajes de alto y bajo nivel

 Las zonas de memoria de un programa

 Entrada/Salida
El computador
 Máquina de ejecución secuencial de instrucciones
 Programa=secuencia de instrucciones
 Instrucciones y datos almacenados en memoria
 Memoria organizada en direcciones
 Instrucciones, datos y operaciones en binario
Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100
MOV X,3 Decodifica Almacena
Inst2: 01101101
MOV Z,X Instrucciones codificadas instrucción resultado
en binario
Inst3: 11101011
ADD Z,Y
...
X: 00000000
0
Obtiene Calcula
Y: 00000111
7 Datos codificados en
operandos resultado
Z: binario
00000010
2
...
Partes del computador
 Unidad de Control (CU): CU
CPU
organiza el funcionamiento del
computador

registros
 Unidad Aritmético Lógica
(ALU): ejecuta operaciones ALU
aritméticas (+,-,*,/) y lógicas a
nivel de bit (AND, OR, …)
Registros: lugares de

almacenamiento temporal de
Memoria
información
 Memoria: lugar principal de
almacenamiento de
información (código y datos)
 Dispositivos de E/S:
permiten la comunicación con
el exterior
E/S
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
CPU
Instrucción:
Operando1:

Operando2:

ALU
Resultado:

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000000 0
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
CPU
Instrucción: 11101100
Operando1:

Operando2:

ALU
Resultado:

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000000 0
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
CPU
Instrucción: MOV X,3
11101100
Operando1:

Operando2:

ALU
Resultado:

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000000 0
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
CPU
Instrucción: MOV X,3
11101100
Operando1: 00000011
Operando2:

ALU
Resultado:

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000000 0
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
CPU
Instrucción: MOV X,3
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000000 0
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
CPU
Instrucción: MOV X,3
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011
00000000 3
0
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
+1
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst1
Inst2
CPU
Instrucción: MOV X,3
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst2
CPU
Instrucción: 11101011
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst2
CPU
Instrucción: MOV Z,X
11101011
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst2
CPU
Instrucción: MOV Z,X
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst2
CPU
Instrucción: MOV Z,X
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010 2
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst2
CPU
Instrucción: MOV Z,X
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000010
00000011 2
3
...
Ejecución de instrucciones
+1
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst2
Inst3
CPU
Instrucción: MOV Z,X
11101100
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011 3
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
CPU
Instrucción: 01101101
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011 3
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
CPU
Instrucción: ADD Z,Y
01101101
Operando1: 00000011
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011 3
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
CPU
Instrucción: ADD Z,Y
11101100
Operando1: 00000011
00000111
Operando2:

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011 3
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
CPU
Instrucción: ADD Z,Y
11101100
Operando1: 00000111
Operando2: 00000011

ALU
Resultado: 00000011

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011 3
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
CPU
Instrucción: ADD Z,Y
11101100
Operando1: 00000111
Operando2: 00000011

ALU
Resultado: 00000011
00001010

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011 3
...
Ejecución de instrucciones
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
CPU
Instrucción: ADD Z,Y
11101100
Operando1: 00000111
Operando2: 00000011

ALU
Resultado: 00001010

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00000011
00001010 10
3
...
Ejecución de instrucciones
+1
 Ejemplo: x=3; z=x+y;
Cont. Prog.: Inst3
Inst4
CPU
Instrucción: ADD X,Y
11101100
Operando1: 00000111
Operando2: 00000011

ALU
Resultado: 00001010

Dirección Contenido
000..00 01101100 Lee instrucción Pasa a siguiente
000..01 de memoria instrucción
00101110
000..10 11111100
...

Inst1: 11101100 MOV X,3 Decodifica Almacena


Inst2: 11101011 MOV Z,X instrucción resultado

Inst3: 01101101 ADD Z,Y


...
X: 00000011 3
Obtiene Calcula
Y: 00000111 7 operandos resultado
Z: 00001010 10
...
Lenguajes de alto y bajo nivel
 El computador ejecuta lenguaje máquina:
 Secuencias de 0s y 1s interpretadas como instrucciones
 Instrucciones muy sencillas (copiar, sumar, ...)
 Difícil de escribir, leer y depurar por el hombre
 Fácil de almacenar e interpretar por el computador

 El programador escribe lenguaje de alto nivel:


 Lenguaje textual con instrucciones no ejecutables
directamente por el computador
 Instrucciones más complejas
 Fácil de escribir, leer y depurar por el hombre
 Necesita un programa compilador o intérprete para convertir
a secuencia de instrucciones de máquina
Lenguajes de alto y bajo nivel
 Ejemplo:
Programa de alto nivel Programa de máquina
#include <stdio.h> mov DWORD PTR _i$[ebp], 7
#include <stdlib.h> mov DWORD PTR _x$[ebp], 1F
11000111
$L906: cmp DWORD PTR _i$[ebp], 1
main() 01000101
jl SHORT $L907
{ 11111100
fild DWORD PTR _i$[ebp]
int i; 00001111
fmul DWORD PTR _x$[ebp]
float x; 00000000
fstp DWORD PTR _x$[ebp]
00000000
mov eax, DWORD PTR _i$[ebp]
i=7; 00000000
sub eax, 1
x=1; mov DWORD PTR _i$[ebp], eax
while (i>=1) jmp SHORT $L906
{ $L907: fld DWORD PTR _x$[ebp]
x=x*i; sub esp, 8
i=i-1; fstp QWORD PTR [esp]
} push OFFSET FACTORIAL
call _printf
printf(“El factorial es %f”,x); add esp, 12
}
Alto nivel
 Ventajas  Inconvenientes
 Programación más cerca  Dificultad de acceso a
del lenguaje humano y todos los recursos de la
matemático máquina
 Lenguajes estructurados  El código máquina
y tipados resultante suele ser más
 Facilidad de escritura, grande y lento
lectura y depuración
 La complejidad se deja al
compilador
 Código portable de una
máquina a otra
Alto nivel → código máquina
Editor .C
 Pasos en la obtención main()
{
de código máquina: int i;
...
 Escribir código fuente printf(“x=%d..
}
(programa editor)

 Compilar código fuente Compilador .OBJ .LIB


(programa compilador) _main: _printf:
00011100 11011100
00010100 11010100
… …
exports _main extern _main
extern _printf exports _printf

 Enlazar código objeto y
librerías (programa Enlazador .EXE
00011100
enlazador) 00010100
11011100
11010100

...
Ejecución del programa
 Ejecución de un .EXE
00011100
programa: 00010100
11011100
 Cargar en memoria el 11010100

archivo ejecutable ...


(programa cargador)

 Poner en el PC la
Cargador 00011100
dirección de la 1ª 00010100
11011100
instrucción del programa 11010100
. . .
. . .
 O bien cargar en . . .
memoria y ejecutar paso
a paso con un programa
depurador
El programa en memoria
 Partes del programa:

 Código Código

Conjunto de funciones
Datos
 Datos
Variables globales (datos)
Pila
Variables locales: Pila (stack)
Variables de
almacenamiento dinámico:
Montón (heap) Montón
La zona de memoria de código
 El código está dividido en funciones
 Función: conjunto de instrucciones que
cumplen un objetivo común, separable del Código
resto y, en lo posible, reutilizable.
 Elementos de la función:
Datos
Parámetros
Variables locales
Sentencias de ejecución Pila
Valor devuelto
tipodvto Funcion(tipo1 par1,tipo2 par2, …)
{
tipoL1 vloc1,vloc2,vloc3; Montón
tipoL2 vloc4,vloc5;
...
Sentencias;

return valor;
}
La zona de memoria de código
 El código está dividido en funciones
Factorial
int Factorial(int x) CombNM
{
Código main
int i,result=1;
for (i=1;i<=x;i++) printf
result=result*i;
return result;
} Datos
int CombNM(int n,int m)
{
int num,r; Pila
num=Factorial(n);
r=num/Factorial(n-m);
return r;
}

void main() Montón


{
int x=8,y=3,c;
c=CombNM(8,3);
printf(“Comb=%d\n”,c);
}
La zona de memoria de datos
 Los datos son las variables utilizadas:
 Variable: zona reservada en direcciones de
memoria consecutivas, cuyo contenido Código
puede ser modificado y reutilizado por el
programa.
 Tipos de variables: Datos

Variables globales
Variables locales Pila
Parámetros de función
Variables de almacenamiento dinámico
tipoG1 vglob1,vglob2; Montón
tipodvto Funcion(tipo1 par1,tipo2 par2, …)
{
tipoL1 vloc1,vloc2,vloc3;
tipoL2 vloc4,vloc5;
...
}
La zona de memoria de datos
 Los datos son las variables utilizadas:
 Variables globales:
Se alojan en el segmento de datos Código
Su espacio se reserva al cargar el programa
y se mantiene en toda su duración
Todas las funciones tienen acceso a estas Datos
variables
Pila

Montón
La zona de memoria de datos
 Los datos son las variables utilizadas:
 Variables locales y parámetros de función:
Se alojan en el segmento de pila. Código
Su espacio se reserva al empezar a
ejecutar la función en que están declaradas,
y se libera al terminar su ejecución. Datos
Sólo la función que las declara puede
utilizarlas.
Pila
Las variables locales y parámetros se van
apilando en memoria al llamar a otras
funciones, y desapilando al salir.
Los parámetros son variables locales cuyo Montón
valor inicial se da en la llamada a la función.
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{
int i,result=1;
for (i=1;i<=x;i++)
result=result*i;
return result;
}

int CombNM(int n,int m)


{
int num,r;
num=Factorial(n); Pila
r=num/Factorial(n-m);
return r;
}

void main()
{
int x=8,y=3,c;
c=CombNM(x,y+2);
printf(“Comb=%d\n”,c); SP
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{
int i,result=1;
for (i=1;i<=x;i++)
result=result*i;
return result;
}

int CombNM(int n,int m)


{
int num,r;
num=Factorial(n);
r=num/Factorial(n-m);
return r;
}
SP ? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{
int i,result=1;
for (i=1;i<=x;i++)
result=result*i;
return result;
}

int CombNM(int n,int m)


{
int num,r;
num=Factorial(n); SP DIR RET 1
r=num/Factorial(n-m); 8 n
return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{
int i,result=1;
for (i=1;i<=x;i++)
result=result*i;
return result;
}

int CombNM(int n,int m)


SP ? r
{ ? num
int num,r;
num=Factorial(n); DIR RET 1
r=num/Factorial(n-m); 8 n
return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{
int i,result=1;
for (i=1;i<=x;i++)
result=result*i;
SP DIR RET 2
return result;
} 8 x

int CombNM(int n,int m)


? r
{ ? num
int num,r;
num=Factorial(n); DIR RET 1
DIR RET 2: r=num/Factorial(n-m); 8 n
return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ SP 1 result
int i,result=1;
for (i=1;i<=x;i++) ? i
result=result*i; DIR RET 2
return result;
} 8 x

int CombNM(int n,int m)


? r
{ ? num
int num,r;
num=Factorial(n); DIR RET 1
DIR RET 2: r=num/Factorial(n-m); 8 n
return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ SP 40320 result
int i,result=1;
for (i=1;i<=x;i++) 9 i
result=result*i; DIR RET 2
return result;
} 8 x

int CombNM(int n,int m)


? r
{ ? num
int num,r;
num=Factorial(n); DIR RET 1
DIR RET 2: r=num/Factorial(n-m); 8 n
return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ 40320
int i,result=1;
for (i=1;i<=x;i++) 9
result=result*i; DIR RET 2
return result;
} 8

int CombNM(int n,int m)


SP ? r
{ 40320 num
int num,r;
num=Factorial(n); DIR RET 1
DIR RET 2: r=num/Factorial(n-m); 8 n
return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ 40320
int i,result=1;
for (i=1;i<=x;i++) 9
result=result*i;
SP DIR RET 3
return result;
} 3 x

int CombNM(int n,int m)


? r
{ 40320 num
int num,r;
num=Factorial(n); DIR RET 1
r=num/Factorial(n-m); 8 n
DIR RET 3: return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ SP 1 result
int i,result=1;
for (i=1;i<=x;i++) 9 i
result=result*i; DIR RET 3
return result;
} 3 x

int CombNM(int n,int m)


? r
{ ? num
int num,r;
num=Factorial(n); DIR RET 1
r=num/Factorial(n-m); 8 n
DIR RET 3: return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ SP 6 result
int i,result=1;
for (i=1;i<=x;i++) 4 i
result=result*i; DIR RET 3
return result;
} 3 x

int CombNM(int n,int m)


? r
{ ? num
int num,r;
num=Factorial(n); DIR RET 1
r=num/Factorial(n-m); 8 n
DIR RET 3: return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ 6
int i,result=1;
for (i=1;i<=x;i++) 4
result=result*i; DIR RET 3
return result;
} 3

int CombNM(int n,int m)


SP 6720 r
{ 40320 num
int num,r;
num=Factorial(n); DIR RET 1
r=num/Factorial(n-m); 8 n
DIR RET 3: return r;
} 5 m
? c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
La zona de memoria de datos
Código
 El funcionamiento de la pila
Datos
int Factorial(int x)
{ 6
int i,result=1;
for (i=1;i<=x;i++) 4
result=result*i; DIR RET 3
return result;
} 3

int CombNM(int n,int m)


6720
{ 40320
int num,r;
num=Factorial(n); DIR RET 1
r=num/Factorial(n-m); 8
return r;
} 5
SP 6720 c
void main()
{ 3 y
int x=8,y=3,c;
c=CombNM(x,y+2); 8 x
DIR RET 1: printf(“Comb=%d\n”,c);
}
Montón
Los dispositivos de Entrada/Salida
CPU
 Dispositivos de E/S: CU

permiten la comuni-

registros
cación del computador
ALU
con el exterior
 Entrada: teclado, ratón,
conversor A/D, entrada
Memoria
digital, temporizador, …
 Salida: pantalla, impre-
sora, conversor D/A,
salida digital, …
 E y S: disco duro, comu-
nicación serie, paralelo,
red, …
E/S
Programación de E/S: puertos
 Puertos de E/S:
 Lugares de almacenamiento de información que, cuando
son leídos o escritos, provocan acciones en los dispositivos
de E/S
 Organizados en direcciones

CPU Memo E/S Interfaz Dispositivo


... dispositivo
1 1
4000 1 1 1 0 0 1 1 1

5000 0 1 1 0 1 0 1 0
Interfaz Dispositivo
... dispositivo
2 2
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
1 1100111
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
ESCRITO
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
OUT 3000,’a’
un dispositivo de
Salida: impresora
 El programador
escribe en un puerto
del dispositivo E/S Interfaz
impresora
 La electrónica del ...
0 1100001
interfaz genera las 3000
acciones
Impresora
correspondientes en
el dispositivo

M
Funcionamiento de dispositivos
 Funcionamiento de
ESPERA:
un dispositivo de TEST 2000,000000001b
JZ ESPERA
Entrada: teclado IN R0,2001

 La electrónica del
interfaz reacciona
ante cambios en el
dispositivo, E/S Interfaz
teclado
modificando el/los ...
puertos 2000 0 0000000
2001 1 0010111
 El programador lee
Teclado
del/los puertos del
dispositivo
Funcionamiento de dispositivos
 Funcionamiento de
ESPERA:
un dispositivo de TEST 2000,000000001b
JZ ESPERA
Entrada: teclado IN R0,2001

 La electrónica del
interfaz reacciona
ante cambios en el
dispositivo, E/S Interfaz
teclado
modificando el/los ...
puertos 2000 0 0000000
2001 1 0010111
 El programador lee
Teclado
del/los puertos del
dispositivo
Funcionamiento de dispositivos
 Funcionamiento de
ESPERA:
un dispositivo de TEST 2000,000000001b
JZ ESPERA
Entrada: teclado IN R0,2001

 La electrónica del
interfaz reacciona
ante cambios en el
dispositivo, E/S Interfaz
teclado
modificando el/los ...
puertos 2000 0 0000000
2001 1 0010111
 El programador lee
Teclado
del/los puertos del
dispositivo
Funcionamiento de dispositivos
 Funcionamiento de
ESPERA:
un dispositivo de TEST 2000,000000001b
JZ ESPERA
Entrada: teclado IN R0,2001

 La electrónica del
interfaz reacciona
ante cambios en el
dispositivo, E/S Interfaz
teclado
modificando el/los ...
puertos 2000 0 0000000
2001 1 0010111
 El programador lee
Teclado
del/los puertos del
dispositivo
Funcionamiento de dispositivos
 Funcionamiento de un
ESPERA:
dispositivo de Entrada: TEST 2000,000000001b
JZ ESPERA
teclado IN R0,2001
 La electrónica del
interfaz reacciona ante
cambios en el
dispositivo, modificando E/S Interfaz
el/los puertos ... teclado
 El programador lee 2000 0 0000000
del/los puertos del 2001 1 0010111
dispositivo
Teclado
Funcionamiento de dispositivos
 Funcionamiento de un
ESPERA:
dispositivo de Entrada: TEST 2000,000000001b
JZ ESPERA
teclado IN R0,2001
 La electrónica del
interfaz reacciona ante
cambios en el
dispositivo, modificando E/S Interfaz
el/los puertos ... teclado
 El programador lee 2000 0 0000001
RECIBIDO

del/los puertos del 2001 0 1100001


dispositivo
Teclado
Funcionamiento de dispositivos
 Funcionamiento de un
ESPERA:
dispositivo de Entrada: TEST 2000,000000001b
JZ ESPERA
teclado IN R0,2001
 La electrónica del
interfaz reacciona ante
cambios en el
dispositivo, modificando E/S Interfaz
el/los puertos ... teclado
 El programador lee 2000 0 0000001
RECIBIDO

del/los puertos del 2001 0 1100001


dispositivo
Teclado
Funcionamiento de dispositivos
 Funcionamiento de un
ESPERA:
dispositivo de Entrada: TEST 2000,000000001b
JZ ESPERA
teclado IN R0,2001
 La electrónica del
interfaz reacciona ante
cambios en el
dispositivo, modificando E/S Interfaz
el/los puertos ... teclado
 El programador lee 2000 0 0000001
RECIBIDO

del/los puertos del 2001 0 1100001


dispositivo
Teclado
Funcionamiento de dispositivos
 Funcionamiento de un
ESPERA:
dispositivo de Entrada: TEST 2000,000000001b
JZ ESPERA
teclado IN R0,2001
 La electrónica del
interfaz reacciona ante
cambios en el
dispositivo, modificando E/S Interfaz
el/los puertos ... teclado
 El programador lee 2000 0 0000001
RECIBIDO

del/los puertos del 2001 0 1100001


dispositivo
Teclado
Funcionamiento de dispositivos
 Funcionamiento de un
ESPERA:
dispositivo de Entrada: TEST 2000,000000001b
JZ ESPERA
teclado IN R0,2001
 La electrónica del
interfaz reacciona ante
cambios en el
dispositivo, modificando E/S Interfaz
el/los puertos ... teclado
 El programador lee 2000 0 0000000
del/los puertos del 2001 0 1100001
dispositivo
Teclado
Sincronización de E/S
INST1
 Muestreo o polling: INST2
INST3
 El programa comprueba el
estado del dispositivo ...
ISR:
leyendo los puertos IN R0,2001
 Ocupa mucho tiempo de IRET

CPU
 Interrupciones:
 La CPU está ejecutando E/S Interfaz
otro programa ... teclado
 Cuando el dispositivo avisa
2000 0 0000000
de algún evento, se 2001 1 0010111
abandona temporalmente la
ejecución del programa y se Teclado
pasa a ejecutar una ISR. Se
retoma el programa al
terminar la ISR.
Sincronización de E/S
INST1
 Muestreo o polling: INST2
INST3
 El programa comprueba el
estado del dispositivo ...
ISR:
leyendo los puertos IN R0,2001
 Ocupa mucho tiempo de IRET

CPU
 Interrupciones:
 La CPU está ejecutando E/S Interfaz
otro programa ... teclado
 Cuando el dispositivo avisa
2000 0 0000000
de algún evento, se 2001 1 0010111
abandona temporalmente la
ejecución del programa y se Teclado
pasa a ejecutar una ISR. Se
retoma el programa al
terminar la ISR.
Sincronización de E/S
INST1
 Muestreo o polling: INST2
INST3
 El programa comprueba el
estado del dispositivo ...
ISR:
leyendo los puertos IN R0,2001
 Ocupa mucho tiempo de IRET

CPU
 Interrupciones:
 La CPU está ejecutando E/S Interfaz
otro programa ... teclado
RECIBIDO
 Cuando el dispositivo avisa
2000 0 0000001
de algún evento, se 2001 0 1100001
abandona temporalmente la
ejecución del programa y se Teclado
pasa a ejecutar una ISR. Se
retoma el programa al
terminar la ISR.
Sincronización de E/S
INST1
 Muestreo o polling: INST2
INST3
 El programa comprueba el
estado del dispositivo ...
ISR:
leyendo los puertos IN R0,2001
 Ocupa mucho tiempo de IRET

CPU
 Interrupciones:
 La CPU está ejecutando E/S Interfaz
otro programa ... teclado
RECIBIDO
 Cuando el dispositivo avisa
2000 0 0000001
de algún evento, se 2001 0 1100001
abandona temporalmente la
ejecución del programa y se Teclado
pasa a ejecutar una ISR. Se
retoma el programa al
terminar la ISR.
Sincronización de E/S
INST1
 Muestreo o polling: INST2
INST3
 El programa comprueba el
estado del dispositivo ...
ISR:
leyendo los puertos IN R0,2001
 Ocupa mucho tiempo de IRET

CPU
 Interrupciones:
 La CPU está ejecutando E/S Interfaz
otro programa ... teclado
 Cuando el dispositivo avisa
2000 0 0000000
de algún evento, se 2001 0 1100001
abandona temporalmente la
ejecución del programa y se Teclado
pasa a ejecutar una ISR. Se
retoma el programa al
terminar la ISR.
Sincronización de E/S
INST1
 Muestreo o polling: INST2
INST3
 El programa comprueba el
estado del dispositivo ...
ISR:
leyendo los puertos IN R0,2001
 Ocupa mucho tiempo de IRET

CPU
 Interrupciones:
 La CPU está ejecutando E/S Interfaz
otro programa ... teclado
 Cuando el dispositivo avisa
2000 0 0000000
de algún evento, se 2001 0 1100001
abandona temporalmente la
ejecución del programa y se Teclado
pasa a ejecutar una ISR. Se
retoma el programa al
terminar la ISR.