Práctica 1.1.b: Ejecución de un programa en ensamblador LC-3
P1.1.b - Ejecución de un programa en ensamblador LC-3¶
En esta práctica utilizarás un simulador LC-3 para ensamblar y ejecutar un programa sencillo. Seguirás sus instrucciones y observarás el contador de programa, los registros, la memoria y la salida para relacionar el software con los componentes que participan en su ejecución.
LC-3 es un modelo didáctico de un procesador. El programa ensamblado ocupa posiciones de memoria, el contador de programa (PC) señala la dirección de la siguiente instrucción y los registros conservan valores que se utilizan durante las operaciones. Al avanzar paso a paso podrás observar parte de ese recorrido; el simulador no representa todos los componentes ni las conexiones físicas de un ordenador real. En esta actividad, los dos valores con los que se operan están definidos como datos en memoria —no se solicitan al teclado— y la salida se muestra en la consola simulada.
1. Objetivos¶
- Ensamblar y ejecutar un programa LC-3, identificando las instrucciones que carga datos, realiza operaciones y muestra el resultado.
- Seguir el contador de programa y distinguir los registros del procesador de las posiciones de memoria que contienen instrucciones y datos.
- Relacionar el recorrido de los datos y las instrucciones con el procesador, la memoria y la salida simulada, y comparar el nivel de abstracción del ensamblador con un ejemplo en C.
2. Relación con RA y criterios de evaluación¶
| Código | Descripción |
|---|---|
| RA 1 | Reconoce los elementos y herramientas que intervienen en el desarrollo de un programa informático, analizando sus características y las fases en las que actúan hasta llegar a su puesta en funcionamiento. |
| CE 1.a | Se ha reconocido la relación de los programas con los componentes del sistema informático: memoria, procesador, periféricos, entre otros. |
| CE 1.e | Se han clasificado los lenguajes de programación, identificando sus características. |
El criterio principal es CE 1.a, que se trabaja observando la ejecución de instrucciones y el uso de memoria y registros. La comparación breve entre C y ensamblador permite trabajar también CE 1.e.
3. Requisitos y recursos¶
- Un navegador actualizado y conexión a Internet.
- Acceso a uno de estos simuladores LC-3: LC3 Simulator de SpaceTech o LC3web de W. Chargin.
- La teoría 1.1. Relación entre software y hardware y 1.5. Lenguajes de programación.
- No necesitas instalar un compilador de C. El ejemplo en C se leerá para compararlo; el simulador ejecuta instrucciones de la arquitectura LC-3, no código C.
4. Pasos a seguir¶
4.1. Ensamblar y seguir la operación en LC-3¶
-
Abre uno de los simuladores. Localiza el área para escribir el código, el control para ensamblarlo o compilarlo y las opciones para avanzar paso a paso, ejecutar y reiniciar. Identifica también, si la interfaz los muestra, el PC, los registros, la memoria y la consola de salida. Los nombres y la disposición de los controles pueden variar entre simuladores.
-
Pega el siguiente programa en el editor LC-3 y ensámblalo. Si el simulador separa el editor del procesador, carga el programa ensamblado antes de ejecutarlo.
.ORIG x3000 LD R0, NUM1 ; Cargar el valor de NUM1 en R0 LD R1, NUM2 ; Cargar el valor de NUM2 en R1 ADD R2, R0, R1 ; Opera con R0 y R1, guardar el resultado en R2 ; Convertir el resultado a ASCII LD R3, ASCII_ZERO ; Cargar en R3 el código de '0' (x0030) ADD R0, R2, R3 ; Obtener el código ASCII del resultado en R0 ; Mostrar el resultado y terminar TRAP x21 ; Servicio OUT: mostrar el carácter de R0 HALT NUM1 .FILL x0005 NUM2 .FILL x0003 ASCII_ZERO .FILL x0030 .ENDSi el ensamblador indica un error, comprueba que los nombres de las etiquetas (
NUM1,NUM2yASCII_ZERO) coinciden exactamente en sus referencias y definiciones. Las directivas.ORIG,.FILLy.ENDorganizan el programa y sus datos; no son instrucciones aritméticas ejecutadas por la CPU. -
Reinicia el simulador y ejecuta el programa paso a paso. Tras cada instrucción, anota el PC antes o después del paso —indicando qué convención utilizas— y el registro modificado o el efecto producido. Si el simulador no muestra el PC, un registro o un dato de memoria, indícalo como «no visible» y deduce el valor esperado a partir de la instrucción.
Instrucción ejecutada PC (antes → después, si es visible) Registro o efecto que debes comprobar Valor observado LD R0, NUM1R0LD R1, NUM2R1ADD R2, R0, R1R2LD R3, ASCII_ZEROR3ADD R0, R2, R3R0TRAP x21Salida de caracteres HALTEstado de ejecución -
Continúa hasta que el programa se detenga y consulta la consola del simulador. Comprueba que aparece el carácter
8. Si no aparece, revisa que el ensamblado haya terminado sin errores, que el programa se haya cargado y que hayas ejecutado desde el inicio. -
Explica la transformación que produce la salida: primero se calcula el valor numérico 8; después se opera con
x0030, el código ASCII del carácter0, para obtenerx0038, código del carácter8.TRAP x21solicita el servicioOUT, que muestra el carácter correspondiente al byte bajo deR0(sus 8 bits menos significativos). -
Repasa tu tabla y describe el recorrido del programa: el PC avanza por las instrucciones;
LDobtiene datos de memoria y los carga en registros;ADDprocesa los valores; yTRAP x21solicita la salida del carácter. El programa no pide números al teclado:5y3ya están definidos en memoria mediante.FILL.
4.2. Comparar el código con C¶
-
Lee este ejemplo equivalente en C, pero no lo pegues en el simulador LC-3:
#include <stdio.h> int main(void) { int num1 = 5; int num2 = 3; int resultado = num1 + num2; printf("%d\n", resultado); return 0; }El programa en C expresa una operación y la salida con variables, el operador
+y la funciónprintf. Para ejecutarlo se necesitaría un compilador de C y un entorno de destino compatible. El código LC-3, en cambio, se ensambla para esa arquitectura; sus instrucciones hacen visible el uso de registros, la carga desde memoria y la conversión del resultado a ASCII. C ofrece un nivel de abstracción mayor que el ensamblador. No supongas que cada línea de C se transforma en una única instrucción de máquina. -
Completa una comparación con estos aspectos: nivel de abstracción, manera de expresar la operación, uso visible de registros y memoria, mecanismo de salida y herramienta necesaria para ejecutar cada programa.
| Aspecto | LC-3 | C |
|---|---|---|
| Nivel de abstracción | Bajo y ligado a la arquitectura LC-3. | Más alto: expresa la operación y la salida sin detallar cada registro. |
- Relaciona lo observado con un ordenador real. Indica qué elementos del modelo LC-3 ayudan a comprender la ejecución y qué detalles de un equipo real no aparecen en este simulador didáctico.
5. Comprobaciones de finalización¶
- El ensamblador acepta el código y el simulador puede ejecutar el programa desde su dirección inicial.
- Después de las cargas,
R0contienex0005yR1contienex0003; después de la operación,R2contienex0008. - La conversión deja
x0038enR0y la consola muestra el carácter8antes de queHALTdetenga el programa. - Puedes distinguir el valor numérico
x0008del código de carácterx0038, así como registros, instrucciones y datos almacenados en memoria. - Tu comparación no presenta el código C como ejecutable por el simulador LC-3.
6. Ejercicios y entregables¶
- Responde con tus palabras y utiliza el seguimiento paso a paso como evidencia:
- 1.a. Ejecución del procesador:
- 1.a.1. ¿Qué función cumple el PC?
- 1.a.2. ¿Cómo ayuda el PC a seguir la secuencia de instrucciones?
- 1.a.3. Explica, de forma general, las fases de búsqueda, decodificación y ejecución.
- 1.a.4. ¿Qué puedes observar directamente en el simulador?
- 1.a.5. ¿Qué parte del funcionamiento de la CPU solo puedes inferir?
- 1.b. Memoria y registros:
- 1.b.1. ¿Qué valor contiene
NUM1? - 1.b.2. ¿Qué valor contiene
NUM2? - 1.b.3. ¿Qué valor contiene
ASCII_ZEROy qué representa? - 1.b.4. ¿Qué datos se guardan en esas posiciones de memoria?
- 1.b.5. ¿Qué valores aparecen en
R0,R1,R2yR3? - 1.b.6. Explica cómo
LDyADDmueven o procesan esos datos.
- 1.b.1. ¿Qué valor contiene
- 1.c. Comunicación con la salida:
- 1.c.1. ¿Qué hace
TRAP x21en este programa? - 1.c.2. ¿Cómo se relaciona el servicio
OUTcon la consola simulada? - 1.c.3. Aclara por qué el programa no recibe datos del teclado: los dos números se encuentran definidos en memoria.
- 1.c.1. ¿Qué hace
- 1.d. Recorrido de instrucciones y datos:
- 1.d.1. Describe el recorrido desde los valores almacenados en memoria hasta la operación, la conversión a ASCII y la salida del carácter
8. - 1.d.2. Indica qué trabajo realizan las instrucciones.
- 1.d.3. ¿Qué papel cumplen el procesador, la memoria, los registros y el dispositivo de salida simulado?
- 1.d.1. Describe el recorrido desde los valores almacenados en memoria hasta la operación, la conversión a ASCII y la salida del carácter
- 1.e. Relación entre LC-3 y C:
- 1.e.1. ¿Qué muestra el seguimiento paso a paso del programa LC-3 que no se ve en el ejemplo en C?
- 1.e.2. Compara su nivel de abstracción.
- 1.e.3. Compara el modo en que se expresan la operación que se realiza y la salida.
- 1.f. Límites del modelo:
- 1.f.1. ¿Qué aspectos del procesador, la memoria y la entrada/salida de un ordenador real no reproduce el simulador LC-3?
- 1.f.2. Explica al menos una diferencia entre la consola simulada y un periférico físico.
- 1.a. Ejecución del procesador:
- 2.a. Modificación de datos y predicción: Cambia los datos para operar con
2y6.- 2.a.1. ¿Qué cambios debes realizar en los datos definidos con
.FILL? - 2.a.2. Antes de ejecutar, predice el valor final de
R2. - 2.a.3. Antes de ejecutar, predice el valor final de
R0. - 2.a.4. Antes de ejecutar, predice el carácter que aparecerá.
- 2.b. Ensambla, ejecuta y contrasta tu predicción.
- 2.a.1. ¿Qué cambios debes realizar en los datos definidos con
- Entrega un documento (README.md) identificado con tu nombre, módulo, unidad y práctica. Incluye las respuestas, la tabla de seguimiento con los valores observados o deducidos, el código LC-3, la comparación con C, una captura de la consola con el resultado
8y una reflexión breve sobre los límites del modelo simulado.
7. Solución orientativa¶
- El PC señala la dirección de la siguiente instrucción. En cada avance, el procesador obtiene una instrucción de memoria, la interpreta y realiza la operación correspondiente. Este ciclo se suele explicar como búsqueda, decodificación y ejecución. El simulador permite seguir parte de la secuencia y observar algunos cambios, pero no muestra todos los circuitos internos de la CPU.
- Las posiciones etiquetadas contienen datos:
NUM1valex0005,NUM2valex0003yASCII_ZEROvalex0030.LDcopia esos datos desde memoria a registros:R0recibex0005,R1recibex0003yR3,x0030. Los registros son almacenamiento interno del procesador para operar; las etiquetas identifican posiciones de memoria.ADD R2, R0, R1suma los registros y dejax0008enR2. TRAP x21solicita el servicioOUT, que envía el carácter representado por el byte bajo deR0a la consola simulada. La consola representa una salida, pero no es una pantalla física conectada directamente al procesador. El programa no recibe datos del teclado: los valores5y3están definidos en las posicionesNUM1yNUM2.- El recorrido comienza con las instrucciones del programa almacenadas en memoria.
LDtrae los valores de las posiciones de datos a los registros;ADDrealiza la suma; después se sumax0030para transformar el resultado numéricox0008en el código ASCIIx0038; por último,TRAP x21muestra el carácter8. Las instrucciones indican las operaciones, el procesador las ejecuta, la memoria conserva el código y los datos, y la salida simulada presenta el resultado. - C expresa la intención con variables, el operador
+yprintf, por lo que ofrece un nivel de abstracción mayor. LC-3 muestra operaciones concretas sobre registros y memoria y un servicio explícito de salida. El programa C necesitaría un compilador y un entorno de destino compatible; el simulador LC-3 solo ejecuta código ensamblador para esa arquitectura. No hay una correspondencia necesaria de una línea de C con una instrucción de máquina. - LC-3 es un modelo didáctico: muestra una memoria y registros simplificados y abstrae el funcionamiento del servicio
OUTy de los dispositivos físicos. Un ordenador real incorpora otros niveles de memoria, controladores, sistema operativo y circuitos de entrada/salida que no aparecen en este ejercicio.
Al cambiar los datos a 2 y 6, R2 vuelve a contener x0008; al sumar x0030, R0 queda en x0038 y la consola muestra 8.