Está en la página 1de 32

Unidad 2

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.

En la arquitectura básica presentada en la Figura 2.1, se muestra en primer lugar un Bus


Interno de la CPU. Este bus permite la transmisión de datos entre la Unidad de Control, la
Unidad Aritmético-Lógica y otros registros específicos.

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.

2.1.1 Estructura de la UAL. Formato de las instrucciones


Como se explicó anteriormente, la UAL es la unidad encargada de realizar las operaciones
aritméticas y lógicas solicitadas por el programa. En el caso de tratarse de una operación
aritmética (por ejemplo, una suma), la instrucción debería facilitarle a la UAL la siguiente
información:
 La clase de operación a realizar, en este caso una suma; es el papel del código de
operación;
 La dirección de la celda de memoria que contiene el primer dato, o primer operando;
 La dirección de la celda de memoria que contiene el segundo operando;
 La dirección de la celda de memoria donde quiere almacenarse el resultado.

De aquí se deduce que el formato de este tipo de instrucciones (aritméticas), contiene un


código y tres direcciones:

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:

Código de operación Dirección de operando

1 Carga Dirección del 1er operando

2 Adición Dirección del 2do operando

3 Almacenamiento Dirección del resultado

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.

Figura 2.3 Registros asociados a la


UAL.

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.

2.1.2 La Unidad de Control


La Unidad de Control es la parte de la CPU que realmente hace que las cosas ocurran. La
Unidad de Control emite órdenes en forma de señales de control externas a la CPU para producir
el intercambio de datos con la memoria y los módulos de E/S. Estas señales se transmiten a
través del Bus de Control. También emite señales de control internas para transferir datos entre
registros, hacer que la UAL ejecute una función concreta y regular otras operaciones internas.
Estas señales se transmiten a través del Bus Interno.
El esquema de la Figura 2.4 muestra la estructura interna de la Unidad de Control. Los
componentes de la Unidad de Control son:
 Decodificador. Se encarga de extraer el código de operación de la instrucción en curso (que está
en el Registro de Instrucciones), la analiza y emite señales necesarias al resto de elementos
para su ejecución a través del secuenciador.
 Reloj. Proporciona una sucesión de pulsos eléctricos o ciclos a intervalos constantes, que
marcan los instantes en que han de comenzar los distintos pasos de que consta cada
instrucción. La cantidad de pulsos por segundo determina la velocidad de procesamiento de
la máquina.
 Secuenciador. También llamado controlador. En este dispositivo se generan órdenes muy
elementales (microórdenes) que, sincronizadas por los pulsos del reloj, hacen que se vaya
ejecutando poco a poco la instrucción que está cargada en el Registro de Instrucciones.

Figura 2.4 Estructura interna de la Unidad de Control

2.1.3 Registros de la CPU


Para poder realizar la ejecución de un programa, la CPU necesita almacenar instrucciones
y datos temporalmente mientras una instrucción está siendo ejecutada. En otras palabras, la
CPU necesita una pequeña memoria. Estos elementos de memoria interna se denominan
registros.
Los registros almacenan datos que la CPU necesita constantemente y por tal razón se
encuentran implementados con la tecnología de memoria interna de mayor velocidad (SRAM).

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.

Figura 2.5 Registros de la CPU.

Clasificación de los registros

Según la Unidad con la que se relacionan.


Se puede agrupar a los registros de acuerdo a la Unidad de la CPU con la que están
relacionados o asociados para trabajar. Esta clasificación será útil al momento de hacer el
seguimiento de las instrucciones dentro de la CPU. Según este criterio, se puede hablar de:
 Registros asociados a la Memoria Principal:
o Registro de Palabra o registro de datos: Este registro es el encargado de almacenar la información
(datos o instrucciones) que se intercambian con la Memoria Principal a través del bus
de datos. Durante una operación de lectura contiene la información que proviene de la
Memoria; si es una instrucción, la pasa al registro de instrucciones; si es un dato el

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.

 Registros asociados a la Unidad de Control:


o Registro de Instrucciones: Este registro sirve para contener la instrucción que es captada por
la CPU durante una operación de lectura.
o Contador de Programa: El contador de programa contiene una dirección de instrucción.
Típicamente, la Unidad Control actualiza el CP después de cada captación de instrucción
de manera que siempre apunta a la siguiente instrucción a ejecutar. Una instrucción de
bifurcación o salto también modificará el contenido del CP.
o Puntero a Pila: El registro puntero a pila permite almacenar la dirección de acceso a la
memoria pila. Se verá su funcionamiento al tratar las instrucciones de ruptura de
secuencia.

 Registros asociados a la Unidad Aritmético-lógica:


o Acumulador: La función de este registro ya se ha visto al describir la UAL de una sola
dirección. Se usa para almacenar el primer operando de una operación aritmética y
finalmente se carga con el resultado de la operación llevada a cabo en la UAL.
o Registro de Estado: Este registro contiene códigos de condición además de otra información
de estado. Los códigos de condición (también llamados indicadores o flags) son bits cuyos
valores son establecidos por el hardware de la CPU de acuerdo al resultado de la última
operación realizada por la UAL. Es decir que, además de almacenarse el propio resultado
en el registro Acumulador, se obtiene también los indicadores o flags del resultado
obtenido. Cada indicador se almacena en un bit del Registro de Estado describiendo cierta
condición del resultado (si fue nulo, si fue positivo, si se produjo desbordamiento). Los
indicadores pueden ser examinados con posterioridad como parte de una condición de
bifurcación condicional.
La Figura 2.6 muestra un ejemplo de Registro de Estado de ocho bits. La cantidad y
significado de los bits del registro no es igual para todos los microprocesadores sino que
puede cambiar de un modelo a otro según los criterios de diseño del fabricante.

Figura 2.6 Ejemplo de Registro de Estado de ocho bits.

- El Bit 0 o C: Es el indicador de acarreo. Es posicionado por las operaciones


aritméticas y de comparación. Este bit es como si fuera un bit agregado al
Acumulador ocupando la posición de mayor orden.
- El Bit 2 P/V: El significado de este flag depende de la operación que se realice. En el
caso de una operación aritmética (suma, resta, incremento o decremento), sirve como
indicador de desbordamiento de capacidad (overflow) V. En el caso de operaciones
lógicas o de desplazamiento, sirve como indicador de paridad P, estos tipos de
operaciones no se ven en el curso.
- El Bit 6 o Z: Señala si el resultado de la última operación realizada ha sido nulo. Si
el resultado obtenido es cero, Z=1 y si el resultado es distinto de cero Z=0.
- El Bit 7 o S: Este flag indica el signo del byte contenido en el Acumulador. Por lo
tanto, S=1 si el resultado es negativo y S=0 si es positivo.

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.

2.2 Lenguajes de programación

2.2.1 Lenguaje de máquina


Una computadora solamente puede ejecutar un grupo definido y limitado de órdenes que
recibe el nombre de Repertorio o Set de Instrucciones, Lenguaje de Máquina o Código Absoluto
de esa computadora.
Cada fabricante establece el set correspondiente a un modelo de microprocesador en
particular, de modo que ello constituye una característica de diseño. El número de instrucciones
que componen el Set de Instrucciones es distinto para distintos tipos y familias de procesadores.
Sin embargo, existe un grupo básico de operaciones que todos los procesadores incluyen aunque
con características propias para cada una de ellas. Por ejemplo: Sumar, Comparar, Transferir,
etc.
La representación interna de datos en la computadora es binaria, entonces cada
instrucción está codificada en binario pudiendo ser de esta manera interpretada por los circuitos
de la computadora. El lenguaje de máquina (código binario) es el verdadero lenguaje de la
computadora. Todas las instrucciones del programa deben ser expresadas de esta forma para
que la computadora las pueda entender.
A cada instrucción del set de instrucciones le corresponde un código de operación formado
por ceros y unos establecida durante el diseño del microprocesador, con ajuste a un formato

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.

Esto es entendible para el microprocesador, pero no para el usuario humano. La primera


mejora al respecto consistió en utilizar codificación hexadecimal.

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

2.2.2 Lenguaje Ensamblador (Assembler)


La programación en lenguaje de máquina es muy engorrosa debido a que cada instrucción
debe ser codificada en ceros y unos difíciles de recordar. En un principio los programas se
escribían así, y la revisión de un programa significaba a menudo cambiar direcciones y luego
había que destinar largas horas a verificar, calcular y llenar tablas.
La computadora podía realizar este tipo de trabajo administrativo y para salvar todo este
inconveniente de programar en ceros y unos se desarrollaron los lenguajes ensambladores. Los
lenguajes ensambladores se basan en mnemónicos fáciles de recordar y la posibilidad para el
programador de asignar nombres simbólicos a las direcciones del almacenamiento principal,
pudiendo referirse tanto a instrucciones como a datos fácilmente.
Un programa escrito utilizando mnemónicos se llama programa en lenguaje ensamblador
(Assembler), que es un Lenguaje de bajo nivel y muy dependiente del microprocesador con el que
se trabaje, ya que está íntimamente relacionado con el hardware y la arquitectura del
microprocesador.
Utilizando lenguaje ensamblador, el programa del ejemplo anterior quedaría:

Dirección de memoria Instrucción en lenguaje


Descripción
principal ensamblador
0150 LOAD, (0160H) Cargar el contenido de la dirección 0160H en el Acumulador.
0151 ADD, (0161H) Sumar el contenido de la dirección 0161H al Acumulador.
0152 STORE (0162H) Almacenar el contenido del Acumulador en la dirección de memoria 0162H.

Se ha agregado en la primera columna la dirección de memoria principal en la que se


encuentra almacenada cada instrucción.

52
La Figura 2.7 muestra una instrucción en lenguaje ensamblador identificando los elementos
que la componen:

Figura 2.7 Elementos de una instrucción en lenguaje ensamblador

El proceso para trasladar un programa en lenguaje ensamblador a código binario es


bastante complicado, pero a pesar de eso, el proceso es tan sistemático y repetitivo que puede
ser programado e implementado en el mismo microprocesador.
El programa que acepta un listado en código ensamblador (código fuente) y obtiene un
programa codificado en binario (código objeto) se denomina programa traductor. Este programa
se encarga también de tareas administrativas tales como calcular posiciones de almacenamiento
para datos e instrucciones y asignar direcciones reales a símbolos o etiquetas empleados por el
programador.
Para el ejemplo anterior, los códigos aparecerían de la siguiente manera:

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.

0151 ADD, (0161H) 05 0161 Sumar el contenido de la dirección 0161H al Acumulador.

Almacenar el contenido del Acumulador en la dirección de


0152 STORE, (0162H) 02 0162
memoria 0162H.

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.

Arquitectura del procesador:


Bus de datos: 24 bits
Bus de direcciones: 16 bits
Formato de instrucción: 8 bits para código de operación y
16 bits para dirección del operando

Figura 2.8 Esquema y arquitectura del modelo simplificado de CPU.

2.4.1 Set de instrucciones del modelo simplificado de CPU


Como se planteó anteriormente, utilizaremos un modelo simplificado de CPU y un pseudo
lenguaje Assembler. A continuación, se describe el set de instrucciones del modelo simplificado
de CPU:

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 transferencia de datos: Las instrucciones de transferencia de datos permiten copiar, en


el operando destino, la información almacenada en el operando origen, quedando este último sin
modificar. Destino y origen pueden ser registros o posiciones de memoria. En general, no
modifican los bits del Registro de Estado.
LOAD Transfiere el contenido de una posición de memoria a un registro.
STORE Transfiere el contenido del registro Acumulador a una posición de memoria. Es
la operación inversa a LOAD

Instrucciones Aritméticas: Describen operaciones aritméticas que se ejecutan en la UAL. La ejecución


de estas instrucciones modifica el Registro de Estado
ADD Suma
SUB Resta
MPL Multiplica
DIV Divide

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.

Transferencia de datos Ruptura de secuencia Comienzo y final de programa


LOAD 01 H JUMP 07 H ORG
STORE 02 H JUMP NZ 08 H END 0E H

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.

Arquitectura del procesador:


Bus de datos: 24 bits
Bus de direcciones: 16 bits
Formato de instrucción: 8 bits para código de operación y
16 bits para dirección del operando

56
Tabla 2.1 Arquitectura y Set de instrucciones del modelo simplificado de CPU.

2.5 Procesamiento de una instrucción


La función básica que realiza una
computadora es la ejecución de programas. Un
programa está compuesto por un conjunto de
instrucciones almacenadas en memoria y la
unidad central de proceso (CPU) se encarga de
leer y ejecutar las instrucciones especificadas
en dicho programa.
Para adquirir una mejor comprensión de
esta función y de la forma en que interactúan
los principales componentes de la computadora
(especialmente la CPU y la memoria), es preciso
considerar con detalle el proceso de ejecución
de una instrucción.

Ciclo básico de una instrucción


El procesamiento que requiere una
instrucción se denomina ciclo de instrucción.
El punto de vista más sencillo considera el ciclo
de instrucción constituido por dos etapas: el
ciclo de búsqueda o captación y el ciclo de
ejecución (Ver Figura 2.10). Figura 2.10 Ciclo básico de la instrucción.

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.

Pasos elementales para el procesamiento de una instrucción


El procesamiento de una instrucción requiere realizar una serie de pasos elementales
denominados micro órdenes o microinstrucciones. Para esto, la Unidad de Control (más
precisamente el Secuenciador) se encarga de generar las señales de control necesarias para llevar
a cabo la instrucción completa. Por ejemplo, en el ciclo de búsqueda de una instrucción algunos
de los pasos elementales son: direccionar la celda de memoria que contiene la instrucción,
almacenar el contenido de la celda leída en un registro de la CPU y reconocer (decodificar) la
instrucción captada.
Como puede apreciarse fácilmente en este ejemplo, las microinstrucciones se ejecutan en
un orden determinado y de forma sincronizada. Para la sincronización, la Unidad de Control
utiliza la señal de reloj, de manera tal que cada microinstrucción requiere una cantidad definida
de ciclos de reloj.

Velocidad de procesamiento de la CPU


Hemos visto que el procesamiento de una instrucción se realiza ejecutando las
microinstrucciones correspondientes en un orden determinado y de manera sincronizada con la
señal de reloj de la CPU. Como consecuencia de la sincronización, cada instrucción tiene una
duración determinada medida en ciclos de reloj y por ende, en tiempo. De esta manera, la
frecuencia de la señal de reloj define la velocidad de procesamiento de la CPU. A mayor frecuencia
de reloj, los ciclos de la señal de reloj tienen menor duración y por ende, la CPU tarda menos
tiempo en procesar las instrucciones.
Los fabricantes de microprocesadores incluyen en las especificaciones técnicas la
información detallada que describe, para cada instrucción, la duración expresada en ciclos de
reloj.

2.6 Ejecución de un programa. Seguimiento de instrucciones


Se ha dicho en el apartado anterior que el procesamiento de una instrucción supone dos
etapas: la de búsqueda y la de ejecución. A continuación se describen las microórdenes que el
secuenciador genera durante ambas etapas.

Ciclo de búsqueda de la instrucción


El procesamiento de cualquier instrucción comienza siempre en el Contador de Programa.
El Sistema Operativo carga el CP con la dirección de la primera instrucción del programa y
después este registro es el encargado de mantener la secuencia de ejecución.
El ciclo de búsqueda inicia cuando la Unidad de Control ordena la transferencia del
contenido del Contador de Programa (es decir, la dirección de la instrucción por ejecutar) al
Registro de Direcciones, y envía a la memoria una orden de lectura a través del Bus de Control.
Una vez terminada esta operación de lectura, la palabra leída (la instrucción) queda
disponible en el Registro de Palabra. Entonces, la Unidad de Control ordena la transferencia del
contenido de este registro al Registro de Instrucciones.
El Registro de Instrucciones está dividido en dos parte: el código de operación y la dirección
del operando (ver apartados 5.3.1, 5.4.2 y Figura 2.8). La Unidad de Control ordena que se copie

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.

Figura 2.11 Ciclo de captación de una instrucción.

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.

2.7 Seguimiento de instrucciones aritméticas: ADD( ), SUB( ), MPL( ), DIV( )


Una vez analizado el código de operación, la Unidad de Control reconoce que se trata de
una instrucción de procesamiento con captación previa del operando y que la dirección del
operando se encuentra en la zona de dirección del Registro de Instrucciones.
La Unidad de Control ordena su transferencia al Registro de Direcciones de memoria y acto
seguido ordena una operación de lectura en la memoria. Al finalizar dicha operación, el operando
buscado queda disponible en el Registro de Palabra. La Unidad de Control emite señales a los
circuitos de la UAL para realizar el procesamiento indicado por el código de operación y ordena
la transferencia del operando a la UAL, cuyos circuitos llevan a cabo la operación indicada por
la Unidad de Control interpretando el operando recibido como segundo operando, ya que el
primer operando es siempre el valor almacenado en el Acumulador.
El resultado de la operación realizada entre el primer y segundo operando, queda
almacenado en el Acumulador. A continuación, la Unidad de Control ordena la actualización de
los flags (bits) del Registro de Estado que reflejan condiciones del resultado de la operación
realizada en la UAL (ver apartado 5.3.3 – Registros Asociados a la UAL: Registro de Estado).
El siguiente esquema de microinstrucciones resume los pasos del ciclo de ejecución
completo de una instrucción aritmética (sólo cambiará el tipo de operación aritmética a ejecutar).
Estos pasos se muestran para su seguimiento en la Figura 2.12.

60
Figura 2.12 Ciclo de ejecución de una instrucción aritmética (ADD, SUB, MPL o DIV).

2.8 Seguimiento de instrucciones de Transferencia de datos: LOAD ( ), STORE ( )


La transferencia de datos que describiremos aquí serán operaciones de carga y
almacenamiento de un dato entre la CPU y la memoria principal.
La carga consiste en leer un dato desde memoria principal y llevarlo a un registro de la
CPU, mientras que el almacenamiento guarda en la memoria principal un dato que se encuentra
en un registro de la CPU; son operaciones que implican sentidos de transferencia opuestas.
A continuación se describen por separado las instrucciones de carga (LOAD) y
almacenamiento (STORE).

Carga de un dato – Procesamiento de la instrucción LOAD ( )


Una vez que el decodificador identifica el código de operación, comienza la ejecución
copiando la dirección del operando desde el Registro de Instrucciones al Registro de Direcciones.
Luego, el bus de direcciones activa la celda de memoria que tiene esa dirección y la Unidad de
Control ordena una lectura del contenido de la celda (operando), que es llevado por el bus de
datos al Registro de Palabra. Desde allí, a través del bus interno, el operando se almacena el dato
en el registro Acumulador. El valor del acumulador actuará como el primer operando en una
operación aritmética.

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.

Figura 2.13 Ciclo de ejecución de la instrucción de carga LOAD.

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.

Figura 2.14 Ciclo de ejecución de la instrucción de almacenamiento STORE.

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.

Ejemplo 2.1 Seguimiento de instrucciones LOAD, ADD y STORE

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)

1) Después de ejecutar: 0107 H LOAD, (025A H) Acumulador = 13D

2) Después del ciclo de búsqueda: 0108 H ADD, (0135E H) CP = 0109H


Decodificador = 03H

3) Después de ejecutar: 0108 H ADD, (0135E H) Acumulador = 33D


Reg. Estado: Z = 0
Reg. Estado: S = 0

4) Después del ciclo de búsqueda: 0109 H STORE, (135F H) (135F H)= 50D

5) Después de ejecutar: 0109 H STORE, (135F H) Reg. Palabra = 33D


(025ª H) = 13D
(135F H) = 33D

64
65

Bus Dir MP= 0107 H Bus Datos RI U.C. CP=CP+1


CB CP RDir RP
LOAD 0107 H 0107 H 01 025A H 01 025A H 01 025A H 01 025A H 01 Decodif. 0108 H

Dec.
CE 01 025A H 01= LD
Bus Dir MP= 025A H Bus Datos
RDir RP Acum.
025A H 13 13 13

Bus Dir MP= 0108 H Bus Datos RI U.C. CP=CP+1


ADD CB CP RDir RP
0108 H 0108 H 03 135E H 03 135E H 03 135E H 03 135E H 03 Decodif. 0109 H

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

Bus Dir MP= 0109 H Bus Datos RI U.C. CP=CP+1


STORE CB CP RDir RP
0109 H 0109 H 02 135F H 02 135F H 02 135F H 02 135F H 02 Decodif. 010A H

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

Bus Dir MP= 010A H Bus Datos RI U.C. CP=CP+1


END CB CP RDir RP
010A H 010A H 0E 0000 H 0E 0000 H 0E 0000 H 0E 0000 H 0E Decodif. 010B H

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

Registro de Bus de Direc. Memoria Registro de Bus de Direc. Memoria


2 8
Direcciones 0107 H Principal Direcciones 025A H Principal

Bus de Datos
Memoria Bus de Datos Registro de Memoria Registro de
3 9
Principal (01 025A H) Palabra Principal Palabra
(13)

Registro de Bus Interno Registro de Registro de Bus Interno


4 10 Acum. = 13
Palabra 01 025A H Instrucciones Palabra 13

(Cod. Op.)
Registro de
5 Decodificador
Instrucciones
01

6 CP=0107 H CP+1=0108 H

Bus Interno (Dir. Operando)


Contador de Registro de Registro de Registro de
1 7
Programa Direcciones Instrucciones Direcciones
0108 H 135E H

Registro de Bus de Direc. Memoria Registro de Bus de Direc. Memoria


2 8
Direcciones 0108 H Principal Direcciones 135E H Principal

Memoria Bus de Datos Registro de Memoria Bus de Datos Registro de


3 9
Principal (03 135E H) Palabra Principal (20) Palabra

(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

(actualizacion de Reg de Estado


6 CP=0108 H CP+1=0109 H 12 Acumulador
bits) S=0 Z=0

Bus Interno (Dir. Operando)


Contador de Registro de Registro de Registro de
1 7
Programa Direcciones Instrucciones 135F Direcciones
0109 H

Registro de Bus de Direc. Memoria Registro de Bus de Direc. Memoria


2 8
Direcciones 0109 H Principal Direcciones 135F Principal

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

Salto incondicional – Procesamiento de la instrucción JUMP


Una vez analizado el código de operación, la Unidad de Control reconoce que se trata de
una instrucción de salto incondicional. La dirección de salto se encuentra en la zona de dirección
del Registro de Instrucciones. La Unidad de Control ordena su transferencia al Contador de
Programa modificando de esta manera la secuencia del programa.

Bus Interno Contador de


Registro de
7 Instrucciones Programa
(Dir. Operando)

Figura 2.15 Ciclo de ejecución de una instrucción de salto incondicional.


67
Salto condicional – Procesamiento de las instrucciones JUMP M/ P/ Z/ NZ
Cuando el Decodificador identifica el código de operación como una instrucción de salto
condicional, la Unidad de Control verifica la condición de salto con los bits del Registro de Estado.
Si la condición se cumple (verdadero), la dirección de salto que se encuentra en la zona de
dirección del Registro de Instrucciones se transfiere al Contador de Programa modificando de
esta manera la secuencia del programa. Si la condición no se cumple (falso), la ejecución de la
instrucción termina, el Contador de Programa no se modifica y la ejecución del programa
continúa normalmente. (ver apartado 2.4.1).

Figura 2.16 Ciclo de ejecución de una instrucción de salto condicional.

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.

Complete el siguiente cuadro, que se corresponde con el seguimiento realizado en el apartado a)

1) Después del ciclo de búsqueda: 0107 H JUMP Z, 0109 H CP = 0108H

2) Después de ejecutar: 0107 H JUMP Z, 0109 H CP = 0108H

3) Después del ciclo de búsqueda: 0108 H JUMP, 010A H CP = 0109H

4) Después de ejecutar: 0108 H JUMP, 010A H CP = 010AH

5) Después de ejecutar: 010A H END Acumulador = 20D


(135F H)= 50D

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

Registro de Bus de Direc. Memoria Registro de Verdadero(Z=1) Contador de


2 8
Direcciones 0107 H Principal Instrucciones (Dir. Operando) Programa

Memoria Bus de Datos Registro de Falso (Z=0)


3 Fin
Principal (09 0109 H) Palabra

Registro de Bus Interno Registro de


4
Palabra 09 0109 H Instrucciones

Registro de (Cod. Op.)


5 Decodificador
Instrucciones 09

6 CP=0107 H CP+1=0108 H

Bus Interno (Dir. Operando)


Contador de Registro de Registro de CP= 0109 H
1 7
Programa Direcciones Instrucciones CP=010A H
0108 H 010A H

Registro de Bus de Direc. Memoria


2
Direcciones 0108 H Principal

Memoria Bus de Datos Registro de


3
Principal (07 010A H) Palabra

Registro de Bus Interno Registro de


4
Palabra 07 010A H Instrucciones

(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

Registro de Bus de Direc. Memoria


2
Direcciones 010A H Principal

Memoria Bus de Datos Registro de


3
Principal (0E 0000 Palabra

Registro de Bus Interno Registro de


4
Palabra 0E 0000H Instrucciones

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

Llamado a Subrutina - Procesamiento de la instrucción CALL


Cuando el decodificador identifica la instrucción CALL, la Unidad de Control reconoce que
se trata de un salto con retorno y que por lo tanto antes de modificar el Contador de Programa
(CP) con la dirección que acompaña al código de operación, se debe resguardar la dirección de
retorno. Esta dirección está en el CP y debe ser copiada en el lugar de Memoria Pila que indica
el Registro Puntero a Pila (PP). Este registro siempre apunta a una dirección ocupada, por lo
tanto, para realizar una escritura primero debe apuntar a una dirección que esté libre, para lo
cual se decrementa en una unidad (PP = PP - 1). De este modo, en el caso de anidamiento de
subrutinas (dentro de una subrutina se llama a otra), las direcciones de retorno se van "apilando"
hasta que las instrucciones de retorno (RET) vacían la pila. El Registro PP es un registro visible
al usuario, por lo tanto puede ser establecido por el programador en un valor determinado, de
no ser así, por defecto este registro toma el valor de la primera instrucción del programa.
entonces, se inicia la ejecución decrementando el Puntero a Pila, luego esta dirección se
copia al Registro de Direcciones para que el bus de direcciones active la celda correspondiente
de la memoria. La Unidad de Control envía una orden de escritura en memoria (bus de control)
y la dirección del CP se copia en el Registro de Palabra para que el bus de datos la guarde en la
celda indicada por PP. Realizada esta acción, se ejecuta el salto a la subrutina copiando la
dirección que acompaña al código de operación (Registro de Instrucciones) en el Contador de
Programa.

71
Figura 2.17 Ciclo de ejecución de una instrucción de salto con retorno (CALL).

Retorno al programa principal - Procesamiento de la instrucción RET


Cuando el decodificador reconoce la instrucción RET, el secuenciador inicia las acciones
de ejecución del retorno. El PP contiene la última dirección de almacenamiento de la Memoria
Pila, por lo tanto, la dirección del PP se copia en el Registro de Direcciones, el bus de direcciones
activa la celda de memoria correspondiente a esa dirección y la Unidad de Control envía una
orden de lectura. El contenido de la celda activada viaja por el bus de datos hasta el Registro de
Palabra y por el bus interno hasta el Contador de Programa. De este modo, el CP ha quedado
cargado con la dirección de retorno. Por último, el PP debe incrementarse en 1 (PP = PP + 1),
para quedar listo para la próxima lectura.

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.

Complete el siguiente cuadro, que se corresponde con el seguimiento realizado en el apartado a)

1) Después del ciclo de búsqueda: 0107 H CALL 0209 H CP = 0108 H


PP = 0100 H

2) Después de ejecutar: 0107 H CALL 0209 H CP = 0209 H


PP = 00FF H

3) Después de ejecutar: 0209 H STORE, (035B H) Reg. Palabra = 20D


(035B H) = 20D

4) Después de ejecutar: 020A H RET CP = 0108 H


PP = 0100 H

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

Registro de Bus de Direc. Memoria Bus Interno Registro de


2 8 Puntero Pila
Direcciones 0107H Principal 00FF H Direcciones

Memoria Bus de Datos Registro de Registro de Bus de Direc.


3 9 Memoria Pila
Principal (0C 0209 H) Palabra Direcciones 00FF H

Bus Interno Bus Interno


Registro de Registro de Contador de Registro de
4 10
Palabra 0C 0209 H Instrucciones Programa Palabra
0108 H

(Cod. Op.) Bus de Datos


Registro de Registro de
Decodificador 11 Memoria Pila
5 Instrucciones Palabra
0C 0108 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 (Dir. Operando)


Contador de Registro de Registro de Registro de
1 7
Programa Direcciones Instrucciones 035B H Direcciones
0209 H

Registro de Bus de Direc. Memoria Registro de Bus de Direc. Memoria


2 8
Direcciones 0209 H Principal Direcciones 035B H Principal

Bus Interno
Memoria Bus de Datos Registro de Registro de
3 9 Acumulador
Principal (02 035B H) Palabra Palabra
20

Bus de Datos MP = 035B


Registro de Bus Interno Registro de Registro de
4 10
Palabra 02 035B H Instrucciones Palabra 13 20
20

Registro de (Cod. Op.)


5 Decodificador
Instrucciones 02

6 CP = 0209 H CP+1=020A H

Bus Interno Bus Interno


Contador de Registro de Registro de
1 7 Puntero Pila
Programa Direcciones 00FF H Direcciones
020A H

Bus de Direc. Bus de Direc.


Registro de Memoria Registro de
2 8 Memoria Pila
Direcciones 020A H Principal Direcciones
00FF H

Bus Datos
Memoria Bus de Datos Registro de Registro de
3 9 Memoria Pila
Principal (0D 0000 H) Palabra Palabra
0108 H

Registro de Bus Interno Registro de Registro de Bus Interno CP = 020B H


4 10
Palabra 0D 0000 H Instrucciones Palabra 0108 H CP = 0108 H

Registro de (Cod. Op.)


5 Decodificador 11 PP = 00FF H PP+1 = 0100 H
Instrucciones 0D

6 CP = 020A H CP+1= 020BH

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

También podría gustarte