Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Funcionamiento de la CPU
2.1 Arquitectura de la CPU
La CPU está constituida fundamentalmente por la Unidad de Control y la UAL, pero
además debe contar con elementos de memoria para el almacenamiento temporal de los datos
tratados por la CPU. Esa memoria está constituida por Registros.
La conexión entre los distintos componentes del computador se realiza mediante buses. Ya
se ha definido un bus como un conjunto de caminos conductores en paralelo, que puede ser
compartido por varios dispositivos, a los fines de la comunicación entre los mismos. Cuando los
datos deben ser transmitidos de un componente a otro, viaja por el bus desde el componente
fuente al de destino, almacenándose temporalmente en registros.
Los registros son elementos de memoria que componen la CPU para que ésta pueda
conservar temporalmente instrucciones o datos en el curso de su tratamiento.
Figura 2.1
Arquitectura básica de
la CPU
La Unidad de Control necesita comunicarse además, con la memoria y los periféricos. Esta
comunicación la realiza a través de buses externos, que conforman el Bus del Sistema. Este bus
está constituido por tres grupos funcionales de líneas denominados:
Bus de Direcciones. Son líneas conductoras para transmitir las direcciones de las posiciones
de memoria y de los dispositivos conectados al bus. Puesto que cada línea puede tener
dos posibles estados (0 y 1), con n líneas se pueden especificar 2𝑛 direcciones distintas.
Es unidireccional, es decir transmite en una sola dirección: de la CPU a la memoria.
45
Bus de Datos. Son las líneas empleadas para transmitir bits desde o hacia una celda de
memoria. El bus de datos es bidireccional, es decir, transmite de la CPU a la memoria y
viceversa.
Bus de Control: sirve para trasmitir las señales de control que coordinan el funcionamiento
del computador. Por ejemplo, indica a la memoria si se va a acceder para realizar una
operación de lectura o de escritura.
Estos tres buses operan en forma conjunta. Cuando un dato debe ser almacenado, primero
se envía la dirección de destino por el bus de direcciones, luego la memoria activa la celda
direccionada y a continuación se envía el contenido de dicha celda por el bus de datos. Por otra
parte, para recuperar un dato almacenado en memoria, por el bus de direcciones se envía la
dirección de la celda que contiene el dato, la memoria activa la celda direccionada y finalmente
se envía el contenido de la celda por el bus de datos. Tanto en el proceso de lectura como de
escritura las acciones están controladas por señales que el microprocesador envía por el bus de
control.
Código de Dirección del 1er Dirección del 2do Dirección del 3er
operación operando operando operando
La Figura 2.2a representa la UAL capaz de ejecutar esta operación, la cual está rodeada de
tres registros donde se memorizan los dos primeros operandos y el resultado (tercer operando de
la instrucción). La instrucción de suma necesita, por lo tanto, cuatro accesos a memoria central.
Estos accesos se realizan en forma sucesiva para obtener la instrucción, luego el primer
operando, después el segundo operando y por último se accede para almacenar el resultado. A
las máquinas que utilizan este tipo de instrucción se les llama máquinas de tres direcciones.
Existen máquinas de dos direcciones y máquinas de una dirección.
Figura 2.2 (a) Máquina de tres direcciones. (b) Máquina de una dirección
46
En esta unidad se tomará como base una máquina de una dirección. En este caso la UAL
posee un registro particular, denominado Acumulador. Para realizar una operación, se utiliza el
Acumulador para recibir el primer operando y luego de realizada la operación, el Acumulador
almacena el resultado. Esta característica permite instrucciones aritméticas de una sola
dirección: la del segundo operando.
En la Figura 2.2b, el Acumulador sustituye a los registros R1 y R3 de la Figura 2.2a. El segundo
operando puede almacenarse en el registro de palabra asociado a la memoria.
Entonces, en una máquina de una dirección, la operación de suma necesita tres
instrucciones, en la siguiente secuencia:
Cargar el primer operando en el Acumulador;
Sumar el segundo operando con el contenido del Acumulador. Al finalizar la operación, el
resultado queda almacenado en el Acumulador.
Almacenar en memoria el contenido del Acumulador, que contiene el resultado de la
operación realizada.
Cada una de estas tres instrucciones requiere un código de operación y una dirección:
A grandes rasgos, la estructura de la UAL, está constituida por varios circuitos operadores,
tanto aritméticos como lógicos. Estos tienen funciones específicas, por ejemplo: Sumador (para
realizar sumas), Desplazador (operaciones de desplazamiento), Complementador (cálculo del
complemento), etc. Además, cada función puede tener distintas versiones según el tipo de datos
que procese.
La Figura 2.3 muestra los registros asociados a la UAL. Puede observarse que además del
Acumulador y el registro que almacena el segundo operando, otro registro que trabaja asociado
a la UAL es el Registro de Estado.
47
Como se verá más adelante, el Registro de Estado refleja en cada uno de sus bits distintas
características del valor almacenado en el Acumulador, y es consultado por la Unidad de Control
para tomar decisiones cuando ejecuta instrucciones de ruptura de secuencia.
48
Por ejemplo, la CPU debe “recordar” la instrucción que se encuentra en ejecución, para ello
cuenta con un registro especial: el Registro de Instrucción. Asimismo, para continuar la
ejecución del programa cada vez que finaliza una instrucción, la CPU debe conservar la posición
de la instrucción siguiente; para esta tarea recurre al registro Contador de Programa. La Figura
2.4 muestra estos dos registros y como veremos a continuación, la CPU cuenta con otros registros
más para su funcionamiento.
La Figura 2.5 muestra un esquema de la CPU detallando los principales registros que posee.
Cada uno de estos registros se utiliza para tareas específicas.
49
intercambio se produce con el Acumulador, la UAL, o algún registro individual. Durante
una operación de escritura contiene la información que proviene del Acumulador. Este
intercambio dentro de la CPU se realiza a través del bus interno.
o Registro de Direcciones: Este registro almacena las direcciones de las celdas de memoria que
van a ser accedidas para realizar una lectura/escritura. Está conectado directamente al
bus de direcciones.
50
Según la función que cumplen
Desde el punto de vista de la función que cumplen, los registros de la CPU se pueden
clasificar en: Registros de Control y Registros visibles al usuario.
Registros de Control: Son los registros utilizados por la Unidad de Control y por programas
privilegiados del sistema para controlar el funcionamiento de la CPU para la ejecución de
programas. La mayor parte de estos registros no son visibles al usuario. Algunos de ellos
pueden ser visibles a instrucciones de máquina ejecutadas en un modo de control o de
sistema operativo.
Pertenecen a este grupo:
- El Contador de Programa
- El Registro de Dirección
- El Registro de Instrucción
- El Registro de Palabra
- El Registro de Estado
Los cuatro primeros son esenciales para la ejecución de una instrucción y se usan para la
transferencia de datos entre la CPU y la memoria. El último, el Registro de Estado, es usado
por la Unidad de Control para tomar decisiones en función de operaciones realizadas en la
UAL.
Registros visibles al usuario: Un registro visible al usuario es aquél que puede ser referenciado
por medio del lenguaje máquina que ejecuta la CPU. Permiten al programador de lenguaje de
máquina o ensamblador minimizar las referencias a memoria principal optimizando el uso
de los registros. A su vez, podemos clasificarlos en:
o Registros de Uso General: almacenan datos o direcciones y pueden ser asignados por el
programador a diversas funciones. A veces, se usa para contener el operando para
cualquier código de operación o puede haber registros específicos para operaciones en
coma flotante. En algunos casos los registros de uso general pueden ser utilizados para
funciones de direccionamiento.
o Registros de Datos: pueden ser usados únicamente para contener datos y no se pueden
emplear en el cálculo de una dirección de operando. Un ejemplo de este tipo de registro
es el Acumulador.
o Registros de Direcciones: almacenan solo direcciones. Pueden ser en sí registros de uso más
o menos general, o pueden estar dedicados a un modo de direccionamiento particular. El
caso más conocido es el Puntero a Pila.
51
determinado. Por ejemplo, en una instrucción de tres bytes, se puede asignar un byte para el
código de operación y los dos bytes restantes para la dirección del operando.
En el ejemplo se muestra un programa simple, escrito en código binario para un
microprocesador que tiene las características expresadas anteriormente. El programa suma los
dos números en las posiciones de memoria 0160 H y 0161 H y guarda la suma en la posición
0162 H:
Cod. de
Dirección de operando Descripción
operación
0000 0001 0000 0001 0110 0000 Cargar el contenido de la dirección 0160H en el Acumulador.
0000 0101 0000 0001 0110 0001 Sumar el contenido de la dirección 0161H al Acumulador.
0000 0010 0000 0001 0110 0010 Transferir el contenido del Acumulador a la dirección de memoria 0162H.
Codificación hexadecimal
Esta forma de representación de las instrucciones es una mejora respecto al método
binario, puesto que abrevia cada grupo binario de 8 bits a dos dígitos hexadecimales. Veamos
ahora el programa precedente utilizando el código hexadecimal:
Cod. de
Dirección de operando Descripción
operación
01 H 0160 H Cargar el contenido de la dirección 0160H en el Acumulador.
05 H 0161 H Sumar el contenido de la dirección 0161H al Acumulador.
02 H 0162 H Transferir el contenido del Acumulador a la dirección de memoria 0162H.
Esta representación de las instrucciones resulta una mejora desde el punto de vista de las
personas, pero un microprocesador no sería capaz de interpretar este programa tal como está.
52
La Figura 2.7 muestra una instrucción en lenguaje ensamblador identificando los elementos
que la componen:
Dirección de
Código fuente Código objeto Descripción
memoria principal
Cargar el contenido de la dirección 0160H en el
0150 LOAD, (0160H) 01 0160
Acumulador.
2.3 Instrucciones
Tipos de instrucciones
Un microprocesador ejecuta un conjunto de instrucciones de máquina que le dicen al
procesador qué hacer. Basado en las instrucciones, un microprocesador puede hacer tres tipos
de tareas básicas:
Instrucciones aritméticas: Usando su UAL, un microprocesador puede realizar operaciones
matemáticas como suma, resta, multiplicación y división. Los modernos microprocesadores
contienen procesadores de punto flotante que pueden realizar operaciones extremadamente
sofisticadas con números muy grandes, en punto flotante.
Instrucciones de transferencia de datos: Un microprocesador puede mover datos desde una
posición de memoria a otra.
Instrucciones de ruptura de secuencia: Un microprocesador puede tomar decisiones y saltar
a un nuevo conjunto de instrucciones, basándose en estas decisiones.
Existen operaciones mucho más complejas que un microprocesador puede hacer, pero
estas son sus tres actividades básicas.
53
2.4 Funcionamiento del microprocesador
A los fines de esta asignatura, utilizaremos un modelo simplificado de CPU (ver Figura 2.8),
un microprocesador extremadamente simple, al cual nos referiremos de aquí en adelante.
Asimismo, dado que el objetivo de la unidad no se centra en la programación, se usará un
pseudo lenguaje Assembler, con instrucciones más sencillas pero que cumplen funciones
similares a las del verdadero Assembler. De este modo se facilitará la comprensión de la función
que cumplen las distintas unidades y registros de la CPU, realizando un seguimiento de dichas
instrucciones.
54
Instrucciones de inicio y fin de programa: Estas instrucciones indican el comienzo y la finalización de un
programa respectivamente.
ORG Indica la dirección de memoria donde comienza la ejecución del programa. Cabe
aclarar que es una directiva de ensamble, solo se utiliza al momento de armar el
Código Objeto y no es ejecutada por la CPU.
END Indica la finalización del programa que se estaba ejecutando.
Instrucciones de ruptura de secuencia: Permiten alterar la secuencia normal de ejecución del programa.
De forma genérica se dice que son instrucciones de salto o bifurcación, puesto que, en vez de
pasar a la instrucción que ocupa la posición siguiente, “saltan” a ejecutar instrucciones que se
encuentran en otra posición de memoria.
Bifurcación incondicional: Producen la bifurcación sin ninguna condición.
JUMP Modifica el contador de programa (CP) con una nueva dirección
Bifurcación condicional: las bifurcaciones condicionales son instrucciones que tienen dos
secuencias distintas:
- Cuando no se cumple la condición de bifurcación, no se modifica el CP
- Cuando sí se cumple la condición de bifurcación, se modifica el CP, el cual recibe
la dirección de bifurcación.
Las condiciones de bifurcación se establecen sobre el Registro de Estado de la UAL que
almacena ciertas condiciones sobre las operaciones realizadas con anterioridad. Estas
condiciones pueden hacerse sobre un sólo bit o sobre varios simultáneamente.
Las instrucciones que se usarán son:
JUMP Z Modifica el contador de programa (CP) con una nueva dirección si el
resultado de la operación efectuada es cero, o sea Z= 1
JUMP NZ Modifica el contador de programa (CP) con una nueva dirección si el
resultado de la operación efectuada es distinta de cero, o sea Z= 0
JUMP P Modifica el contador de programa (CP) con una nueva dirección si el
resultado de la operación efectuada es positivo, o sea S= 0
JUMP M Modifica el contador de programa (CP) con una nueva dirección si el
resultado de la operación efectuada es negativo, o sea S=1
Bifurcación con retorno: Las instrucciones de bifurcación con retorno salvaguardan la
dirección de la instrucción que ocupa la posición siguiente, en forma previa a realizar el salto.
De esta forma, se puede retornar al punto donde se bifurcó y seguir ejecutando en la dirección
siguiente a la que causó el salto, (ver Figura 2.9).
55
Figura 2.9 Llamada a subrutina.
El uso más frecuente de la bifurcación con retorno es para llamar a subrutinas (instrucción
que suele llamarse CALL o BRANCH).
CALL Modifica el CP, luego de resguardar la dirección de retorno en memoria pila
RET Retorna la dirección almacenada en memoria pila, al CP.
Uno de los problemas clásicos de las bifurcaciones con retorno es la selección del lugar
donde se salvaguarda la dirección de retorno. La solución más usada es el de la memoria pila.
Este método permite llamadas anidadas de cualquier nivel, así como llamadas recursivas.
En efecto, cada nueva llamada va introduciendo en la pila su dirección de retorno, sin destruir
las anteriores. Dado que los retornos se hacen en orden inverso a las llamadas, la pila siempre
tiene en la cabecera la dirección de retorno adecuada. El puntero a la cabecera de la pila está
almacenado en el Registro Puntero a Pila (Stack Pointer).
La Tabla 2.1 resume las características del modelo simplificado de CPU y las instrucciones
de pseudo assembler con sus respectivos códigos en hexadecimal que se utilizarán en todos los
ejercicios y ejemplos de esta unidad.
Aritméticas
JUMP Z 09 H Nota: ORG no se ejecuta. La
JUMP P 0A H dirección que acompaña a
ADD 03 H
ORG indica la dirección de la
SUBTRACT (SUB) 04 H JUMP M 0B H primera instrucción de un
MULTIPLY (MPL) 05 H CALL 0C H programa, por lo tanto, será el
valor inicial del Contador de
DIVIDE (DIV) 06 H RETURN (RET) 0D H Programa.
56
Tabla 2.1 Arquitectura y Set de instrucciones del modelo simplificado de CPU.
57
En el ciclo de búsqueda o captación, la CPU realiza la lectura de la instrucción almacenada
en una posición de memoria y en el ciclo de ejecución la CPU se encarga de llevar a cabo la tarea
que indique la instrucción leída.
El proceso de búsqueda de una instrucción es el mismo para todas las instrucciones. Por
otra parte, la ejecución de la instrucción supone procesos distintos dependiendo de la naturaleza
de la instrucción.
En base a estos conceptos, podemos describir la ejecución de un programa como una
repetición sucesiva de las fases de búsqueda y ejecución de las instrucciones que integran el
programa. La ejecución del programa se detiene sólo si la máquina se desconecta, se produce
algún error, o se encuentra una instrucción del programa que detiene la CPU.
58
el código de operación al decodificador, donde es reconocido dentro del set de instrucciones del
procesador para poder determinar de qué instrucción se trata y actuar en consecuencia.
El ciclo de búsqueda finaliza con el incremento del Contador de Programa para direccionar
la próxima instrucción.
El siguiente esquema resume los pasos del ciclo de captación completo. Estos pasos,
denominados microinstrucciones, pueden ser identificados para su seguimiento en la Figura 2.11.
59
Ciclo de ejecución de la instrucción
La ejecución de una instrucción determinada supone una serie de pasos o
microinstrucciones que dependen en cada caso del tipo de instrucción que se trate.
60
Figura 2.12 Ciclo de ejecución de una instrucción aritmética (ADD, SUB, MPL o DIV).
61
El siguiente esquema muestra los pasos del ciclo de ejecución de la instrucción LOAD,
cuyo seguimiento puede realizarse en la Figura 2.13.
62
Almacenamiento de un dato – Procesamiento de la instrucción STORE ( )
El decodificador identifica el código de operación y la dirección del operando se copia en el
Registro de Direcciones. El bus de direcciones activa la celda de memoria que tiene esa dirección
para que pueda ser escrita. La Unidad de Control ordena la operación de escritura en memoria
y el contenido del registro Acumulador es llevado por el bus interno al Registro de Palabra. Desde
allí a través del bus de datos se almacena el dato en la celda de memoria activada.
A continuación se muestra el esquema de microinstrucciones del ciclo de ejecución de la
instrucción STORE con el respectivo seguimiento en la Figura 2.14.
63
Observación: Para la resolución de los ejemplos y ejercicios propuestos que se presentan a
continuación, se usará el set de instrucciones y la arquitectura de procesador detallado en
la Tabla 2.1.
Realice el seguimiento del siguiente programa usando los esquemas y Figuras: 5.13, 5.14 y 5.15
ORG 0107 H Comienzo de programa. En el contador de programa se carga la dirección
0107H.
0107 H LOAD, (025A H) Carga en el Acumulador el contenido de la celda de memoria de
dirección 025AH.
0108 H ADD, (135E H) Suma al Acumulador el contenido de la celda de dirección 135EH.
0109 H STORE, (135F H) Almacena el contenido del Acumulador en la dirección 135FH.
010A H END Fin del programa
Memoria Principal
Bus de Bus de
Datos 01 025A H 0107 H
Direcciones
03 135E H 0108 H
02 135F H 0109 H
0E 0000 H 010A H
: :
: :
:
13 D 025A H
: :
Memoria de datos
20 D 135E H
50 D 135F H
Nota: Para mayor claridad, se muestran los esquemas de microinstrucciones en las páginas siguientes.
Complete el siguiente cuadro, que se corresponde con el seguimiento realizado en el apartado a)
4) Después del ciclo de búsqueda: 0109 H STORE, (135F H) (135F H)= 50D
64
65
Dec.
CE 01 025A H 01= LD
Bus Dir MP= 025A H Bus Datos
RDir RP Acum.
025A H 13 13 13
Dec.
CE 03 135E H 03 =ADD
Bus Dir MP= 135E H Bus Datos U.A.L. R.Estado
RDir RP Acum
135E H 20 20 20 13 +20 33 S=0 Z=0
Dec.
CE 02 135F H 02 =ST
Bus Dir MP= 135F H
RDir
Secuenc. 135F H 50 33
Bus de Datos
Acum R.Palabra
33
Dec.
CE 0E 0000 H 0E =END
CB: Ciclo de Búsqueda
CE: Ciclo de Ejecución
65
Ciclo de Búsqueda Ciclo de Ejecución
Bus Interno (Dir. Operando)
Contador de Registro de Registro de Registro de
1 7
Programa Direcciones Instrucciones Direcciones
0107 H 025A H
Bus de Datos
Memoria Bus de Datos Registro de Memoria Registro de
3 9
Principal (01 025A H) Palabra Principal Palabra
(13)
(Cod. Op.)
Registro de
5 Decodificador
Instrucciones
01
6 CP=0107 H CP+1=0108 H
(2do operando)
Registro de Bus Interno Registro de Registro de
4 10 UAL
Palabra 03 135E H Instrucciones Palabra
20
(Cod. Op.)
Registro de UAL
5 Decodificador 11 Acum. = 33
Instrucciones 13+20
03 33
Bus Interno
Memoria Bus de Datos Registro de Registro de
3 9 Acumulador
Principal (02 135F H) Palabra Palabra
33
Bus de Datos
Registro de Bus Interno Registro de Registro de MP = 135F H
4 10
Palabra 02 135F H Instrucciones Palabra 50 33
(33)
(Cod. Op.)
Registro de
5 Decodificador
Instrucciones
02
6 CP=0109 H CP+1=010A H
66
2.9 Seguimiento de instrucciones de ruptura de secuencia sin retorno
Este tipo de instrucción, también llamado instrucción de bifurcación o de salto, permite
modificar el desarrollo secuencial del programa, haciendo que la instrucción de salto sea seguida
no por la instrucción almacenada en la siguiente dirección, sino por una instrucción cuya
dirección viene suministrada por la propia instrucción de salto. Además, este salto puede ser
incondicional o estar sujeto a ciertas condiciones que deben ser cumplidas para ejecutar el salto
(ver apartado 5.5.1).
68
Ejemplo 2.2 Seguimiento de instrucciones de salto
Realice el seguimiento del siguiente programa usando los esquemas de microinstrucciones. Considere
el Acumulador= 20; Registro de Estado: Z=0 S=0
0106 H …
0107 H JUMP Z, 0109 H Salta a la dirección 0109 H (STORE), si el resultado de la operación es
nulo (si Z=1)
0108 H JUMP, 010A H Salto incondicional a la dirección 010A H (END)
0109 H STORE, 135F H Almacena el contenido del Acumulador en la dirección 135F H.
010AH END
Memoria Principal
09 0109 H 0107 H
07 010A H 0108 H
02 135F H 0109 H
0E 0000 H 010A H
: :
: :
135E H
50 D 135F H
Nota: Para mayor claridad, se muestran los esquemas de microinstrucciones en las páginas siguientes.
69
Ciclo de Búsqueda Ciclo de Ejecución
Bus Interno Bus Interno
Contador de Registro de Registro de UC
1 7
Programa Direcciones Estado (flag: Z) Z=0
0107 H
6 CP=0107 H CP+1=0108 H
(Cod. Op.)
Registro de
5 Decodificador
Instrucciones
07
6 CP=0108 H CP+1=0109 H
Bus Interno
Contador de Registro de
1
Programa Direcciones
010A H
(Cod. Op.)
Registro de
5 Decodificador
Instrucciones
0E
6 CP=010A H CP+1=010B H
70
2.10 Seguimiento de instrucciones de ruptura de secuencia con retorno
Una instrucción de salto con retorno, se refiere siempre a un llamado para la ejecución de
un programa secundario. En lenguaje Assembler el llamado se realiza usando la instrucción
CALL. Según el lenguaje de programación que se esté usando, el programa secundario puede ser
una Función, un Procedimiento o una Subrutina. Este programa secundario depende del
programa principal que lo invocó, por lo tanto, una vez ejecutado debe devolver el control al
programa principal para que continúe con la secuencia del programa. El retorno al programa
principal se hace a través de la instrucción RETURN (RET), colocada al final del programa
secundario. Se verá a continuación el desarrollo de estas dos instrucciones.
71
Figura 2.17 Ciclo de ejecución de una instrucción de salto con retorno (CALL).
72
Figura 2.18 Ciclo de ejecución de una instrucción de retorno (RET).
73
Ejemplo 2.3 Seguimiento de instrucciones de salto con retorno.
Realice el seguimiento del siguiente programa usando los esquemas de microinstrucciones. Complete
el cuadro correspondiente a la memoria de datos e instrucciones. Considere el Acumulador = 20 y el
Puntero Pila = 0100 H.
0106 H …
0107 H CALL, 0209 H Salta a la dirección 0209 H para ejecutar la subrutina, después de guardar
0108 H
0108 H END Fin del programa principal.
: :
0209 H STORE, (035B H) Almacena el contenido del acumulador en la dirección 035B H.
020A H RET Retorna al programa principal, a la dirección 0108 H.
Memoria Principal
00FE H
00FF H
0100 H
: :
0C 0209 H 0107 H
0E 0000 H 0108 H
: :
: :
02 035B H 0209 H
0D 0000 H 020A H
: :
13 D 035B H
Nota: Para mayor claridad, se muestran los esquemas de microinstrucciones en la página siguiente.
74
Ciclo de Búsqueda Ciclo de Ejecución
Bus Interno
Contador de Registro de
1 7 PP = 0100 H PP-1= 00FF H
Programa Direcciones
0107 H
Bus Interno
Registro de CP = 0108 H
6 CP = 0107 H CP+1=0108 H 12-
Instrucciones CP = 0209 H
0209 H
Bus Interno
Memoria Bus de Datos Registro de Registro de
3 9 Acumulador
Principal (02 035B H) Palabra Palabra
20
6 CP = 0209 H CP+1=020A H
Bus Datos
Memoria Bus de Datos Registro de Registro de
3 9 Memoria Pila
Principal (0D 0000 H) Palabra Palabra
0108 H
75
Bibliografía
PRIETO ESPINOSA, LLORIZ RUIZ, TORRES CONTERO. "Introducción a la Informática" - 3ra
Edición McGrawGill, 2002
DE MIGUEL ANASAGASTI, Pedro. "Fundamentos de los Computadores"
GINZBURG, ALBARRACÍN. “Operación Programación de Computadoras" - 4ta Edición
STALLING, William."Organización y Arquitectura de Computadores"
MEINADIER, Jean Pierre. "Estructura y Funcionamiento de Computadores Digitales"
GINZBURG, Mario C. "La PC por dentro. Arquitectura y funcionamiento de computadores" – 3ra
Edición, 2004
DUPERUT, Gabriel."El computador y su entorno" - 3ra Edición, 1999
Enlaces web
http://conocelahistoria.com/c-tecnologia/la-historia-de-la-computacion/
https://www.nextu.com/blog/generaciones-de-las-computadoras/
https://tiposclasificacion.com/computadoras/
https://culturizando.com/la-historia-la-computadora-una-breve-cronologia-1801-2017/
76