Fases del Ciclo

Cada instrucción pasa por estas tres etapas fundamentales

01

Captación

FETCH
🎯
Obtener la instrucción desde la memoria principal

Secuencia de Captación

3 pasos secuenciales
1
Preparar Dirección
Punto de inicio
🎯
MAR ← IP
Cargar la dirección de la próxima instrucción desde el Contador de Programa al Registro de Dirección de Memoria
IP/PC 0x1000
MAR 0x1000
Requiere paso 1
2
Acceso a Memoria
Depende del paso 1
📥
MBR ← read(Memoria[MAR])
Leer el contenido de la memoria en la dirección especificada por MAR y almacenarlo en el Registro de Buffer de Memoria
Memoria[MAR] 0x8B45
MBR 0x8B45
IP ← IP + 1 (incrementar contador)
Requiere paso 2
3
Cargar Instrucción
Depende del paso 2
📋
IR ← MBR
Transferir la instrucción desde el Buffer de Memoria al Registro de Instrucción para su posterior decodificación
MBR 0x8B45
IR 0x8B45
Resultado: La instrucción está lista para la fase de decodificación
Tiempo: 3 ciclos de reloj
Accesos a memoria: 1 lectura
Registros modificados: MAR, MBR, IR, IP
02

Decodificación

DECODE
🔍
Analizar e interpretar la instrucción obtenida

Proceso de Análisis

🎯
Tipo de Operación

Identificar si es MOV, ADD, JMP, etc.

📍
Operandos

Determinar registros o direcciones

🔗
Modo de Direccionamiento

Directo, indirecto, inmediato

Señales de Control

Preparar rutas de datos

03

Ejecución

EXECUTE
Realizar la operación especificada por la instrucción

Tipos de Ejecución

📋 Transferencias
🧮 Aritmética
🎮 Control

⚡ TIPOS DE INSTRUCCIONES

📋 TRANSFERENCIAS: MOV

Entre Registros

MOV Rx, Ry
  • Paso 4: Rx ← Ry

Directo a Registro

MOV Rx, [dirección]
    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: MAR ← MBR
  • Paso 7: MBR ← read(Memoria[MAR])
  • Paso 8: Rx ← MBR

Registro a Memoria

MOV [dirección], Ry
    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: MAR ← MBR
  • Paso 7: MBR ← Ry
  • Paso 8: write(Memoria[MAR]) ← MBR

Inmediato

MOV Rx, [inmediato]
    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: Rx ← MBR
Destino puede ser [M] o BL

Indirecto

MOV Rx, [BL]
  • Paso 4: MAR ← BL
  • Paso 5: MBR ← read(Memoria[MAR])
  • Paso 6: Rx ← MBR
🧮 ARITMÉTICA: ADD y SUB
CMP: es igual a SUB sin guardar resultado

Entre Registros

ADD Rx, Ry
  • Paso 4: Rx ← Rx opALU Ry ; update(Flags)

Directo

ADD Rx, [dirección]
    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: MAR ← MBR
  • Paso 7: MBR ← read(Memoria[MAR])
  • Paso 8: Rx ← Rx opALU MBR ; update(Flags)
y viceversa

Inmediato

ADD Rx, [inmediato]
    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: Rx ← opALU MBR ; update(Flags)
Destino puede ser [M] o BL

Indirecto

ADD Rx, [BL]
  • Paso 4: MAR ← BL
  • Paso 5: MBR ← read(Memoria[MAR])
  • Paso 6: Rx ← Rx opALU MBR ; update(Flags)
🎮 CONTROL

JMP - Salto Incondicional

    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: IP ← MBR

Saltos Condicionales

JZ: Si Z = 1 (es igual) → IP ← MBR
JC: Si C = 1 (es menor) → IP ← MBR

HLT - Detener CPU

  • Paso 4: Detiene CPU

CALL - Llamada a Subrutina

    📥 Pasos 4-5: Obtener segundo byte de memoria
  • Paso 4: MAR ← IP
  • Paso 5: MBR ← read(Memoria[MAR]); IP ← IP + 1
  • Paso 6: SP ← SP − 1
  • Paso 7: MAR ← SP
  • Paso 8: MBR ← IP
  • Paso 9: write(Memoria[MAR]) ← MBR
  • Paso 10: IP ← segundo byte

RET - Retorno de Subrutina

  • Paso 4: MAR ← SP
  • Paso 5: SP ← SP + 1
  • Paso 6: IR ← read(Memoria[MAR])
  • Paso 7: IP ← IR

Tipos de Instrucciones

Detalle completo de cada categoría de instrucciones y sus variantes

📋

Transferencias

MOV - Movimiento de Datos
5 tipos

Entre Registros

Simple
MOV Rx, Ry
Paso 4: Rx ← Ry
Ry
Rx

Directo a Registro

Medio
MOV Rx, [dirección]
Pasos 4-5: Obtener segundo byte
Paso 6: MAR ← MBR
Paso 7: MBR ← read(Memoria[MAR])
Paso 8: Rx ← MBR

Registro a Memoria

Medio
MOV [dirección], Ry
Pasos 4-5: Obtener segundo byte
Paso 6: MAR ← MBR
Paso 7: MBR ← Ry
Paso 8: write(Memoria[MAR]) ← MBR

Inmediato

Simple
MOV Rx, [inmediato]
Pasos 4-5: Obtener segundo byte
Paso 6: Rx ← MBR
💡 Destino puede ser MY o BL

Indirecto

Complejo
MOV Rx, [Ry]
Paso 6: MAR ← BL
Paso 7: MBR ← read(Memoria[MAR])
Paso 8: Rx ← MBR
🧮

Aritmética

ADD, SUB, CMP - Operaciones ALU
4 tipos
⚠️ CMP: es igual a SUB sin guardar resultado

Entre Registros

Simple
ADD Rx, Ry
Paso 4: Rx ← opALU Ry ; update(Flags)
Actualiza: Z C S O

Directo

Medio
ADD Rx, [dirección]
Pasos 4-5: Obtener segundo byte
Paso 6: MAR ← MBR
Paso 7: MBR ← read(Memoria[MAR])
Paso 8: Rx ← opALU MBR ; update(Flags)
🔄 También funciona en sentido inverso

Inmediato

Simple
ADD Rx, [inmediato]
Pasos 4-5: Obtener segundo byte
Paso 6: Rx ← opALU MBR ; update(Flags)

Indirecto

Complejo
ADD Rx, [Ry]
Paso 6: MAR ← BL
Paso 7: MBR ← read(Memoria[MAR])
Paso 8: Rx ← opALU MBR ; update(Flags)
🎮

Control

JMP, CALL, RET - Flujo del programa
6 tipos

JMP - Salto Incondicional

Simple
JMP dirección
Pasos 4-5: Obtener segundo byte
Paso 6: IP ← MBR
PC → Nueva dirección

Saltos Condicionales

Medio
JZ dirección
Si Z = 1 (es igual) → IP ← MBR
JC dirección
Si C = 1 (es menor) → IP ← MBR

HLT - Detener CPU

Simple
HLT
Paso 4: Detiene CPU
🛑 Fin de programa

CALL - Llamada a Subrutina

Complejo
CALL dirección
Pasos 4-5: Obtener segundo byte
Paso 6: SP ← SP − 1
Paso 7: MAR ← SP
Paso 8: MBR ← IP
Paso 9: write(Memoria[MAR]) ← MBR
Paso 10: IP ← segundo byte
Stack: Guardar IP actual
Saltar a subrutina

RET - Retorno de Subrutina

Medio
RET
Paso 4: MAR ← SP
Paso 5: SP ← SP + 1
Paso 6: IR ← read(Memoria[MAR])
Paso 7: IP ← IR
Stack: Recuperar IP
Continuar ejecución

🔧 Simulador Interactivo

Sigue paso a paso el ciclo de instrucción de la CPU

1
de 6

Diagrama de CPU

PC
0x1000
Memoria
---
IR
---
Decodificador
---
ALU
---
Reg A
0x00
Reg B
0x00
Control
IDLE
AX
0x0000
BX
0x0000
CX
0x0000
DX
0x0000
SP
0xFFFF
BP
0x0000

Memoria

Búsqueda de Instrucción
El procesador lee la instrucción desde la dirección almacenada en el Contador de Programa (PC).
PC → Dirección de Memoria → Instrucción