La ejecución de programas

Como ya apuntábamos en la introducción de este tema, un programa es un conjunto de instrucciones que se almacenan en direcciones sucesivas de memoria y que se deben ir ejecutando una tras otra. En este apartado vamos a introducirnos un poco más en el detalle de cómo se ejecutan las instrucciones.

Decíamos también, que la arquitectura de un equipo depende en parte del tipo de instrucciones que este ejecuta. El conjunto de instrucciones de un equipo puede ser muy variable, pero podemos distinguir un conjunto básico que sería este:

  • Instrucciones de transferencia de datos: permiten mover datos e instrucciones de un lugar a otro del sistema. Se les debe indicar origen y destino.
  • Instrucciones aritmético-lógicas: son las operaciones básicas, aritméticas (suma, resta, multiplicación, división) y lógicas (AND, OR, NOT).
  • Instrucciones de control de flujo: aunque por norma general las instrucciones se ejecutan de forma secuencial, una tras otra, a veces según ciertas condiciones se producen saltos, bien para repetir varias veces las mismas instrucciones o para saltarse una parte.
  • Instrucciones de entrada-salida: necesarias para permitir la comunicación entre CPU y periféricos.

La mayoría de las instrucciones realizan operaciones sobre uno o varios operandos, por lo tanto, la propia instrucción debe incluir alguna forma de localizar dichos operandos. Es lo que se conoce como modos de direccionamiento, y sin profundizar en este aspecto, de manera general son estos:

  • Implícito: No se especifica pero se sabe que es el último valor que se acaba de calcular.
  • Inmediato: El valor del operando aparece tal cual en la instrucción.
  • Directo: En la instrucción aparece una dirección de memoria que contiene al operando.
  • Indirecto: La instrucción contiene una dirección de memoria que contiene la verdadera dirección del operando.

Echemos un vistazo a un esquema global del sistema:

Esquema lógico de las unidades funcionales de un sistema informático

Esquema lógico de las unidades funcionales de un sistema informático

Vamos a ver ya como se ejecutarían las instrucciones. Para ello vamos a proponer un pequeño conjunto de ellas, es decir, un pequeño programa de 3 instrucciones:

            LD /5 (Load)

            ADD 9

            ST /6 (Store)

Con el símbolo “/” indicamos que se trata de una dirección de memoria no de un valor tal cual. Lo que hace este pequeño programa es:

  1. Carga el contenido de la celda con dirección de memoria 5 en un registro operando de la ALU.
  2. Le suma el valor 9.
  3. El resultado lo guarda en la dirección de memoria 6.

Aunque puedan parecer instrucciones extrañas, se ha de aclarar que cualquier programa de los que disponemos en un ordenador personal queda traducido internamente en una larga secuencia de pequeñas instrucciones como estas.

Vamos a suponer que las instrucciones están colocadas en las posiciones de memoria 1, 2 y 3. Para cada instrucción habrá una fase de búsqueda y otra de ejecución. Vamos a ver una por una.

1º. Búsqueda de la instrucción LD /5:

El contador de programa (CP) está a 1, por lo que se sabe que se ejecutará la instrucción que está en la posición de memoria 1 pero aún no se conoce la instrucción. Se debe extraer de la memoria la instrucción para llevarla hasta la Unidad de Control.

2º. Ejecución de la instrucción LD /5:

La primera instrucción ya está en la Unidad de Control, concretamente en el registro de instrucción (R.I.):

  • El decodificador la decodifica y reconoce qué tipo de instrucción es: instrucción de carga de información.
  • El secuenciador manda una señal a la memoria para que busque la dirección 4.
  • La memoria lee la dirección 4, supongamos que contiene el valor 7, y pone este dato en el bus de datos, que llegará al Operando 1 de la ALU.
  • Se incrementa el Contador de Programa, que pasa a valer 2.

3º. Búsqueda de la instrucción ADD 9:

Ahora el CP está a 2, por lo que se deberá extraer la instrucción de la dirección de memoria 2 y mandarla a la Unidad de Control.

4º. Ejecución de la instrucción ADD 9:

El decodificador reconoce que es una operación de suma y que el operando es 9 (el otro operando es el que está ya cargado en la ALU). La UC envía el valor 9 al Operando 2 de la ALU y el secuenciador envía a la propia ALU una indicación de suma. La ALU realiza la suma dejando el resultado en el registro Acumulador (7 + 9 = 15). Se incrementa el CP.

5º. Búsqueda de la instrucción ST /6:

Ahora el CP apunta a la dirección 3 de memoria. Se extraerá la instrucción guardada aquí y se enviará a la UC.

6º. Ejecución de la instrucción ST /6:

El decodificador reconoce que es una instrucción de almacenamiento y que el operando es la dirección de memoria 6. El secuenciador envía las señales oportunas para que en la dirección de memoria 6 se guarde el valor que está en el Acumulador (15). El contador de programa se volvería a incrementar aunque este programa ya ha finalizado.

Deja un comentario