19. La pila: último en entrar, primero en salir
Guarda valores en la pila de datos y recupéralos en orden inverso.
Abrir esta lección →
1. Predecir y trazar
Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.
LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
2. Construir y comprobar
Lee dos enteros, guarda ambos en la pila de datos e imprímelos en orden inverso. Usa PUSH y POP en lugar de valores fijos.
Tipos de instrucción requeridos: INPUT, PUSH, POP
Programa inicial
INPUT
PUSH
INPUT
PUSH
#
HALT
Tu programa y notas
3. Explicar la máquina
¿Por qué se imprime primero la segunda entrada?
20. Llamar a una subrutina
Reutiliza código y vuelve a la instrucción posterior a CALL.
Abrir esta lección →
1. Predecir y trazar
Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.
LOAD 3
CALL square
PRINT
LOAD 4
CALL square
PRINT
HALT
square: MUL R0
RETURN
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
2. Construir y comprobar
Lee dos enteros. Llama a la misma subrutina de elevar al cuadrado para cada uno e imprime los cuadrados en el orden de entrada.
Tipos de instrucción requeridos: INPUT, CALL, MUL, RETURN
Programa inicial
INPUT
CALL square
PRINT
INPUT
CALL square
PRINT
HALT
square:
#
RETURN
Tu programa y notas
3. Explicar la máquina
¿Por qué dos llamadas al mismo código vuelven a lugares distintos?
21. Conservar el estado de quien llama
Usa una convención de guardar y restaurar cuando una función necesita espacio temporal.
Abrir esta lección →
1. Predecir y trazar
Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.
LOAD 1 R1
LOOP 3
LOAD R1
CALL double
PRINT
LOAD R1
ADD 1
COPY R0 R1
RETURN
HALT
double: MUL 2
RETURN
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
2. Construir y comprobar
Lee un valor que conservar en R1 y después un argumento de función. Llama a una auxiliar que devuelva argumento + 1 usando R1 temporalmente. Imprime el resultado y después el primer valor conservado. Usa PUSH y POP para conservar R1.
Tipos de instrucción requeridos: INPUT, PUSH, POP, CALL, RETURN
Programa inicial
INPUT
COPY R0 R1
INPUT
CALL helper
PRINT
LOAD R1
PRINT
HALT
helper:
#
RETURN
Tu programa y notas
3. Explicar la máquina
¿Qué estado pertenece a quien llama en lugar de al resultado de la función?