Skip to content

Ejecución de instrucciones ​

En el apartado anterior hemos estudiado los principales componentes de la arquitectura de Von Neumann: la CPU, la memoria principal, los buses y las unidades de entrada/salida.

Ahora veremos cómo colaboran estos componentes para ejecutar las instrucciones de un programa.

1. Programas e instrucciones ​

Un programa es un conjunto de instrucciones que indican al ordenador qué operaciones debe realizar.

En la arquitectura de Von Neumann, tanto las instrucciones como los datos se almacenan en la memoria principal.

La CPU obtiene las instrucciones de la memoria, las interpreta y realiza las operaciones indicadas.

Instrucciones máquina ​

Las instrucciones máquina son las instrucciones que un procesador puede interpretar y ejecutar directamente.

Cada instrucción se representa mediante una secuencia de bits que identifica la operación y, cuando es necesario, los operandos utilizados.

Para facilitar su comprensión, utilizaremos representaciones simbólicas similares a las del lenguaje ensamblador.

Por ejemplo:

asm
LOAD R0, @4

Esta instrucción significa:

  • LOAD: Operación que permite cargar un dato desde la memoria.
  • R0: Registro de la CPU donde se almacenará el dato.
  • @4: Dirección de memoria que contiene el dato que se desea leer.

Por tanto, la instrucción indica que la CPU debe leer el contenido de la dirección de memoria 4 y almacenarlo en el registro R0.

Instrucciones y datos

Aunque las instrucciones y los datos se almacenan en la misma memoria, desempeñan funciones diferentes:

  • Instrucciones: Indican las operaciones que debe realizar la CPU.
  • Datos: Son los valores sobre los que se realizan esas operaciones.

2. Ciclo de instrucción ​

La CPU ejecuta los programas mediante un proceso repetitivo denominado ciclo de instrucción.

En un modelo simplificado, este proceso se divide en tres fases principales: búsqueda, decodificación y ejecución.

La siguiente imagen representa estas fases y muestra cómo se repiten para ejecutar las instrucciones de un programa:

Ciclo de instrucción de la CPU: búsqueda, decodificación y ejecución

Búsqueda (Fetch) ​

La CPU obtiene de la memoria principal la siguiente instrucción que debe ejecutar.

Para localizarla, utiliza el contador de programa (PC), que contiene su dirección de memoria.

La instrucción obtenida se almacena en el registro de instrucciones (RI).

Decodificación (Decode) ​

La Unidad de Control (UC) interpreta la instrucción almacenada en el RI.

Durante esta fase identifica:

  • La operación que debe realizarse.
  • Los registros que intervienen.
  • Los operandos o las direcciones de memoria necesarios.

Ejecución (Execute) ​

La CPU realiza la operación indicada.

Dependiendo de la instrucción, puede ser necesario:

  • Leer un dato de la memoria.
  • Realizar una operación aritmética o lógica.
  • Almacenar un resultado en un registro o en memoria.
  • Modificar el orden de ejecución del programa.

Una vez completada la instrucción, la CPU continúa con la siguiente y repite el ciclo.

INFO

Estas fases representan un modelo simplificado. En los procesadores reales, la ejecución puede incluir más etapas y mecanismos adicionales.

3. Registros utilizados ​

Durante la ejecución de las instrucciones intervienen diferentes registros de la CPU.

Contador de programa (PC) ​

El contador de programa (PC) contiene la dirección de memoria de la siguiente instrucción que debe obtenerse.

En nuestro modelo simplificado, el PC se incrementa después de obtener una instrucción para señalar la siguiente posición de memoria.

Registro de instrucciones (RI) ​

El registro de instrucciones (RI) almacena la instrucción obtenida de la memoria mientras la CPU la interpreta y ejecuta.

Registros de propósito general ​

Los registros de propósito general, como R0 o R1, permiten almacenar temporalmente datos y resultados de operaciones.

Por ejemplo, la instrucción:

asm
LOAD R0, @4

Utiliza el registro R0 para guardar el dato leído de la dirección de memoria 4.

4. Ejemplo de ejecución de una instrucción ​

Vamos a estudiar cómo se ejecuta la instrucción:

asm
LOAD R0, @4

Para ello, utilizaremos un modelo simplificado de CPU y memoria en el que cada instrucción ocupa una posición de memoria.

Estado inicial ​

Supongamos que:

  • La instrucción LOAD R0, @4 está almacenada en la dirección de memoria 6.
  • La dirección de memoria 4 contiene el valor binario 00101101, equivalente a 45 en decimal.
  • El contador de programa (PC) contiene inicialmente la dirección 6.
  • El registro de instrucciones (RI) todavía no contiene la instrucción.
  • El registro R0 todavía no contiene el dato que queremos cargar.

La situación inicial es la siguiente:

ElementoContenido
Memoria, dirección 400101101 (dato)
Memoria, dirección 6LOAD R0, @4 (instrucción)
Registro PC6
Registro RI—
Registro R0—

Representación simplificada

Para facilitar la comprensión, representamos las instrucciones mediante su forma simbólica y suponemos que cada instrucción ocupa una posición de memoria.

En un ordenador real, las instrucciones se almacenan codificadas en binario y pueden ocupar varios bytes.

Ejecución paso a paso ​

La siguiente imagen representa las cuatro etapas de ejecución de la instrucción LOAD R0, @4:

Ejecución de la instrucción LOAD R0, @4: búsqueda, decodificación, lectura y almacenamiento

Paso 1. Búsqueda de la instrucción

La CPU utiliza el valor 6 del contador de programa para localizar la instrucción en memoria.

La instrucción se transfiere al registro RI y el PC se incrementa a 7, señalando la siguiente posición de memoria.

Paso 2. Decodificación

La Unidad de Control interpreta la instrucción almacenada en el RI e identifica:

  • Operación: LOAD.
  • Registro de destino: R0.
  • Dirección de memoria: 4.

Paso 3. Lectura del dato

La CPU solicita el contenido de la dirección 4 mediante los buses de direcciones y control.

La memoria responde enviando el valor 00101101 a través del bus de datos.

Paso 4. Almacenamiento en el registro

La CPU recibe el dato y lo almacena en el registro R0.

La instrucción ha terminado de ejecutarse.

Resultado final ​

Después de ejecutar la instrucción, el estado de los registros es:

RegistroContenido
PC7
RILOAD R0, @4
R000101101

La CPU ha copiado el contenido de la dirección 4 al registro R0.

El dato original permanece almacenado en memoria, ya que se ha realizado una operación de lectura.

TIP

Observa que el PC contiene ahora la dirección 7, mientras que el registro RI conserva la instrucción que acabamos de ejecutar.

Esto permite que la CPU continúe con la siguiente instrucción del programa.

5. Ejecución secuencial de un programa ​

Un programa normalmente contiene múltiples instrucciones que deben ejecutarse siguiendo un orden.

La CPU repite el ciclo de instrucción para cada una de ellas:

  1. Obtiene la instrucción indicada por el PC.
  2. La almacena en el RI y la decodifica.
  3. Ejecuta la operación correspondiente.
  4. Continúa con la siguiente instrucción.

En nuestro ejemplo, después de ejecutar LOAD R0, @4, el contador de programa contiene la dirección 7.

Por tanto, en el siguiente ciclo la CPU buscará la instrucción almacenada en esa dirección.

En condiciones normales, las instrucciones se ejecutan secuencialmente, siguiendo el orden en que aparecen en el programa.

Sin embargo, existen instrucciones que permiten modificar este orden, como los saltos, utilizados para implementar decisiones y repeticiones.

De esta forma, la combinación de instrucciones sencillas permite ejecutar programas complejos.