~/si/ud01 $ cat 06-instrucciones.md
- Sistemas Informáticos
- UD01
- lección 06/10
Cómo ejecuta instrucciones la CPU
Ya conocemos la CPU, la memoria y los buses. Ahora podemos unirlos en el proceso central de cualquier ordenador: ejecutar instrucciones una tras otra.
Abrir presentación: Cómo ejecuta instrucciones la CPU (pantalla completa)
6.1. Conjunto de instrucciones
Section titled “6.1. Conjunto de instrucciones”La CPU no ejecuta órdenes escritas en lenguaje natural. Trabaja con instrucciones codificadas en binario. El conjunto de instrucciones de una CPU define qué operaciones puede realizar.
Las instrucciones suelen agruparse en tres tipos básicos:
- Aritmético-lógicas: realizan cálculos y comparaciones, como sumar, restar, AND, OR o NOT.
- Transferencia de datos: mueven datos entre registros, memoria y dispositivos de entrada/salida.
- Control de flujo: cambian el orden normal de ejecución, por ejemplo mediante saltos, llamadas o bucles.
Cada familia de procesadores tiene su propio conjunto de instrucciones, aunque muchas operaciones básicas se repiten en casi todas.
6.1.1. RISC y CISC
Section titled “6.1.1. RISC y CISC”Las CPU también se pueden clasificar por la forma en que diseñan su conjunto de instrucciones. Las arquitecturas RISC suelen priorizar instrucciones simples y regulares, que se combinan para realizar tareas complejas. Las arquitecturas CISC disponen de instrucciones más variadas y algunas pueden expresar operaciones complejas con menos instrucciones.
| Aspecto | RISC (Reduced Instruction Set Computer) | CISC (Complex Instruction Set Computer) |
|---|---|---|
| Idea de diseño | Usa un repertorio de instrucciones relativamente simple y regular. | Ofrece un repertorio más amplio, con instrucciones de distinta complejidad. |
| Una tarea compleja | Suele descomponerse en varias instrucciones sencillas. | Puede expresarse con menos instrucciones, si existe una instrucción que reúna esas acciones. |
| Acceso a memoria | Tradicionalmente separa la carga y el almacenamiento de los cálculos: primero lleva el dato a un registro, después opera con él. | Puede permitir que algunas instrucciones trabajen directamente con datos de memoria. |
| Formato de las instrucciones | Tiende a usar formatos más uniformes, lo que facilita identificar sus campos. | Puede usar formatos de longitud y estructura más variados. |
| Ejecución interna | La regularidad favorece que las fases de ejecución sean predecibles. | La CPU puede necesitar traducir una instrucción compleja en operaciones internas más simples. |
| Ejemplo habitual | ARM y RISC-V. | x86, utilizado por muchos procesadores Intel y AMD. |
| Consecuencia visible en un programa | Puede haber más instrucciones para expresar la misma tarea. | Puede haber menos instrucciones visibles para expresar esa tarea. |
Esta comparación describe tendencias de diseño, no una clasificación rígida ni una medida directa de velocidad. Los procesadores actuales combinan técnicas y, por ejemplo, una CPU x86 puede traducir internamente instrucciones complejas en operaciones más simples.
6.2. Opcode y operandos
Section titled “6.2. Opcode y operandos”Ampliación
Este apartado se llama «Opcode y operandos» porque son las dos piezas que permiten describir qué debe hacer una instrucción y con qué debe hacerlo. El opcode responde a la pregunta «¿qué operación debe realizar la CPU?»; los operandos responden a «¿sobre qué datos o ubicaciones se realiza?». Sin ambas partes, la CPU no tendría una orden completa que interpretar.
Una instrucción suele incluir dos partes principales:
- Código de operación u opcode: indica qué operación debe realizar la CPU.
- Operandos: indican sobre qué datos debe actuar la instrucción o dónde se encuentran esos datos.
Por ejemplo, una instrucción imaginaria podría representarse así:
SUMAR R1, R2En este caso:
SUMARsería el código de operación;R1yR2serían operandos;- el resultado podría guardarse en un registro definido por la propia instrucción o por la arquitectura.
En una CPU real, esta instrucción no se guarda como texto, sino codificada en bits.
6.3. Ciclo de instrucción
Section titled “6.3. Ciclo de instrucción”El ciclo de instrucción es el proceso que sigue la CPU para ejecutar una instrucción. Se repite continuamente mientras el sistema está funcionando.
Sus fases básicas son:
| Fase | Qué ocurre |
|---|---|
| Búsqueda | La CPU usa el contador de programa (PC) para localizar la siguiente instrucción en memoria y cargarla en el registro de instrucción (IR). |
| Decodificación | La unidad de control interpreta el opcode y determina qué componentes deben intervenir. |
| Ejecución | Se realiza la operación indicada: cálculo en la ALU, lectura de memoria, escritura, comparación, salto, etc. |
| Almacenamiento | El resultado se guarda en un registro, en memoria o se envía a un dispositivo de salida. |
Después de ejecutar una instrucción, la CPU continúa con la siguiente. Si la instrucción era un salto, el valor del PC puede cambiar para continuar en otra dirección de memoria.
6.4. Ejemplo guiado de ejecución
Section titled “6.4. Ejemplo guiado de ejecución”Imagina una instrucción sencilla:
SUMAR el contenido de la posición 10 y la posición 11El ciclo podría entenderse así:
- Búsqueda: la CPU trae desde memoria la instrucción que debe ejecutar.
- Decodificación: la unidad de control identifica que se trata de una suma y que necesita leer dos datos.
- Ejecución: la CPU solicita los datos de las posiciones 10 y 11 y la ALU realiza la suma.
- Almacenamiento: el resultado se guarda en un registro o en una posición de memoria.
Este ejemplo simplifica mucho lo que ocurre realmente, pero ayuda a entender la idea principal: ejecutar un programa consiste en repetir este ciclo con muchas instrucciones.
Cuando un programa usa una variable, el valor con el que trabaja debe estar disponible en memoria o en un registro. La CPU lo lee, opera con él y conserva el resultado temporalmente antes de escribirlo donde corresponda. Este puente entre una instrucción y los datos de un programa ayuda a relacionar la arquitectura con el código que se desarrollará en DAM.
6.5. Ejercicios de aplicación
Section titled “6.5. Ejercicios de aplicación”Para trabajar este bloque, resuelve los ejercicios 1 a 3 con guía del docente y contraste colectivo; utiliza los ejercicios 4 a 7 como aplicación con apoyo de los apuntes; reserva los ejercicios 8 a 10 para trabajo autónomo o de ampliación.
-
Clasifica instrucciones. Clasifica
SUMAR,COPIAR,LEER,SALTARyCOMPARARcomo aritmético-lógicas, de transferencia de datos o de control de flujo. -
Opcode y operandos. En la instrucción
SUMAR R1, R2, identifica el opcode y los operandos. -
Respuesta breve. Explica por qué una CPU no puede ejecutar directamente una orden escrita en lenguaje natural.
-
Ordena el ciclo. Coloca en orden búsqueda, decodificación, ejecución y almacenamiento. Escribe una frase que describa cada fase.
-
Tipo test. ¿Qué elemento guarda habitualmente la instrucción que se está procesando? a) PC, b) IR, c) ALU, d) caché. Justifica la respuesta.
-
RISC y CISC. Explica con la analogía del robot y los cajones por qué RISC suele combinar varias acciones simples y CISC puede expresar una tarea con menos instrucciones.
-
Completa una traza. Para
SUMAR [10], [11] -> R1, indica qué ocurre en búsqueda, decodificación, ejecución y almacenamiento. Nombra al menos PC, IR, memoria, unidad de control y ALU. -
Ampliación: analiza una afirmación. “Una instrucción CISC siempre se ejecuta más rápido porque hace más cosas”. Indica por qué esa frase es una simplificación y qué otros factores pueden influir.
-
Ampliación: depura el ciclo. En una traza, el resultado de una suma es correcto, pero se guarda en una dirección equivocada. Indica en qué fase o elementos buscarías el problema y por qué.
-
Ampliación: diseña una instrucción. Inventa una instrucción educativa para comparar dos registros. Define su opcode, sus operandos, el resultado que produce y cómo recorrería las cuatro fases del ciclo de instrucción.