Construye pequeños programas · Lección 28 de 30 · unos 18 minutos
Un pequeño juego de aciertos
Construye un juego de tres rondas con estado guardado y puntuación.
01 / Comprende
Comprender la idea
Un juego es un programa con reglas, entradas, estado y respuestas. La memoria 200 contiene el número objetivo. En cada una de tres rondas, el jugador introduce un intento y obtiene un punto si coincide. La puntuación solo cambia con un acierto.
Separa las reglas del objetivo y los intentos actuales. Las pruebas cambian ambos. Este juego imprime una puntuación numérica final; no usa aleatoriedad, red, cuentas ni datos personales del alumnado. Puede resultar interesante sin atribuir a la máquina salidas de texto o gráficos que no ofrece.
02 / Prueba
Observar qué ocurre
Añade los intentos 5, 2, 5 a la cola. La puntuación final es 2 tanto en la salida como en la memoria 201.
STORE 5 200
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALTUsa Avanzar un paso para seguir una instrucción cada vez. Puedes modificar el ejemplo y repetirlo.
03 / Reto
Hacerlo funcionar
La memoria 200 contiene un byte objetivo. Lee exactamente tres intentos. Cuenta cuántos coinciden, guarda la puntuación en la memoria 201 e imprímela una vez.
El comprobador ejecuta el programa actual del editor en una máquina nueva para cada uno de 4 casos. Suministra entradas y memoria inicial; la salida y memoria actuales del laboratorio no deciden el resultado.
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
#
RETURN
LOAD R2
STORE 201
PRINT
HALT¿Necesitas una pista?
El camino de fallo debe omitir el incremento de puntuación, pero llegar al RETURN del bucle.
Mostrar una solución resuelta
Lee el programa, predice el efecto de cada instrucción y después avanza paso a paso en el laboratorio.
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALTLaboratorio de CPU con emojis
Programa con emojis
Escribe LOAD, ADD u otro código de operación y pulsa Espacio para insertar su emoji. Ctrl/⌘ + Intro ejecuta o pausa; Escape pausa; Ctrl/⌘ + ] añade sangría. Tab mueve el foco. Las etiquetas terminan en dos puntos. Los saltos usan direcciones de instrucción que empiezan en cero.
Mapa de instrucciones y puntos de interrupción (0)
Los puntos de interrupción detienen la ejecución antes de una instrucción. Ejecutar permite pasar una vez por el punto en el que se ha detenido; Avanzar un paso ejecuta esa instrucción directamente. Editar el código borra los puntos de interrupción anteriores y el estado de la máquina.
Registros de la CPU
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
Pilas y marcos de bucle
SP = 255 − profundidad de datos − profundidad de llamadas. La pila está separada de la memoria.
Pila de datos (fondo → cima)
Vacío
Direcciones de retorno de llamadas (fondo → cima)
Vacío
Marcos de bucle
Vacío
Salida y entrada
Ejecuta una instrucción PRINT para ver la salida.
Entrada en la cola: Vacío
Memoria · 256 bytes · 0 distintos de cero
Cada celda muestra dirección:valor. R = leído en este paso; W = escrito en este paso. Selecciona una celda para inspeccionarla o inicializarla antes de ejecutar. Usa las flechas para desplazarte, Inicio/Fin para la fila y Ctrl/⌘ + Inicio/Fin para toda la memoria.
Traza de ejecución · 0 entradas
Abajo aparecen las entradas recientes. Inspecciona cualquier índice, empezando por cero, para ver una copia completa e independiente del estado anterior y posterior.
Comprobar tu reto
Puedes comprobarlo en cualquier momento. Todos los casos deben superar la prueba para registrar la finalización.
El progreso usa solo almacenamiento local. Permanece en este navegador y nunca se envía a un servidor.