1 / 75

Funcionamiento de los Computadores

Funcionamiento de los Computadores. I gnacio 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.

hallie
Download Presentation

Funcionamiento de los Computadores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Funcionamiento de los Computadores Ignacio Alvarez García Octubre - 2004

  2. 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

  3. 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 MOV X,3 MOV Z,X ADD Z,Y 0 7 2 El computador Contenido Dirección 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: 00000000 Obtiene operandos Calcula resultado Y: Datos codificados en binario 00000111 Z: 00000010 . . .

  4. Partes 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

  5. Ejemplo: x=3; z=x+y; Ejecución de instrucciones CPU Cont. Prog.: Inst1 Instrucción: Operando1: Operando2: ALU Resultado: Contenido Dirección 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: 00000000 0 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  6. Ejemplo: x=3; z=x+y; 11101100 Ejecución de instrucciones CPU Cont. Prog.: Inst1 Instrucción: Operando1: Operando2: ALU Resultado: Contenido Dirección 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: 00000000 0 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  7. Ejemplo: x=3; z=x+y; Ejecución de instrucciones CPU Cont. Prog.: Inst1 Instrucción: MOV X,3 11101100 Operando1: Operando2: ALU Resultado: Contenido Dirección 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: 00000000 0 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  8. Ejemplo: x=3; z=x+y; Ejecución de instrucciones CPU Cont. Prog.: Inst1 Instrucción: MOV X,3 11101100 Operando1: 00000011 Operando2: ALU Resultado: Contenido Dirección 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: 00000000 0 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  9. Ejemplo: x=3; z=x+y; 00000011 Ejecución de instrucciones CPU Cont. Prog.: Inst1 Instrucción: MOV X,3 11101100 Operando1: 00000011 Operando2: ALU Resultado: Contenido Dirección 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: 00000000 0 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  10. Ejemplo: x=3; z=x+y; 00000011 3 Ejecución de instrucciones CPU Cont. Prog.: Inst1 Instrucción: MOV X,3 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000000 0 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  11. Ejemplo: x=3; z=x+y; +1 Ejecución de instrucciones CPU Cont. Prog.: Inst1 Inst2 Instrucción: MOV X,3 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  12. Ejemplo: x=3; z=x+y; 11101011 Ejecución de instrucciones CPU Cont. Prog.: Inst2 Instrucción: Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  13. Ejemplo: x=3; z=x+y; Ejecución de instrucciones CPU Cont. Prog.: Inst2 Instrucción: MOV Z,X 11101011 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  14. Ejemplo: x=3; z=x+y; 00000011 Ejecución de instrucciones CPU Cont. Prog.: Inst2 Instrucción: MOV Z,X 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  15. Ejemplo: x=3; z=x+y; 00000011 Ejecución de instrucciones CPU Cont. Prog.: Inst2 Instrucción: MOV Z,X 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  16. Ejemplo: x=3; z=x+y; 00000011 3 Ejecución de instrucciones CPU Cont. Prog.: Inst2 Instrucción: MOV Z,X 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000010 2 . . .

  17. Ejemplo: x=3; z=x+y; +1 Ejecución de instrucciones CPU Cont. Prog.: Inst2 Inst3 Instrucción: MOV Z,X 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  18. Ejemplo: x=3; z=x+y; 01101101 Ejecución de instrucciones CPU Cont. Prog.: Inst3 Instrucción: Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  19. Ejemplo: x=3; z=x+y; Ejecución de instrucciones CPU Cont. Prog.: Inst3 Instrucción: ADD Z,Y 01101101 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  20. Ejemplo: x=3; z=x+y; 00000111 Ejecución de instrucciones CPU Cont. Prog.: Inst3 Instrucción: ADD Z,Y 11101100 Operando1: 00000011 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  21. Ejemplo: x=3; z=x+y; 00000011 Ejecución de instrucciones CPU Cont. Prog.: Inst3 Instrucción: ADD Z,Y 11101100 Operando1: 00000111 Operando2: ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  22. Ejemplo: x=3; z=x+y; 00001010 Ejecución de instrucciones CPU Cont. Prog.: Inst3 Instrucción: ADD Z,Y 11101100 Operando1: 00000111 Operando2: 00000011 ALU Resultado: 00000011 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  23. Ejemplo: x=3; z=x+y; 00001010 10 Ejecución de instrucciones CPU Cont. Prog.: Inst3 Instrucción: ADD Z,Y 11101100 Operando1: 00000111 Operando2: 00000011 ALU Resultado: 00001010 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00000011 3 . . .

  24. Ejemplo: x=3; z=x+y; +1 Ejecución de instrucciones CPU Cont. Prog.: Inst3 Inst4 Instrucción: ADD X,Y 11101100 Operando1: 00000111 Operando2: 00000011 ALU Resultado: 00001010 Contenido Dirección 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: 00000011 3 Obtiene operandos Calcula resultado Y: 00000111 7 Z: 00001010 10 . . .

  25. 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

  26. Lenguajes de alto y bajo nivel • Ejemplo: Programa de máquina Programa de alto nivel #include <stdio.h> #include <stdlib.h> main() { int i; float x; i=7; x=1; while (i>=1) { x=x*i; i=i-1; } printf(“El factorial es %f”,x); } mov DWORD PTR _i$[ebp], 7 mov DWORD PTR _x$[ebp], 1F $L906: cmp DWORD PTR _i$[ebp], 1 jl SHORT $L907 fild DWORD PTR _i$[ebp] fmul DWORD PTR _x$[ebp] fstp DWORD PTR _x$[ebp] mov eax, DWORD PTR _i$[ebp] sub eax, 1 mov DWORD PTR _i$[ebp], eax jmp SHORT $L906 $L907: fld DWORD PTR _x$[ebp] sub esp, 8 fstp QWORD PTR [esp] push OFFSET FACTORIAL call _printf add esp, 12 11000111 01000101 11111100 00001111 00000000 00000000 00000000

  27. 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 Alto nivel

  28. 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) Editor .C main() { int i; . . . printf(“x=%d.. } Compilador .OBJ .LIB _printf: 11011100 11010100 … extern _main exports _printf … _main: 00011100 00010100 … exports _main extern _printf Enlazador .EXE 00011100 00010100 11011100 11010100 ... Alto nivel → código máquina

  29. 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 Ejecución del programa .EXE 00011100 00010100 11011100 11010100 ... Cargador 00011100 00010100 11011100 11010100 . . . . . . . . .

  30. Partes del programa: Código Conjunto de funciones Datos Variables globales (datos) Variables locales: Pila (stack) Variables de almacenamiento dinámico: Montón (heap) El programa en memoria Código Datos Pila Montón

  31. 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 La zona de memoria de código Código Datos Pila Montón tipodvto Funcion(tipo1 par1,tipo2 par2, …) { tipoL1 vloc1,vloc2,vloc3; tipoL2 vloc4,vloc5; . . . Sentencias; return valor; }

  32. El código está dividido en funciones La zona de memoria de código Factorial Código 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; } void main() { int x=8,y=3,c; c=CombNM(8,3); printf(“Comb=%d\n”,c); } CombNM main printf Datos Pila Montón

  33. 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 La zona de memoria de datos Código Datos Pila Montón tipoG1 vglob1,vglob2; tipodvto Funcion(tipo1 par1,tipo2 par2, …) { tipoL1 vloc1,vloc2,vloc3; tipoL2 vloc4,vloc5; . . . }

  34. 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 La zona de memoria de datos Código Datos Pila Montón

  35. 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. La zona de memoria de datos Código Datos Pila Montón

  36. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } Pila SP Montón

  37. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP ? c 3 y x 8 Montón

  38. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP DIR RET 1 8 n 5 m ? c 3 y x 8 DIR RET 1: Montón

  39. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP r ? num ? DIR RET 1 8 n 5 m ? c 3 y x 8 DIR RET 1: Montón

  40. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP DIR RET 2 x 8 r ? num ? DIR RET 1 DIR RET 2: 8 n 5 m ? c 3 y x 8 DIR RET 1: Montón

  41. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP 1 result i ? DIR RET 2 x 8 r ? num ? DIR RET 1 DIR RET 2: 8 n 5 m ? c 3 y x 8 DIR RET 1: Montón

  42. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP 40320 result i 9 DIR RET 2 x 8 r ? num ? DIR RET 1 DIR RET 2: 8 n 5 m ? c 3 y x 8 DIR RET 1: Montón

  43. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } 40320 9 DIR RET 2 8 SP r ? num 40320 DIR RET 1 DIR RET 2: 8 n 5 m ? c 3 y x 8 DIR RET 1: Montón

  44. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } 40320 9 SP DIR RET 3 x 3 r ? num 40320 DIR RET 1 8 n DIR RET 3: 5 m ? c 3 y x 8 DIR RET 1: Montón

  45. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP 1 result i 9 DIR RET 3 x 3 r ? num ? DIR RET 1 8 n DIR RET 3: 5 m ? c 3 y x 8 DIR RET 1: Montón

  46. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } SP 6 result i 4 DIR RET 3 x 3 r ? num ? DIR RET 1 8 n DIR RET 3: 5 m ? c 3 y x 8 DIR RET 1: Montón

  47. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\n”,c); } 6 4 DIR RET 3 3 SP r 6720 num 40320 DIR RET 1 8 n DIR RET 3: 5 m ? c 3 y x 8 DIR RET 1: Montón

  48. El funcionamiento de la pila La zona de memoria de datos Código 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; } void main() { int x=8,y=3,c; c=CombNM(x,y+2); printf(“Comb=%d\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

  49. Los 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

  50. . . . 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 1 Dispositivo 1 4000 11100111 5000 01101010 Interfaz dispositivo 2 Dispositivo 2 . . .

More Related