1. [ Arquitectura de Computadores ]
ORGANIZACIÓN DE LA COMPUTADORA
Präsentat
ion
Año 2010
Universidad Tecnológica Nacional
Facultad Regional Tucumán
Ingeniería en Sistemas de Información
1
2. 2
Präsentat
ion
[ Índice ]
43.1 Máquina de von Neumann
43.2 Fetch, decodificación, ejecución
43.3 Programación en assembler
43.4 Mecanismos de subrutinas
43.5 E/S e interrupciones
43.7
43.6 Estructuras de Interconexión
3. 3
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1
0
Memoria de 1024 × 8
Ejemplo:
¿Cómo sumar el contenido de
la posición 867 con el
contenido de la posición 562 y
almacenar el resultado en la
posición 778?
4. 4
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1
0
Memoria de 1024 × 8
Ejemplo:
¿Cómo sumar el contenido de
la posición 867 con el
contenido de la posición 562 y
almacenar el resultado en la
posición 778?
+
5. 5
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1
0
Memoria de 1024 × 8
Decoder & Read/Write
output
Solución:
1. Leer en la memoria la
posición 867
Dirección 867 Read
6. 6
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1
0
Memoria de 1024 × 8
Solución:
1. Leer en la memoria la
posición 867
2. Almacenar lo leído en un
registro externo
Decoder & Read/Write
output
AC
7. 7
[ Organización ]
Präsentat
ion
Máquina von Neumann
Memoria de 1024 × 8
Solución:
1. Leer en la memoria la
posición 867
2. Almacenar lo leído en un
registro externo
3. Leer en la memoria la
posición 562
AC
1023
:
867
:
778
:
562
:
2
1
0
Decoder & Read/Write
output
Dirección 562 Read
8. 8
[ Organización ]
Präsentat
ion
Máquina von Neumann
Memoria de 1024 × 8
Solución:
1. Leer en la memoria la
posición 867
2. Almacenar lo leído en un
registro externo
3. Leer en la memoria la
posición 562
4. Sumar lo leído con el
registro externo
AC
1023
:
867
:
778
:
562
:
2
1
0
Decoder & Read/Write
output
sumador
9. 9
[ Organización ]
Präsentat
ion
Máquina von Neumann
Memoria de 1024 × 8
Solución:
1. Leer en la memoria la
posición 867
2. Almacenar lo leído en un
registro externo
3. Leer en la memoria la
posición 562
4. Sumar lo leído con el
registro externo
5. Almacenar la suma en la
posición 778
1023
:
867
:
778
:
562
:
2
1
0
Decoder & Read/Write
sumador
Dirección 778 Write
input
10. 10
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1 Programa
0
Memoria de 1024 × 8
Solución general:
Decoder & Read/Write
Unidad de
aritmética
y lógica
Unidad
de control
11. 11
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1 Programa
0
Memoria de 1024 × 8
Solución general:
El programa le da
instrucciones a la
Unidad Central.
Ejemplo:
00100001 110110011
significa leer en la
memoria 110110011 y
almacenar la lectura
en el registro AC de la
ALU.
Decoder & Read/Write
Unidad de
aritmética
y lógica
Unidad
de control
12. 12
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1 Programa
0
Memoria de 1024 × 8
Solución general:
El programa le da
instrucciones a la
Unidad Central.
Ejemplo:
00100001 110110011
significa leer en la
memoria 110110011 y
almacenar la lectura
en el registro AC de la
ALU.
Decoder & Read/Write
Unidad de
aritmética
y lógica
Unidad
de control
Significa
leer y
almacenar
en AC
13. 13
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2
1 Programa
0
Memoria de 1024 × 8
Solución general:
El programa le da
instrucciones a la
Unidad Central.
Ejemplo:
00100001 110110011
significa leer en la
memoria 110110011 y
almacenar la lectura
en el registro AC de la
ALU.
Decoder & Read/Write
Unidad de
aritmética
y lógica
Unidad
de control
Significa lo que se
debe leer:
110110011 = 867
14. 14
[ Organización ]
Präsentat
ion
Máquina von Neumann
1023
:
867
:
778
:
562
:
2 :
1 110110011
0 000100001
Memoria de 1024 × 8
Solución general:
El programa le da
instrucciones a la
Unidad Central.
Ejemplo:
00100001 110110011
significa leer en la
memoria 110110011 y
almacenar la lectura
en el registro AC de la
ALU.
Decoder & Read/Write
Unidad de
aritmética
y lógica
Unidad
de control
15. 15
[ Organización ]
Präsentat
ion
Máquina von Neumann
Principios:
1. Los datos y las instrucciones se almacenan en una sola
memoria de lectura-escritura.
2. Los contenidos de esta memoria se direccionan indicando
su posición, sin considerar el tipo de dato contenido en la
misma.
3. La ejecución se produce siguiendo una secuencia de
instrucción tras instrucción (a no ser que dicha secuencia se
modifique explícitamente).
17. 17
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles • 1000 x 40 bit words
– Binary number
– 2 x 20 bit instructions
0 1 39
0 8 19 20 28 39
Codop Dirección Codop Dirección
Signo
Palabra número
Palabra instrucción
18. 18
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles
0 8 19
Codop Dirección
Palabra instrucción
• La parte codop (los primeros 8 bits) especifican cuál
instrucción será ejecutada.
• La parte de la dirección (los 12 bits restantes) especifican cuál
de las 1000 posiciones de memoria está implicada en la
instrucción. Esta parte es denominada X.
19. 19
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles
• Conjunto de registros ( en CPU)
– Memory Buffer Register (MBR)
– Memory Address Register (MAR)
– Instruction Register (IR)
– Instruction Buffer Register (IBR)
– Program Counter (PC)
– Accumulator (AC)
– Multiplier Quotient (MQ)
21. 21
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles de la estructura
MBR:
Memory Buffer Register
Contiene una palabra que debe
ser almacenada en la memoria, o
es usado para recibir una palabra
procedente de la memoria.
(CC)
22. 22
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles de la estructura
MAR:
Memory Adress Register
Especifica la dirección en
memoria de la palabra que va a
ser escrita o leída en MBR.
(CC)
23. 23
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles de la estructura
IR:
Instruction Register
Contiene los 8 bits del código de
operación de la instrucción que se
va a ejecutar.
(CC)
24. 24
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles de la estructura
IBR:
Instruction Buffer Register
Empleado para almacenar
temporalmente la instrucción
contenida en la parte derecha de
una palabra en memoria.
(CC)
25. 25
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles de la estructura
PC:
Program Counter
Contiene la dirección de la próxima
pareja de instrucciones que van a
ser captadas de la memoria.
(CC)
26. 26
[ Organización ]
Präsentat
ion
Máquina von Neumann
Detalles de la estructura
AC y MQ:
Accumulator y Multiplier
Quotient
Se emplean para almacenar
operandos y resultados de
operaciones de la ALU
temporalmente. Por ejemplo, el
resultado de multiplicar dos
números de 40 bits es un número
de 80 bits; los 40 bits más
significativos se almacenan en AC
y los menos significativos se
almacenan en MQ.
(CC)
27. 27
[ Organización ]
Präsentat
ion
Máquina von Neumann
INSTRUCCIONES DE TRANSFERENCIA DE DATOS:
• Se transfieren datos entre la memoria y los registros de la ALU
o entre dos registros de la ALU.
Codop Instrucción Descripción
00001010 LOAD MQ Transferir el contenido del registro
MQ a AC
00001001 LOAD MQ,M(X) Transferir el contenido de la
posición de memoria X a MQ
00100001 STOR M(X) Transferir el contenido de AC a la
posición de memoria X
00000001 LOAD M(X) Transferir M(X) a AC
00000010 LOAD –M(X) Transferir –M(X) a AC
00000100 LOAD |M(X)| Transferir |M(X)| a AC
28. 28
[ Organización ]
Präsentat
ion
Máquina von Neumann
INSTRUCCIONES DE SALTO INCONDICIONAL:
• Normalmente, la unidad de control ejecuta instrucciones
secuencialmente en la memoria. Las instrucciones de salto
pueden cambiar este orden (ej. Operaciones repetitivas).
Codop Instrucción Descripción
00001101 JUMP M(X,0:19) Saltar a la instrucción indicada
por la mitad izquierda de M(X)
00001110 JUMP M(X,20:39) Saltar a la instrucción indicada
por la mitad derecha de M(X)
29. 29
[ Organización ]
Präsentat
ion
Máquina von Neumann
INSTRUCCIONES DE SALTO CONDICIONAL:
• El salto depende de una condición, esto permite puntos de
decisión.
Codop Instrucción Descripción
00001111 JUMP +M(X,0:19) Si AC ≥ 0 saltar a la instrucción
indicada por la mitad izquierda
de M(X)
00001000 JUMP +M(X,20:39) Si AC ≥ 0 saltar a la instrucción
indicada por la mitad derecha de
M(X)
30. 30
[ Organización ]
Präsentat
ion
Máquina von Neumann
INSTRUCCIONES DE ARITMÉTICA:
• Son las operaciones realizadas por la ALU.
Codop Instrucción Descripción
00000101 ADD M(X) AC ← AC + M(X)
00000111 ADD |M(X)| AC ← AC + |M(X)|
00000110 SUB M(X) AC ← AC - M(X)
00001000 SUB |M(X)| AC ← AC - |M(X)|
00001011 MUL M(X) [AC][MQ] ← AC × M(X)
00001100 DIV M(X) [AC][MQ] ← AC ÷ M(X)
00010100 LSH AC ← AC × 2
00010101 RSH AC ← AC ÷ 2
31. 31
[ Organización ]
Präsentat
ion
Máquina von Neumann
INSTRUCCIONES DE MODIFICACIÓN DE DIRECCIONES:
• Permite que la ALU haga operaciones con las direcciones y
las inserte en instrucciones almacenadas en memoria. Esto
permite una considerable flexibilidad de direccionamiento en un
programa.
Codop Instrucción Descripción
00010010 STOR M(X,8:19) Reemplazar el campo de dirección
de la izquierda de M(X) por los 12
bits de la derecha de AC.
00010011 STOR M(X,28:39) Reemplazar el campo de dirección
de la derecha de M(X) por los 12
bits de la derecha de AC.
32. 32
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que sume el número almacenado en la
posición 867 más el número almacenado en la posición 562. El
resultado de la suma (sin considerar acarreo) se debe
almacenar en la posición 778.
33. 33
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que sume el número almacenado en la
posición 867 más el número almacenado en la posición 562. El
resultado de la suma (sin considerar acarreo) se debe
almacenar en la posición 778.
LOAD M(867) % transfiere el contenido de 867 a AC
ADD M(562) % AC ←←←← AC + M(562)
STOR M(778) % transfiere AC a la memoria 778
34. 34
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que sume el número almacenado en la
posición 867 más el número almacenado en la posición 562. El
resultado de la suma (sin considerar acarreo) se debe
almacenar en la posición 778.
LOAD M(867) % transfiere el contenido de 867 a AC
ADD M(562) % AC ←←←← AC + M(562)
STOR M(778) % transfiere AC a la memoria 778
35. 35
[ Organización ]
Präsentat
ion
Máquina von Neumann
LOAD M(867) 00000001 001101100011
ADD M(562) 00000100 001000110010
STOR M(778) 00100001 001100001010
¿Cómo se almacena el programa?
36. 36
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que divida el número almacenado en la
posición 867 por 8. El resultado de la división (sin considerar el
resto ni la parte fraccionaria) se debe almacenar en la posición
778.
37. 37
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que divida el número almacenado en la
posición 867 por 8. El resultado de la división (sin considerar el
resto ni la parte fraccionaria) se debe almacenar en la posición
778.
LOAD M(867) % transfiere el contenido de 867 a AC
RSH % divide el acumulador entre dos
RSH % divide el acumulador entre dos
RSH % divide el acumulador entre dos
RSH % divide el acumulador entre dos
STOR M(778) % transfiere AC a la memoria 778
38. 38
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que compare el número almacenado en la
posición 867 con el número almacenado en la posición 562. Si
el primero es menor que el segundo copiar el contenido de la
memoria 500 en la memoria 501, de lo contrario se almacena
en 501 el contenido de 867 menos el contenido de 562.
39. 39
[ Organización ]
Präsentat
ion
Máquina von Neumann
Ejercicio:
Escribir un programa que compare el número almacenado en la
posición 867 con el número almacenado en la posición 562. Si
el primero es menor que el segundo copiar el contenido de la
memoria 500 en la memoria 501, de lo contrario se almacena
en 501 el contenido de 867 menos el contenido de 562.
1. LOAD M(867) % transfiere el contenido de 867 a AC
2. SUB M(562) % AC ←←←← AC - M(562)
3. JUMP +M(3,28:39) % salta si AC ≥ 0 (i.e. M(867)≥ M(562))
4. LOAD M(500) % transfiere el contenido de 500 a AC
5. STOR M(501) % transfiere AC a la memoria 501
En la posición derecha de 3 debe estar almacenado 5, de
esta manera la tercera instrucción salta a la dirección 5
si AC ≥ 0.
40. 40
Präsentat
ion
[ Índice ]
43.1 Máquina de von Neumann
43.2 Fetch, decodificación, ejecución
43.3 Programación en assembler
43.4 Mecanismos de subrutinas
43.5 E/S e interrupciones
43.7
43.6 Estructuras de Interconexión
41. 41
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
1. Recuperar la siguiente
instrucción desde
memoria (apuntada por
el program counter) y
luego incrementar el
program counter.
2. Decodificar el patrón de
bits en el registro de
instrucción IR
3. Ejecutar la instrucción
indicada en el registro de
instrucción IR
Ciclo de instrucción
42. 42
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
Ciclo fetch (captación):
FUNCION: Lleva la siguiente instrucción de la memoria a la CPU
1. El program counter tiene la dirección de la siguiente
instrucción.
2. El procesador capta la instrucción de la memoria direccionada
por el PC.
3. Se incremente PC en 1.
4. El código de la instrucción se carga en IR.
43. 43
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
Ciclo decode (decodificación):
FUNCION: Decodifica los bits presentes en IR
1. Interpreta el código de operación.
44. 44
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
Ciclo execution (ejecución):
FUNCION: Ejecuta la instrucción.
• Procesador-memoria: transferencia CPU ↔ memoria
• Procesador-I/O: transferencia CPU ↔ módulo I/O
• Procesamiento de datos: operaciones aritméticas o lógicas
• Control: cambio de secuencias (eje: JUMP), etc.
• Combinación de las anteriores
45. 45
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
1. El PC contiene el
valor 300. Se carga
esta instrucción en IR
(esto implica el uso de
MAR y MBR)
Ejemplo:
46. 46
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
2. Los primeros 4 bits
de IR (“1”) indican que
el acumulador AC se
va a cargar con un
dato de la memoria.
Los restantes 12 bits
especifican la dirección
(es decir “940”).
Ejemplo:
47. 47
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
3. El registro de PC se
incrementa en uno
(toma el valor 301) y se
capta la siguiente
instrucción que se
carga en AC (5941).
Ejemplo:
48. 48
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
4. Los primeros 4 bits
(“5”) indican que la
instrucción es de suma
entre el acumulador y
una memoria. Los
siguientes 12 bits
indican la dirección de
memoria (“941”). El
contenido de AC y el
de la posición 941 se
suman y el resultado
se almacena en AC.
Ejemplo:
49. 49
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
5. El registro PC se
incrementa en 1 (toma
el valor 302) y se capta
la siguiente instrucción
(2941) desde la nueva
posición de memoria,
cargándola en AC.
Ejemplo:
50. 50
[ Organización ]
Präsentat
ion
Ciclos fetch, decode, exe
6. Los primeros 4 bits
indican (“2”) que el
acumulador se debe
almacenar en una
memoria. Los
siguientes 12 bits
indican la dirección de
la memoria (“941”). El
contenido de AC se
almacena en la
posición 941.
Ejemplo:
53. 53
Präsentat
ion
[ Índice ]
43.1 Máquina de von Neumann
43.2 Fetch, decodificación, ejecución
43.3 Programación en assembler
43.4 Mecanismos de subrutinas
43.5 E/S e interrupciones
43.7
43.6 Estructuras de Interconexión
54. 54
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
Esta operación se podría hacer en un microprocesador
teniendo las variables X, Y, Z almacenadas en la memoria,
por ejemplo: X en la posición 500, J en la 501 y K en la 502,
y ejecutando las siguientes instrucciones:
1. Cargar el contenido de 500 en el acumulador.
2. Sumar al acumulador el contenido de 501.
3. Sumar al acumulador el contenido de 502.
4. Almacenar el acumulador en la posición 503.
55. 55
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
Suponiendo un código binario para las instrucciones:
1. Cargar el contenido de 500 en el acumulador:
0010 0101 0000 0000
56. 56
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
Suponiendo un código binario para las instrucciones:
1. Cargar el contenido de 500 en el acumulador:
0010 0101 0000 0000
Este código significa cargar en el acumulador
el contenido de esto
(0101 0000 0000 significa 500)
57. 57
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
Suponiendo un código binario para las instrucciones:
1. Cargar el contenido de 500 en el acumulador:
0010 0101 0000 0000
2. Sumar al acumulador el contenido de 501.
0011 0101 0000 0001
3. Sumar al acumulador el contenido de 502.
0011 0101 0000 0010
4. Almacenar el acumulador en la posición 503.
0001 0101 0000 0011
58. 58
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
Además hay que poner en las direcciones 500, 501 y
502 los valores de las variables X, Y y Z:
500 0000 0000 0010 0001 X es 0021
501 0000 0000 0011 0010 Y es 0032
502 0000 0001 0001 1010 Z es 011A
59. 59
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
Programa en binario: Explicación
000 0010 0101 0000 0000 A ← (500)
001 0011 0101 0000 0001 A ← A + (501)
002 0011 0101 0000 0010 A ← A + (502)
003 0001 0101 0000 0011 (503) ← A
:
500 0000 0000 0010 0001 Dato X
501 0000 0000 0011 0010 Dato Y
502 0000 0001 0001 1010 Dato Z
503 0000 0000 0000 0000 Libre para escribir T
61. 61
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
000 0010 0101 0000 0000 000 2500
001 0011 0101 0000 0001 001 3501
002 0011 0101 0000 0010 002 3502
003 0001 0101 0000 0011 003 1503
:
500 0000 0000 0010 0001 500 0021
501 0000 0000 0011 0010 501 0032
502 0000 0001 0001 1010 503 011A
503 0000 0000 0000 0000 504 0000
Programa
en hexa
62. 62
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
000 0010 0101 0000 0000 000 LDA (500)
001 0011 0101 0000 0001 001 ADD (501)
002 0011 0101 0000 0010 002 ADD (502)
003 0001 0101 0000 0011 003 STA (503)
:
500 0000 0000 0010 0001 500 DAT 0021
501 0000 0000 0011 0010 501 DAT 0032
502 0000 0001 0001 1010 502 DAT 011A
503 0000 0000 0000 0000 503 DAT 0000
Programa
simbólico
63. 63
[ Organización ]
Präsentat
ion
Assembler
Ejemplo sencillo: implementar T = X + Y + Z
000 0010 0101 0000 0000 INICIO LDA (VX)
001 0011 0101 0000 0001 ADD (VY)
002 0011 0101 0000 0010 ADD (VZ)
003 0001 0101 0000 0011 STA (VT)
:
500 0000 0000 0010 0001 VX DAT 0021
501 0000 0000 0011 0010 VY DAT 0032
502 0000 0001 0001 1010 VZ DAT 011A
503 0000 0000 0000 0000 VT DAT 0000
Programa
en assembler
64. 64
Präsentat
ion
[ Índice ]
43.1 Máquina de von Neumann
43.2 Fetch, decodificación, ejecución
43.3 Programación en assembler
43.4 Mecanismos de subrutinas
43.5 E/S e interrupciones
43.7
43.6 Estructuras de Interconexión
65. 65
[ Organización ]
Präsentat
ion
Subrutinas
Uso de subrutinas:
Frecuentemente la misma pieza de código debe escribirse
varias veces en muchas partes diferentes de un programa.
En vez de repetir el código cada vez que sea necesario, hay
una ventaja obvia si las instrucciones comunes se escriben
solamente una vez.
Un conjunto de instrucciones comunes que pueden utilizarse
en un programa muchas veces se denomina subrutina.
66. 66
[ Organización ]
Präsentat
ion
Subrutinas
Uso de subrutinas:
Cada vez que la subrutina se utiliza en la parte del programa
principal, una ramificación se ejecuta al comienzo de la
subrutina.
Después que la subrutina ha sido ejecutada, una ramificación
se hace de nuevo al programa principal.
69. 69
[ Organización ]
Präsentat
ion
Subrutinas
Uso de subrutinas:
Los registros y las memorias son comunes para el programa
principal y para la subrutina, i.e., se consideran variables
globales.
Ventaja: la comunicación de los parámetros entre el
programa principal y la subrutina es simple y rápido.
Desventaja: el programador puede olvidar que ciertos
registros usados por en el programa principal no deben ser
alterados en la subrutina, esto puede causar serios
problemas y la detección de este error es difícil.
71. 71
[ Organización ]
Präsentat
ion
Subrutinas
Ejemplo:
Se desea hacer un programa que realice las siguientes
operaciones:
(0100) ← (0100) + 5
(0200) ← (0200) + 5
(0204) ← (0204) + 5
La mejor solución sería utilizando una subrutina que tenga
como parámetro una dirección X y que realice la operación:
(X) ← (X) + 5
El programa principal debe cargar correctamente el registro
X y llamar a la subrutina tres veces.
72. 72
[ Organización ]
Präsentat
ion
Subrutinas
Ejemplo:
Se desea hacer un programa que realice las siguientes
operaciones:
(0100) ← (0100) + 5
(0200) ← (0200) + 5
(0204) ← (0204) + 5
Programa principal Subrutina
LOAD X,0100 SUM5 LOAD A,(X)
CALL SUM5 ADD 5
LOAD X,0200 STORE (X),A
CALL SUM5 RET
LOAD X,0204
CALL SUM5
73. 73
[ Organización ]
Präsentat
ion
Subrutinas
Ejemplo:
Se desea hacer un programa que realice las siguientes
operaciones:
(0100) ← (0100) + 5
(0200) ← (0200) + 5
(0204) ← (0204) + 5
Programa principal Subrutina
LOAD X,0100 SUM5 LOAD A,(X)
CALL SUM5 ADD 5
LOAD X,0200 STORE (X),A
CALL SUM5 RET
LOAD X,0204
CALL SUM5
¿Qué pasa si el programa
principal estaba usando A?
74. 74
[ Organización ]
Präsentat
ion
Subrutinas
Ejemplo:
Se desea hacer un programa que realice las siguientes
operaciones:
(0100) ← (0100) + 5
(0200) ← (0200) + 5
(0204) ← (0204) + 5
Programa principal Subrutina
LOAD X,0100 SUM5 LOAD A,(X)
CALL SUM5 ADD 5
LOAD X,0200 STORE (X),A
CALL SUM5 RET
LOAD X,0204
CALL SUM5
¿Qué pasa si el programa
principal estaba usando A?
kaput!!
75. 75
[ Organización ]
Präsentat
ion
Subrutinas
Ejemplo:
Se desea hacer un programa que realice las siguientes
operaciones:
(0100) ← (0100) + 5
(0200) ← (0200) + 5
(0204) ← (0204) + 5
Programa principal Subrutina
LOAD X,0100 SUM5 PUSH A
CALL SUM5 LOAD A,(X)
LOAD X,0200 ADD 5
CALL SUM5 STORE (X),A
LOAD X,0204 POP A
CALL SUM5 RET
Solución: se usa la pila
76. 76
[ Organización ]
Präsentat
ion
Subrutinas
La Pila (stack):
Existe una memoria direccionada por el registro SP (stack
pointer). ¿Cómo se usa?
Cada vez que se hace PUSH X:
(SP) ← X
SP ← SP + 1
Cada vez que se hace POP X:
SP ← SP - 1
X ← (SP)
(es posible hacer PUSH X y luego POP Y)
77. 77
Präsentat
ion
[ Índice ]
43.1 Máquina de von Neumann
43.2 Fetch, decodificación, ejecución
43.3 Programación en assembler
43.4 Mecanismos de subrutinas
43.5 E/S e interrupciones
43.7
43.6 Estructuras de Interconexión
80. 80
[ Organización ]
Präsentat
ion
Interrupciones
Ejemplo sin interrupciones: un programa quiere leer datos
del disco duro.
1. El programa solicita datos a la unidad de disco.
2. La unidad de disco recibe solicitud y posiciona el cabezal
del disco en la posición deseada.
3. La unidad lee los datos.
4. La unidad verifica consistencia de los datos (checksum)
5. if OK (Envía los datos a la CPU) else GOTO 3
6. La CPU recibe datos y continúa su programa
1 2 3 4 5 6 t
83. 83
[ Organización ]
Präsentat
ion
Interrupciones
Ejemplo sin interrupciones: un programa quiere leer
datos del disco duro.
1 2 3 4 5 6 t
¿Qué hace
la CPU en
este tiempo?
NADA!!
la CPU espera…
CPU
solicita
datos
CPU
recibe
datos
84. 84
[ Organización ]
Präsentat
ion
Interrupciones
Ejemplo con interrupciones: un programa quiere leer datos
del disco duro.
1. El programa solicita datos a la unidad de disco.
2. La CPU no espera datos, hace otra cosa: por ejemplo
ejecuta otro programa o continua ejecutando el mismo
programa siempre que pueda prescindir de los datos
solicitados.
3. La unidad de disco se encarga de leer los datos
correctamente. Cuando los datos están listos la unidad
de disco “interrumpe” a la CPU.
4. La CPU deja de hacer lo que está haciendo y atiende la
interrupción, i.e., recibe los datos de la unidad de disco.
t (CPU)
t (unidad de disco)
85. 85
[ Organización ]
Präsentat
ion
Interrupciones
Ejemplo con interrupciones: un programa quiere leer datos
del disco duro.
1 2 4 t
CPU
solicita
datos
CPU
recibe
datos
CPU
hace
otra cosa
Unidad de disco
lee y envía datos
3
interrupción
86. 86
[ Organización ]
Präsentat
ion
Interrupciones
Ejemplo con interrupciones: un programa quiere leer datos
del disco duro.
1 2 4 t
CPU
solicita
datos
CPU
recibe
datos
CPU
hace
otra cosa
Unidad de disco
lee y envía datos
3
interrupción
Ahorro de
tiempo
87. 87
[ Organización ]
Präsentat
ion
Interrupciones
La interrupción es el mecanismo mediante el cual otros
módulos pueden interrumpir una secuencia normal de
procesamiento.
• Programa: por ejemplo división por cero
• Temporizador: cuando se cumple un tiempo específico
• E/S: cuando hay algo que comunicar
• Hardware: cuando ocurre una falla
92. 92
[ Organización ]
Präsentat
ion
Interrupciones
Funcionamiento de las interrupciones (posibilidad 1):
1. El dispositivo I/O cuando necesita interrumpir solicita
atención y envía una señal INT a la CPU.
2. La CPU termina su instrucción y envía un
reconocimiento a quien interrumpe mediante la señal
IORQ (I/O request).
3. El dispositivo envía por el bus de datos un byte y la
CPU forma una dirección a partir de este byte.
4. La CPU salta a esta dirección y ejecuta el programa
de atención a la interrupción.
5. La CPU finaliza esta rutina de interrupción y regresa
a la dirección que estaba en el momento de la
interrupción.
93. 93
[ Organización ]
Präsentat
ion
Interrupciones
Funcionamiento de las interrupciones (posibilidad 2):
1. Igual
2. Igual
3. La CPU al saber que es el dispositivo X el que
interrumpe lee el elemento X del “vector de
interrupciones” ubicado en algún lugar de la
memoria, a partir de este elemento calcula la
dirección de memoria de la rutina de atención de la
interrupción.
4. Igual
5. Igual
95. 95
[ Organización ]
Präsentat
ion
Interrupciones
Interrupciones múltiples:
1. Inhibición de interrupciones:
• La CPU ignora las interrupciones cuando ya está
procesando una interrupción.
• Las interrupciones ocurridas quedan pendientes y se
ejecutan en una determinada secuencia una vez que la
CPU termine la primera interrupción.
97. 97
[ Organización ]
Präsentat
ion
Interrupciones
Interrupciones múltiples (cont):
2. Definición de prioridades
• Interrupciones de baja prioridad pueden ser interrumpidas
por interrupciones de mayor prioridad.
• Cuando una interrupción de prioridad alta ha sido
atendida, la CPU regresa a la interrupción previa.
100. 100
Präsentat
ion
[ Índice ]
43.1 Máquina de von Neumann
43.2 Fetch, decodificación, ejecución
43.3 Programación en assembler
43.4 Mecanismos de subrutinas
43.5 E/S e interrupciones
43.7
43.6 Estructuras de Interconexión
101. 101
La Conexión
• Todas las unidades deben estar conectadas
• Hay Diferentes tipos de conexión para
diferentes tipos de unidades
– Memoria
– Input/Output
– CPU
103. 103
Conexiones de la Memoria
• Recibe y envía los datos
• Recibe direcciones (o ubicaciones)
• Recibe señales de control
– Read
– Write
– Tiempos
104. 104
Conexiones de Input/Output (1)
• Similar a la memoria desde el punto de vista
de las computadoras
• Output (Salida)
– Recibe datos de la computadora
– Envía datos a los periféricos
• Input (Entrada)
– Recibe datos de los periféricos
– Envía datos a la Computadora
105. 105
Conexión de Input/Output (2)
• Recibe señales de control de la
computadora
• Envia señales de control a los periféricos
– e.g. Giro del disco
• Recibe direcciones de la computadora
– e.g. Número de puerto para identificar un
periférico
• Envía señales de interrupción (control)
106. 106
Conexiones de la CPU
• Lee instrucciones y datos
• Escribe los datos (después del
procesamiento)
• Envía señales de control a otras
• Recibe (y actúa sobre) interrupciones
107. 107
Buses
• Hay una serie de sistemas de interconexión
posibless
• Las estructuras de BUS único y BUSES
múltiples son las más comunes
• e.g. Buses de Control/Direcciones/Datos
(PC)
108. 108
Que es un Bus?
• Una vía de comunicación que permite
conectar dos o más dispositivos
• Usualmente transmiten
• A menudo agrupados
– Un número de canales en un bus
– e.g. Un bus de datos de 32 bits son 32 canales
independientes de un bit
• No se toman en cuenta las líneas que
proveen la energía eléctrica
109. 109
Bus de Datos
• Transmite Datos
– Recuerde que no hay ninguna diferencia entre
"datos" e "instrucción" en este nivel
• El ancho del BUS es un factor clave en la
determinación del rendimiento
– 8, 16, 32, 64 bit
110. 110
Bus de Direcciones
• Identifica el origen y destino de los datos
• e.g. La CPU necesita leer una instrucción
(datos) desde una ubicación determinada en
la memoria
• El Ancho del bus determina la capacidad
máxima de la memoria del sistema
– e.g. El 8080 tiene un bus de direcciones de 16
bits con lo cual su espacio de dirección es de 64
k
111. 111
Bus de Control
• Controla y Sincroniza la información
– Señal de read/write (lectura/escritura) de la
memoria
– Requerimientos de Interrupciones
– Señales de Reloj (Clock)
113. 113
¿Grande y amarillo?
• Que aspecto tienen los BUSES?
– Líneas paralelas en las placas de circuitos
– Cables de cinta
– Bahías de conectores de placas madres
• e.g. PCI
– Conjuntos de cables
115. 115
Problemas en Buses Simples
• Gran cantidad de dispositivos en un solo
bus conducen a :
– Retrasos de propagación
• Largos recorridos de los datos implican que la
coordinación requerida para usar el único bus puede
afectar al rendimiento
• Si se incrementa la transferencia de datos se afecta
la capacidad del BUS
• La mayoría de los sistemas utilizan varios
buses para superar estos problemas
118. 118
Tipos de Buses
• Dedicados
– Líneas separadas de datos y direcciones
• Multiplexado
– Lineas Compartidas
– Linea de control de Dirección Válida o Dato
Válido
– Ventaja – Menor número de líneas
– Desventajas
• Control mucho mas complejo
• Rendimiento final
119. 119
Arbitraje de Bus
• Más de un módulo controla el BUS
• e.g. Controlador de CPU y DMA
• Solo un módulo por vez puede controlar al
BUS
• El arbitraje puede ser centralizado o
distribuido
120. 120
Arbitraje Centralizado o
Distribuido
• Centralizado
– Dispositivo de hardware único controla el
acceso al bus
• Controlador de bus
• Árbitro
– Puede ser parte de la CPU o estar separado
• Distribuido
– Cada módulo puede reclamar el Bus
– Lógica de control sobre todos los módulos
121. 121
Temporización
• Coordinación de eventos en bus
• Sincrónico
– Eventos determinados por las señales de reloj
– El Bus de control incluye línea de reloj
– Un solo 1-0 es un ciclo de bus
– Todos los dispositivos pueden leer la línea de
reloj
– Normalmente por cada ciclo se produce un
único evento
125. 125
Bus PCI
• Interconexion de componentes Periféricos
• Intel lo hizo de dominio público
• 32 o 64 bit
• 50 lineas
126. 126
Lineas de Bus PCI (requeridas)
• Líneas de sistemas
– Incluyen lineas de “clock” y “reset”
• Direcciones y Datos
– 32 lineas de multiplexado temporal para
direcciones/datos
– Lineas de Interrupción & validación
• Control de la interfaz
• Arbitraje
– No compartido
– Conexión directa a árbitro de bus PCI
• Lineas de Error
127. 127
Lineas de Bus PCI (Opcional)
• Lineas de Interrupción
– No compartidas
• Soporte de Caché
• Extensión de Bus de 64-bit
– 32 lineas Adicionales
– Tiempo multiplexado
– 2 líneas para habilitar dispositivos para aceptar
usar la transferencia de 64 bits
• JTAG/Boundary Scan
– Para probar procedimientos
128. 128
Comandos PCI
• Transacción entre iniciador (maestro) y
destino
• Master reclama bus
• Determina tipo de transacción
– e.g. I/O read/write
• Fase de dirección
• Una o más fases de Datos