Ciclo de la instrucción Completo
Etapa 1: Captación
Esta etapa es igual para todas las instrucciones. Su objetivo es leer la instrucción desde la memoria y cargarla en el Registro de Instrucciones (IR). Consta de tres microoperaciones:
MAR←IP
La UC transfiere al Registro de Direcciones de Memoria (MAR) la dirección de la próxima instrucción, almacenada en el Puntero de Instrucción (IP).MBR← read(Memoria[MAR]) |IP←IP+ 1
La UC activa la señal de lectura para leer la instrucción ubicada en la dirección contenida en elMAR. El valor leído se guarda en el Registro de Datos de Memoria (MBR) y, al mismo tiempo, elIPse incrementa para apuntar a la siguiente instrucción u operando.IR←MBR
El contenido delMBRse transfiere alIR, dejando la instrucción lista para ser decodificada y ejecutada.
Etapa 2: Ejecución
En esta etapa, el decodificador de instrucciones interpreta el valor en el registro IR. A partir del código de operación, lee las microinstrucciones necesarias en la memoria de control para determinar el tipo de instrucción, la cantidad de operandos y el modo de direccionamiento.
Luego, estas microinstrucciones se envían al secuenciador, que genera las señales de control precisas para ejecutar la operación.
A continuación se detallan los ciclos para las instrucciones más comunes:
Instrucciones con dos operandos: MOV, ADD, SUB, CMP
Destino en registro (Rx)
Modo entre registros (
Rx,Ry)- La ejecución se realiza en un solo paso:
- MOV:
Rx←Ry - ADD:
Rx←Rx+Ry| update(Flags) - SUB:
Rx←Rx-Ry| update(Flags) - CMP:
Rx-Ry| update(Flags) (solo actualiza flags)
- MOV:
- La ejecución se realiza en un solo paso:
Modo directo (
Rx,[Dirección])MAR←IP— Obtener dirección del operando fuente.MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer la dirección desde memoria e incrementarIP.MAR←MBR— Transferir la dirección alMAR.MBR← read(Memoria[MAR]) — Obtener el dato.- Ejecutar la operación:
- MOV:
Rx←MBR - ADD:
Rx←Rx+MBR| update(Flags) - SUB:
Rx←Rx-MBR| update(Flags) - CMP:
Rx-MBR| update(Flags) (solo actualiza flags)
- MOV:
Modo inmediato (
Rx,Dato)MAR←IP— Obtener dirección del dato inmediato.MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer el dato e incrementarIP.- Ejecutar la operación (igual que en el caso anterior).
Modo indirecto (
Rx,[BL])MAR←BL— Obtener dirección del dato desde el registroBL.MBR← read(Memoria[MAR]) — Leer el dato.- Ejecutar la operación (igual que en el caso anterior).
Destino en memoria ([Dirección] o [BL])
En este caso, el resultado de la operación se almacena en una dirección de memoria especificada en la instrucción o indicada por el contenido del registro BL.
Modo directo (
[Dirección],Ry)MAR←IP— Obtener dirección destino.MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer la dirección e incrementarIP.MAR←MBR— Transferir dirección aMAR.
Según la instrucción:
MOV:
Ry←MBR— CopiarRyalMBR.write(Memoria[
MAR]) ←MBR— Escribir en memoria.
ADD/SUB/CMP:
MBR← read(Memoria[MAR]) — Leer el dato.Ejecutar la operación:
- ADD:
MBR←MBR+Ry| update(Flags) - SUB:
MBR←MBR-Ry| update(Flags) - CMP:
MBR-Ry| update(Flags) (solo actualiza flags)
- ADD:
Si es ADD o SUB: write(Memoria[
MAR]) ←MBR— Escribir en memoria.
Modo indirecto (
[BL],Ry)MAR←BL— Transferir dirección de destino (enBL) aMAR.
Según la instrucción:
MOV:
MBR←Ry— CopiarRyalMBR.write(Memoria[MAR]) ←
MBR— Escribir en memoria.
ADD/SUB/CMP:
MBR← read(Memoria[MAR]) — Leer el dato.ADD/SUB/CMP: Ejecutar la operación (igual que en el caso anterior).
Si es ADD o SUB: write(Memoria[
MAR]) ←MBR— Escribir en memoria.
Modo directo-inmediato (
[Dirección],Dato)MAR←IP— Obtener dirección destino.MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer dirección e incrementarIP.MAR←IP|ri←MBR— Preparar para leer el dato y guardar la dirección destino en un registro intermedio (ri).MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer dato e incrementarIP.
Según la instrucción:
MOV:
MAR←ri— Copiar dirección destino.write(Memoria[
MAR]) ←MBR— Escribir en memoria.
ADD/SUB/CMP:
MAR←ri|id←MBR— Cargar dirección destino y guardar el valor inmediato enid.MBR← read(Memoria[MAR]) — Leer el valor actual de destino.Ejecutar la operación:
- ADD:
MBR←MBR+id| update(Flags) - SUB:
MBR←MBR-id| update(Flags) - CMP:
MBR-id| update(Flags) (solo actualiza flags)
- Si es ADD o SUB: write(Memoria[
MAR]) ←MBR— Escribir en memoria.
Modo indirecto-inmediato (
[BL],Dato)MAR←IP— Obtener dirección del dato inmediato.MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer dato e incrementarIP.
Según la instrucción:
MOV:
MAR←BL— Copiar dirección de destino.write(Memoria[MAR]) ←
MBR
ADD/SUB/CMP:
MAR←BL|id←MBR— Cargar la dirección destino y guardar el valor inmediato en id.MBR← read(Memoria[MAR]) — Leer el valor actual de destino.Ejecutar la operación (igual que en el caso anterior).
Si es ADD o SUB: write(Memoria[
MAR]) ←MBR— Escribir en memoria.
Instrucciones con un operando: JMP, Jxx
Salto a (
Dirección)MAR←IP— Obtener la dirección del salto.MBR← read(Memoria[MAR]) |IP←IP+ 1 — Leer la dirección de destino e incrementarIP.
Según la instrucción:
JMP:
IP←MBR
Jxx:
IP←MBRsi se cumple la condición del flagxx; en caso contrario, continúa con la siguiente instrucción.
Instrucciones sin operandos
HLT
- Detiene la ejecución de la CPU.