Title: Funcionamiento de los Computadores
1Funcionamiento de los Computadores
Ignacio Alvarez García Octubre - 2004
2Indice
- 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
3El computador
- Máquina de ejecución secuencial de instrucciones
- Programasecuencia de instrucciones
- Instrucciones y datos almacenados en memoria
- Memoria organizada en direcciones
- Instrucciones, datos y operaciones en binario
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
Inst1
Instrucciones codificadas en binario
01101101
Inst2
11101011
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
Y
Datos codificados en binario
00000111
Z
00000010
. . .
4Partes del computador
CPU
CU
- Unidad de Control (CU) organiza el
funcionamiento del computador - Unidad Aritmético Lógica (ALU) ejecuta
operaciones aritméticas (,-,,/) y lógicas a
nivel de bit (AND, OR, ) - Registros lugares de almacenamiento temporal de
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
registros
ALU
Memoria
E/S
5Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Instrucción
Operando1
Operando2
ALU
Resultado
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
11101011
MOV Z,X
Inst2
01101101
ADD Z,Y
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
0
Y
00000111
7
Z
00000010
2
. . .
6Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Instrucción
Operando1
Operando2
ALU
Resultado
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
11101011
MOV Z,X
Inst2
01101101
ADD Z,Y
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
0
Y
00000111
7
Z
00000010
2
. . .
7Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Instrucción
11101100
MOV X,3
Operando1
Operando2
ALU
Resultado
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
0
Y
00000111
7
Z
00000010
2
. . .
8Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Instrucción
11101100
MOV X,3
Operando1
00000011
Operando2
ALU
Resultado
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
0
Y
00000111
7
Z
00000010
2
. . .
9Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Instrucción
11101100
MOV X,3
Operando1
00000011
Operando2
ALU
Resultado
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
0
Y
00000111
7
Z
00000010
2
. . .
10Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Instrucción
11101100
MOV X,3
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000000
0
Y
00000111
7
Z
00000010
2
. . .
11Ejecución de instrucciones
CPU
Cont. Prog.
Inst1
Inst2
Instrucción
11101100
MOV X,3
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000010
2
. . .
12Ejecución de instrucciones
CPU
Cont. Prog.
Inst2
Instrucción
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
11101011
MOV Z,X
Inst2
01101101
ADD Z,Y
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000010
2
. . .
13Ejecución de instrucciones
CPU
Cont. Prog.
Inst2
Instrucción
11101011
MOV Z,X
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000010
2
. . .
14Ejecución de instrucciones
CPU
Cont. Prog.
Inst2
Instrucción
11101100
MOV Z,X
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000010
2
. . .
15Ejecución de instrucciones
CPU
Cont. Prog.
Inst2
Instrucción
11101100
MOV Z,X
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000010
2
. . .
16Ejecución de instrucciones
CPU
Cont. Prog.
Inst2
Instrucción
11101100
MOV Z,X
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000010
2
. . .
17Ejecución de instrucciones
CPU
Cont. Prog.
Inst2
Inst3
Instrucción
11101100
MOV Z,X
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
18Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Instrucción
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
11101011
MOV Z,X
Inst2
01101101
ADD Z,Y
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
19Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Instrucción
01101101
ADD Z,Y
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
20Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Instrucción
11101100
ADD Z,Y
Operando1
00000011
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
21Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Instrucción
11101100
ADD Z,Y
Operando1
00000111
Operando2
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
22Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Instrucción
11101100
ADD Z,Y
Operando1
00000111
Operando2
00000011
ALU
Resultado
00000011
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
23Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Instrucción
11101100
ADD Z,Y
Operando1
00000111
Operando2
00000011
ALU
Resultado
00001010
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00000011
3
. . .
24Ejecución de instrucciones
CPU
Cont. Prog.
Inst3
Inst4
Instrucción
11101100
ADD X,Y
Operando1
00000111
Operando2
00000011
ALU
Resultado
00001010
Dirección
Contenido
Lee instrucción de memoria
Pasa a siguiente instrucción
000..00
01101100
000..01
00101110
000..10
11111100
. . .
Decodifica instrucción
Almacena resultado
11101100
MOV X,3
Inst1
MOV Z,X
11101011
Inst2
ADD Z,Y
01101101
Inst3
. . .
X
Obtiene operandos
Calcula resultado
00000011
3
Y
00000111
7
Z
00001010
10
. . .
25Lenguajes 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
26Lenguajes de alto y bajo nivel
Programa de alto nivel
Programa de máquina
include ltstdio.hgt include ltstdlib.hgt main()
int i float x i7 x1 while
(igt1) xxi ii-1
printf(El factorial es f,x)
mov DWORD PTR _iebp, 7 mov DWORD PTR
_xebp, 1F L906 cmp DWORD PTR _iebp,
1 jl SHORT L907 fild DWORD PTR
_iebp fmul DWORD PTR _xebp fstp DWORD PTR
_xebp mov eax, DWORD PTR _iebp sub eax,
1 mov DWORD PTR _iebp, eax jmp SHORT
L906 L907 fld DWORD PTR _xebp sub esp,
8 fstp QWORD PTR esp push OFFSET
FACTORIAL call _printf add esp, 12
11000111 01000101 11111100 00001111 00000000 00000
000 00000000
27Alto nivel
- Ventajas
- Programación más cerca del lenguaje humano y
matemático - Lenguajes estructurados y tipados
- Facilidad de escritura, lectura y depuración
- La complejidad se deja al compilador
- Código portable de una máquina a otra
- Inconvenientes
- Dificultad de acceso a todos los recursos de la
máquina - El código máquina resultante suele ser más grande
y lento
28Alto nivel ? código máquina
- Pasos en la obtención de código máquina
- Escribir código fuente (programa editor)
- Compilar código fuente (programa compilador)
- Enlazar código objeto y librerías (programa
enlazador)
29Ejecución del programa
- Ejecución de un programa
- Cargar en memoria el archivo ejecutable (programa
cargador) - Poner en el PC la dirección de la 1ª instrucción
del programa - O bien cargar en memoria y ejecutar paso a paso
con un programa depurador
.EXE
00011100 00010100 11011100 11010100 ...
Cargador
00011100 00010100 11011100 11010100 . . . . . . .
. .
30El programa en memoria
- Partes del programa
- Código
- Conjunto de funciones
- Datos
- Variables globales (datos)
- Variables locales Pila (stack)
- Variables de almacenamiento dinámico Montón
(heap)
Código
Datos
Pila
Montón
31La 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 resto y, en lo
posible, reutilizable. - Elementos de la función
- Parámetros
- Variables locales
- Sentencias de ejecución
- Valor devuelto
Código
Datos
Pila
Montón
tipodvto Funcion(tipo1 par1,tipo2 par2, )
tipoL1 vloc1,vloc2,vloc3 tipoL2
vloc4,vloc5 . . . Sentencias
return valor
32La zona de memoria de código
- El código está dividido en funciones
Factorial
Código
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(8,3)
printf(Combd\n,c)
CombNM
main
printf
Datos
Pila
Montón
33La zona de memoria de datos
- Los datos son las variables utilizadas
- Variable zona reservada en direcciones de
memoria consecutivas, cuyo contenido puede ser
modificado y reutilizado por el programa. - Tipos de variables
- Variables globales
- Variables locales
- Parámetros de función
- Variables de almacenamiento dinámico
Código
Datos
Pila
Montón
tipoG1 vglob1,vglob2 tipodvto Funcion(tipo1
par1,tipo2 par2, ) tipoL1
vloc1,vloc2,vloc3 tipoL2 vloc4,vloc5 .
. .
34La zona de memoria de datos
- Los datos son las variables utilizadas
- Variables globales
- Se alojan en el segmento de datos
- Su espacio se reserva al cargar el programa y se
mantiene en toda su duración - Todas las funciones tienen acceso a estas
variables
Código
Datos
Pila
Montón
35La 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.
- Su espacio se reserva al empezar a ejecutar la
función en que están declaradas, y se libera al
terminar su ejecución. - Sólo la función que las declara puede
utilizarlas. - 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 valor
inicial se da en la llamada a la función.
Código
Datos
Pila
Montón
36La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
Pila
SP
Montón
37La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
?
SP
c
3
y
x
8
Montón
38La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
SP
DIR RET 1
8
n
5
m
?
c
3
y
x
8
DIR RET 1
Montón
39La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
?
SP
r
?
num
DIR RET 1
8
n
5
m
?
c
3
y
x
8
DIR RET 1
Montón
40La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
SP
DIR RET 2
8
x
?
r
?
num
DIR RET 1
DIR RET 2
8
n
5
m
?
c
3
y
x
8
DIR RET 1
Montón
41La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
SP
1
result
?
i
DIR RET 2
8
x
?
r
?
num
DIR RET 1
DIR RET 2
8
n
5
m
?
c
3
y
x
8
DIR RET 1
Montón
42La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
SP
40320
result
9
i
DIR RET 2
8
x
?
r
?
num
DIR RET 1
DIR RET 2
8
n
5
m
?
c
3
y
x
8
DIR RET 1
Montón
43La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
40320
9
DIR RET 2
8
?
SP
r
40320
num
DIR RET 1
DIR RET 2
8
n
5
m
?
c
3
y
x
8
DIR RET 1
Montón
44La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
40320
9
SP
DIR RET 3
3
x
?
r
40320
num
DIR RET 1
8
n
DIR RET 3
5
m
?
c
3
y
x
8
DIR RET 1
Montón
45La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
SP
result
1
i
9
DIR RET 3
3
x
?
r
?
num
DIR RET 1
8
n
DIR RET 3
5
m
?
c
3
y
x
8
DIR RET 1
Montón
46La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
SP
6
result
4
i
DIR RET 3
3
x
?
r
?
num
DIR RET 1
8
n
DIR RET 3
5
m
?
c
3
y
x
8
DIR RET 1
Montón
47La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
6
4
DIR RET 3
3
6720
SP
r
40320
num
DIR RET 1
8
n
DIR RET 3
5
m
?
c
3
y
x
8
DIR RET 1
Montón
48La zona de memoria de datos
Código
- El funcionamiento de la pila
Datos
int Factorial(int x) int i,result1
for (i1iltxi) resultresulti
return result int CombNM(int n,int m)
int num,r numFactorial(n)
rnum/Factorial(n-m) return r void
main() int x8,y3,c cCombNM(x,y2)
printf(Combd\n,c)
6
4
DIR RET 3
3
6720
40320
DIR RET 1
8
5
SP
6720
c
3
y
x
8
DIR RET 1
Montón
49Los dispositivos de Entrada/Salida
CPU
CU
- Dispositivos de E/S permiten la comuni-cación
del computador con el exterior - Entrada teclado, ratón, conversor A/D, entrada
digital, temporizador, - Salida pantalla, impre-sora, conversor D/A,
salida digital, - E y S disco duro, comu-nicación serie, paralelo,
red,
registros
ALU
Memoria
E/S
50Programació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
E/S
Memo
Interfaz dispositivo 1
Dispositivo 1
1 1 1 0 0 1 1 1
4000
0 1 1 0 1 0 1 0
5000
Interfaz dispositivo 2
Dispositivo 2
. . .
51Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
1 1 1 0 0 1 1 1
3000
Impresora
M
52Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
53Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
54Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
55Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
56Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
57Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
58Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
ESCRITO
0 1 1 0 0 0 0 1
3000
Impresora
M
59Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Salida
impresora - El programador escribe en un puerto del
dispositivo - La electrónica del interfaz genera las acciones
correspondientes en el dispositivo
OUT 3000,a
E/S
Interfaz impresora
0 1 1 0 0 0 0 1
3000
Impresora
M
60Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
61Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
62Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
63Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
64Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
65Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
RECIBIDO
0 0 0 0 0 0 0 1
2000
0 1 1 0 0 0 0 1
2001
Teclado
66Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
RECIBIDO
0 0 0 0 0 0 0 1
2000
0 1 1 0 0 0 0 1
2001
Teclado
67Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
RECIBIDO
0 0 0 0 0 0 0 1
2000
0 1 1 0 0 0 0 1
2001
Teclado
68Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
RECIBIDO
0 0 0 0 0 0 0 1
2000
0 1 1 0 0 0 0 1
2001
Teclado
69Funcionamiento de dispositivos
- Funcionamiento de un dispositivo de Entrada
teclado - La electrónica del interfaz reacciona ante
cambios en el dispositivo, modificando el/los
puertos - El programador lee del/los puertos del dispositivo
ESPERA TEST 2000,000000001b JZ
ESPERA IN R0,2001
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
0 1 1 0 0 0 0 1
2001
Teclado
70Sincronización de E/S
INST1 INST2 INST3 . . .
ISR IN R0,2001 IRET
- Muestreo o polling
- El programa comprueba el estado del dispositivo
leyendo los puertos - Ocupa mucho tiempo de CPU
- Interrupciones
- La CPU está ejecutando otro programa
- Cuando el dispositivo avisa de algún evento, se
abandona temporalmente la ejecución del programa
y se pasa a ejecutar una ISR. Se retoma el
programa al terminar la ISR.
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
71Sincronización de E/S
INST1 INST2 INST3 . . .
ISR IN R0,2001 IRET
- Muestreo o polling
- El programa comprueba el estado del dispositivo
leyendo los puertos - Ocupa mucho tiempo de CPU
- Interrupciones
- La CPU está ejecutando otro programa
- Cuando el dispositivo avisa de algún evento, se
abandona temporalmente la ejecución del programa
y se pasa a ejecutar una ISR. Se retoma el
programa al terminar la ISR.
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
1 0 0 1 0 1 1 1
2001
Teclado
72Sincronización de E/S
INST1 INST2 INST3 . . .
ISR IN R0,2001 IRET
- Muestreo o polling
- El programa comprueba el estado del dispositivo
leyendo los puertos - Ocupa mucho tiempo de CPU
- Interrupciones
- La CPU está ejecutando otro programa
- Cuando el dispositivo avisa de algún evento, se
abandona temporalmente la ejecución del programa
y se pasa a ejecutar una ISR. Se retoma el
programa al terminar la ISR.
E/S
Interfaz teclado
RECIBIDO
0 0 0 0 0 0 0 1
2000
0 1 1 0 0 0 0 1
2001
Teclado
73Sincronización de E/S
INST1 INST2 INST3 . . .
ISR IN R0,2001 IRET
- Muestreo o polling
- El programa comprueba el estado del dispositivo
leyendo los puertos - Ocupa mucho tiempo de CPU
- Interrupciones
- La CPU está ejecutando otro programa
- Cuando el dispositivo avisa de algún evento, se
abandona temporalmente la ejecución del programa
y se pasa a ejecutar una ISR. Se retoma el
programa al terminar la ISR.
E/S
Interfaz teclado
RECIBIDO
0 0 0 0 0 0 0 1
2000
0 1 1 0 0 0 0 1
2001
Teclado
74Sincronización de E/S
INST1 INST2 INST3 . . .
ISR IN R0,2001 IRET
- Muestreo o polling
- El programa comprueba el estado del dispositivo
leyendo los puertos - Ocupa mucho tiempo de CPU
- Interrupciones
- La CPU está ejecutando otro programa
- Cuando el dispositivo avisa de algún evento, se
abandona temporalmente la ejecución del programa
y se pasa a ejecutar una ISR. Se retoma el
programa al terminar la ISR.
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
0 1 1 0 0 0 0 1
2001
Teclado
75Sincronización de E/S
INST1 INST2 INST3 . . .
ISR IN R0,2001 IRET
- Muestreo o polling
- El programa comprueba el estado del dispositivo
leyendo los puertos - Ocupa mucho tiempo de CPU
- Interrupciones
- La CPU está ejecutando otro programa
- Cuando el dispositivo avisa de algún evento, se
abandona temporalmente la ejecución del programa
y se pasa a ejecutar una ISR. Se retoma el
programa al terminar la ISR.
E/S
Interfaz teclado
0 0 0 0 0 0 0 0
2000
0 1 1 0 0 0 0 1
2001
Teclado