5.3 Ciclo de la instrucción: Etapas de captación y ejecución

En este apartado se detalla el proceso llevado a cabo por la Unidad de Control (UC) para ejecutar cada instrucción, destacando los aspectos clave:

  • Secuencia de pasos.
  • Registros involucrados en cada etapa del proceso.
  • Uso de los buses de datos, direcciones y control.
  • Señales de control generadas.

El ciclo de la instrucción se define como la secuencia de microoperaciones necesarias para ejecutar una instrucción en el sistema. Estas microoperaciones se expresan mediante un lenguaje de transferencia entre registros, representado de la forma:

destino \(\leftarrow\) origen

La Figura 5.20 ilustra el flujo básico del ciclo de instrucción implementado en el simulador, permitiendo visualizar los pasos secuenciales de búsqueda, decodificación y ejecución.

Flujo del ciclo de instrucción en VonSim8

Figura 5.20: Flujo del ciclo de instrucción en VonSim8

5.3.1 Etapa de Captación:

En esta etapa, común a todas las instrucciones, consiste en la lectura de la instrucción desde la memoria.

  1. MAR \(\leftarrow\) IP: el contenido del registro puntero de instrucciones IP se transfiere al registro de direcciones de memoria MAR. La UC genera la señal necesaria para seleccionar el valor del IP y copiarlo en el MAR.
  2. MDR \(\leftarrow\) read(Memoria[MAR]) ; IP \(\leftarrow\) IP + 1: la UC activa la señal de lectura (read) hacia la memoria, utilizando el valor del MAR como dirección. El dato leído se transfiere al registro de datos de memoria MBR a través del bus de datos. Simultáneamente, el IP se incrementa en 1 para apuntar al siguiente byte.
  3. IR \(\leftarrow\) MBR: el contenido del MBR se transfiere al registro de instrucciones IR, completando la etapa de captación.

5.3.2 Etapa de Ejecución:

En esta etapa, las operaciones específicas dependen del tipo de instrucción. A continuación, se describen algunos casos representativos:

  • MOV Rx, Ry (Copia entre registros)
    1. Rx \(\leftarrow\) Ry: el contenido del registro Ry se copia en el registro Rx.
  • MOV Rx, [Dirección] (Carga a registro)
    1. MAR \(\leftarrow\) IP: el valor del IP se transfiere a MAR.
    2. MBR \(\leftarrow\) read(Memoria[MAR]); IP \(\leftarrow\) IP + 1: se lee (read) de memoria el contenido de la dirección indicada por MAR y se almacena en MBR.Simultáneamente, el IP se incrementa.
    3. MAR \(\leftarrow\) MBR: el contenido de MBR se transfiere a MAR.
    4. MBR \(\leftarrow\) read(Memoria[MAR]): se lee de memoria el contenido de la dirección indicada por MAR y se almacena en MBR.
    5. Rx \(\leftarrow\) MBR: el contenido del MBR se copia al registro Rx.
  • MOV [Dirección], Ry (Almacenar en memoria)
        1. igual que MOV Rx, [Dirección].
    1. MBR \(\leftarrow\) Ry: el contenido de Ry se transfiere a MBR.
    2. write(Memoria[MAR]) \(\leftarrow\) MBR: el contenido de MBR se escribe (write) en memoria en la dirección apuntada por el MAR.
  • ADD Rx, [Dirección] (Sumar a registro)
          1. igual que MOV Rx, [Dirección].
    1. Rx \(\leftarrow\) Rx + MBR: la Unidad Aritmético-Lógica (ALU) realiza la suma entre Rx y MBR, almacenando el resultado en Rx. El Registro de Estado RS se actualiza con los indicadores correspondientes.
  • SUB [Dirección], Ry (Restar a memoria)
          1. igual que MOV Rx, [Dirección].
    1. MBR \(\leftarrow\) Ry - MBR: la ALU resta el contenido de MBR al de Ry, almacenando el resultado en MBR. El RS se actualiza.
    2. write(Memoria[MAR]) \(\leftarrow\) MBR: el contenido de MBR se escribe en memoria en la dirección apuntada por el MAR.
  • CMP Rx, [Dirección] (Comparar a registro)
          1. igual que MOV Rx, [Dirección].
    1. Rx - MBR: la ALU realiza la resta entre el contenido de Rx y MBR. Aunque el resultado no se almacena, el RS se actualiza con los indicadores de comparación.
  • JMP Dirección (Salto incondicional)
      1. igual que MOV Rx, [Dirección].
    1. IP \(\leftarrow\) MBR: El contenido del MBR se transfiere al registro IP, estableciendo la nueva dirección de ejecución.
  • JC Dirección (Salto condicional si C=1)
      1. Igual que MOV Rx, [Dirección].
    1. Si C == 1: IP \(\leftarrow\) MBR: si la bandera de acarreo (C) está activa, el contenido del MBR se transfiere al registro IP.
  • JZ Dirección (Salto condicional si Z=1)
      1. igual que MOV Rx, [Dirección].
    1. Si Z == 1: IP \(\leftarrow\) MBR: si la bandera de cero (Z) está activa, el contenido del MBR se transfiere al registro IP.

5.3.3 Ciclo de la instrucción: modos adicionales

  • MOV Rx, [BL] (Carga indirecto)
    1. MAR \(\leftarrow\) IP: El valor del IP se transfiere a MAR.
    2. MBR \(\leftarrow\) read(Memoria[MAR]); IP \(\leftarrow\) IP + 1: Se lee (read) de memoria el contenido de la dirección indicada por MAR y se almacena en MBR.Simultáneamente, el IP se incrementa.
    3. MAR \(\leftarrow\) BL: El contenido de BL se transfiere a MAR.
    4. MBR \(\leftarrow\) read(Memoria[MAR]): Se lee de memoria el contenido de la dirección indicada por MAR y se almacena en MBR.
    5. Rx \(\leftarrow\) MBR: El contenido del MBR se copia al registro Rx.
  • MOV Rx, Dato (Carga valor inmediato)
    1. MAR \(\leftarrow\) IP: El valor del IP se transfiere a MAR.
    2. MBR \(\leftarrow\) read(Memoria[MAR]); IP \(\leftarrow\) IP + 1: Se lee (read) de memoria el contenido de la dirección indicada por MAR y se almacena en MBR.Simultáneamente, el IP se incrementa.
    3. Rx \(\leftarrow\) MBR: El contenido del MBR se copia al registro Rx.