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 secuenciales1
Preparar Dirección
Punto de inicioMAR ← 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 1MBR ← 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 2IR ← 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]
- 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
- 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]
- 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]
- 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]
- 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
- 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
- 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 Datos5 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
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 ALU4 tipos
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)
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 programa6 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