¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Seguir los pasos del procesador (ciclo de instrucción)

Después de esta lección: Puedo seguir el ciclo de búsqueda, decodificación y ejecución.

Lección de 50 min10 comandosLaboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

Miles de millones de pasos diminutos

Cuando abres un juego en la consola, su procesador empieza a ejecutar las instrucciones del juego. Ejecuta miles de millones cada segundo.

Cada instrucción es muy pequeña, como «suma estos dos números». Y todas pasan por los mismos tres pasos. Hoy los ves, uno a uno.

Al terminar esta lección

Nota

Puedo seguir el ciclo de búsqueda, decodificación y ejecución.

Palabras clave

PalabraQué significaEjemplo
Instrucciónun paso pequeño que un procesador sabe daradd a0, a0, a1
Dirección de memoriael número de un sitio de la memoria
Registroun almacén diminuto y rápido dentro del procesadora0
Contador de programael registro con la dirección de la siguiente instrucción
Ensambladorlas instrucciones de un procesador escritas con palabras cortas
Ciclolos mismos pasos, repetidos una y otra vez

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Qué hay dentro de un procesador

Un programa espera en la memoria como una lista de instrucciones, cada una en su propia dirección.

El procesador tiene una unidad de control, que lee cada instrucción y decide qué hacer. Tiene una unidad aritmético-lógica (ALU), hecha con puertas como las de la lección pasada, que suma y compara. Y tiene registros, almacenes diminutos con los números con los que trabaja.

Las partes y su trabajo

ParteSu trabajo
MemoriaGuarda el programa y sus datos
Contador de programaGuarda la dirección de la siguiente instrucción
Unidad de controlAverigua qué significa una instrucción
ALUSuma, resta y hace la lógica
Registros como a0 y a1Guardan los números con los que se trabaja

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Buscar, decodificar, ejecutar y otra vez

Búsqueda: el procesador copia la instrucción que está en la dirección del contador de programa. El contador pasa a la dirección siguiente.

Decodificación: la unidad de control averigua qué pide la instrucción. Ejecución: el procesador lo hace, por ejemplo la ALU suma dos registros. Después el ciclo vuelve a empezar.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra superior y espera a que la máquina diga que está en marcha. El programa que vas a leer es para un procesador RISC-V. La máquina del laboratorio no es RISC-V, así que lo ejecuta un emulador.

Entra en la carpeta arch

Comando
cd ~/arch

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee un programa de cinco instrucciones

Comando
cat add.s

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Convierte las palabras en código máquina

Comando
riscv64-linux-gnu-as add.s -o add.o

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Conviértelo en un programa

Comando
riscv64-linux-gnu-ld add.o -o add

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira cada instrucción en su dirección

Comando
riscv64-linux-gnu-objdump -d add

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: seguir el programa

Contador de programaInstrucciónQué hace la ejecucióna0a1
100b0li a0,2pone 2 en a02?
100b4li a1,3pone 3 en a123
100b8add a0,a0,a1la ALU los suma en a053
100bcli a7,93elige la llamada que termina un programa53
100c0ecallpide a Linux que lo termine con a0 de código53

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que el contador de programa cuenta cuántas instrucciones se han ejecutado. Guarda la dirección de la siguiente. Aquí sube de 4 en 4, porque cada instrucción ocupa 4 bytes. Un salto le pone otra dirección.

Copia el programa cambiando 2 por 20

Comando
sed 's/a0, 2/a0, 20/' add.s > veinte.s

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ensambla tu copia

Comando
riscv64-linux-gnu-as veinte.s -o veinte.o

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Enlaza tu copia

Comando
riscv64-linux-gnu-ld veinte.o -o veinte

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Predice y ejecútalo en el emulador

Comando
qemu-riscv64 ./veinte

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee la respuesta que dejó

Comando
echo $?

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: mira el contador

Pulsa Abrir el terminal. Construye el programa con gcc -O2 -o loop loop.c y escribe gdb ./loop. Escribe break main y después run.

Escribe info registers pc para ver el contador de programa. Escribe stepi para ejecutar una instrucción y vuelve a mirar pc. ¿Cuánto ha avanzado? Escribe quit y después y.

Sobre este laboratorio y su código: Laboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.