Saltar a contenido

UD 1 - P1.1.b: Resultado orientativo de LC-3

Resultado orientativo de la práctica P1.1.b

Estas respuestas son una propuesta para contrastar el trabajo, no una solución cerrada. Se aceptan explicaciones con otra redacción si describen correctamente el comportamiento del programa y justifican las observaciones con la tabla o el simulador. Si una herramienta no muestra un registro o una dirección, es válido indicarlo y razonar el valor esperado.

Repositorio de partida

Esta propuesta se basa en la plantilla 2627_EDES_u1.2_lc3_ensamblador. El repositorio de cada estudiante puede contener respuestas, capturas y observaciones propias, por lo que no tiene que coincidir literalmente con este resultado orientativo.

Ejercicio 1: responde y utiliza el seguimiento paso a paso como evidencia

Enunciado: Responde con tus palabras y utiliza el seguimiento paso a paso como evidencia.

Pregunta 1.a: ejecución del procesador y seguimiento del PC

Pregunta 1.a.1: ¿Qué función cumple el PC?

Respuesta orientativa: El PC (contador de programa) contiene la dirección de memoria de la instrucción que se va a obtener a continuación.

Subpregunta 1.a.2: ¿Cómo ayuda el PC a seguir la secuencia de instrucciones?

Respuesta orientativa: En las instrucciones ordinarias de este programa, el PC avanza por las direcciones consecutivas a partir de x3000. Seguir ese avance permite localizar qué instrucción se obtiene en cada paso.

Subpregunta 1.a.3: Explica, de forma general, las fases de búsqueda, decodificación y ejecución.

Respuesta orientativa: De forma simplificada, el procesador busca la instrucción indicada por el PC en memoria, la decodifica para determinar la operación y la ejecuta. El seguimiento de las direcciones y de los cambios en registros permite relacionar esas fases con los efectos del programa.

Con el código proporcionado, la organización esperada es:

Dirección Contenido
x3000 LD R0, NUM1
x3001 LD R1, NUM2
x3002 ADD R2, R0, R1
x3003 LD R3, ASCII_ZERO
x3004 ADD R0, R2, R3
x3005 TRAP x21
x3006 HALT
x3007 Dato NUM1: x0005
x3008 Dato NUM2: x0003
x3009 Dato ASCII_ZERO: x0030

El simulador puede mostrar el PC antes o después de cada paso y puede abstraer parte del servicio TRAP; por eso el registro del alumnado puede usar otra convención, siempre que la indique. Al ejecutar TRAP x21, el procesador transfiere el control al servicio OUT; una vez que este retorna, la ejecución continúa en HALT.

La siguiente tabla usa esta convención: PC antes es la dirección de la instrucción que se ejecuta y PC después es la dirección de la siguiente instrucción ordinaria. Durante TRAP x21, el control pasa temporalmente al servicio OUT y vuelve a x3006; al ejecutar HALT, el programa se detiene. La interfaz puede mostrar el PC en otro momento del ciclo, así que se aceptan valores anotados con otra convención si se explica cuál se ha seguido.

Instrucción ejecutada PC antes → después Registro o efecto esperado
LD R0, NUM1 x3000 → x3001 R0 = x0005
LD R1, NUM2 x3001 → x3002 R1 = x0003
ADD R2, R0, R1 x3002 → x3003 R2 = x0008
LD R3, ASCII_ZERO x3003 → x3004 R3 = x0030
ADD R0, R2, R3 x3004 → x3005 R0 = x0038
TRAP x21 x3005 → servicio OUT → x3006 La consola muestra 8; después continúa el programa
HALT x3006 → detenido El programa se para; algunos simuladores pueden mostrar x3007 tras obtener la instrucción

Subpregunta 1.a.4: ¿Qué puedes observar directamente en el simulador?

Respuesta orientativa: Si la interfaz los muestra, se pueden observar la instrucción actual, el PC, los registros, algunas posiciones de memoria, el carácter que aparece en la consola y el estado de parada.

Subpregunta 1.a.5: ¿Qué parte del funcionamiento de la CPU solo puedes inferir?

Respuesta orientativa: A partir de los cambios se infiere que la CPU obtiene la instrucción indicada por el PC, la decodifica y la ejecuta. No se ven directamente las señales internas, la unidad de control, el recorrido electrónico de los datos ni todos los detalles temporales del procesador: el simulador presenta sus efectos dentro del modelo.

Pregunta 1.b: memoria y registros

Pregunta 1.b.1: ¿Qué valor contiene NUM1?

Respuesta orientativa: NUM1 contiene x0005.

Subpregunta 1.b.2: ¿Qué valor contiene NUM2?

Respuesta orientativa: NUM2 contiene x0003.

Subpregunta 1.b.3: ¿Qué valor contiene ASCII_ZERO y qué representa?

Respuesta orientativa: ASCII_ZERO contiene x0030, el código ASCII del carácter 0.

Subpregunta 1.b.4: ¿Qué datos se guardan en esas posiciones de memoria?

Respuesta orientativa: Las etiquetas identifican posiciones de memoria, no registros. En esas posiciones están los dos operandos y la constante ASCII. La memoria también conserva las instrucciones ensambladas.

Subpregunta 1.b.5: ¿Qué valores aparecen en R0, R1, R2 y R3?

Respuesta orientativa: Después de las instrucciones de carga y suma, los registros contienen:

  • R0 = x0005 tras la primera carga y R0 = x0038 tras la conversión a ASCII.
  • R1 = x0003.
  • R2 = x0008.
  • R3 = x0030.

Los registros son almacenamiento interno del procesador utilizado durante las operaciones; no son posiciones etiquetadas de memoria.

Subpregunta 1.b.6: Explica cómo LD y ADD mueven o procesan esos datos.

Respuesta orientativa: LD lee un valor de una posición de memoria y lo copia a un registro. Así, R0 recibe x0005, R1 recibe x0003 y R3 recibe x0030. ADD R2, R0, R1 suma los valores de R0 y R1, y deja x0008 en R2. Las directivas .ORIG, .FILL y .END organizan el programa, pero no son instrucciones aritméticas ejecutadas como ADD.

Pregunta 1.c: comunicación con la salida simulada

Pregunta 1.c.1: ¿Qué hace TRAP x21 en este programa?

Respuesta orientativa: TRAP x21 solicita el servicio OUT de LC-3.

Subpregunta 1.c.2: ¿Cómo se relaciona el servicio OUT con la consola simulada?

Respuesta orientativa: El servicio interpreta el byte menos significativo de R0 como un carácter y lo envía a la consola del simulador. En este caso, el carácter mostrado es 8.

Subpregunta 1.c.3: Aclara por qué el programa no recibe datos del teclado: los dos números se encuentran definidos en memoria.

Respuesta orientativa: El programa no solicita números al teclado; los valores 5 y 3 ya están almacenados en las posiciones etiquetadas NUM1 y NUM2.

Pregunta 1.d: recorrido de instrucciones y datos

Pregunta 1.d.1: Describe el recorrido desde los valores almacenados en memoria hasta la suma, la conversión a ASCII y la salida del carácter 8.

Respuesta orientativa:

  1. LD R0, NUM1 copia x0005 de memoria a R0.
  2. LD R1, NUM2 copia x0003 de memoria a R1.
  3. ADD R2, R0, R1 suma ambos valores y deja x0008 en R2.
  4. LD R3, ASCII_ZERO carga x0030 en R3.
  5. ADD R0, R2, R3 suma x0008 + x0030 y deja x0038 en R0.
  6. TRAP x21 envía el carácter ASCII asociado a x0038 —el carácter 8— a la consola.
  7. HALT detiene el programa.

Subpregunta 1.d.2: Indica qué trabajo realizan las instrucciones.

Respuesta orientativa: LD carga datos de memoria en registros; ADD realiza la suma y la conversión; TRAP x21 solicita la salida; y HALT detiene el programa.

Subpregunta 1.d.3: ¿Qué papel cumplen el procesador, la memoria, los registros y el dispositivo de salida simulado?

Respuesta orientativa: El procesador ejecuta las instrucciones y trabaja con los registros; la memoria conserva el programa y los datos; y el servicio de salida presenta el resultado en el simulador.

Pregunta 1.e: comparación entre LC-3 y C

Pregunta 1.e.1: ¿Qué muestra el seguimiento paso a paso del programa LC-3 que no se ve en el ejemplo en C?

Respuesta orientativa: Permite seguir el PC y observar cargas en registros, resultados intermedios, operaciones con memoria y la solicitud explícita del servicio de salida. El ejemplo en C expresa el objetivo, pero el código fuente no detalla esos pasos de bajo nivel.

Subpregunta 1.e.2: Compara su nivel de abstracción.

Respuesta orientativa: LC-3 tiene un nivel de abstracción bajo y está ligado a su arquitectura; C ofrece más abstracción y expresa la intención sin detallar el uso de cada registro.

Subpregunta 1.e.3: Compara el modo en que se expresan la suma y la salida.

Respuesta orientativa:

Aspecto LC-3 C
Nivel de abstracción Bajo y ligado a la arquitectura LC-3. Más alto: expresa la suma y la salida sin detallar cada registro.
Suma Se indican registros fuente y registro destino con ADD. Se expresa con el operador + y variables.
Memoria y registros Las cargas y operaciones sobre registros aparecen de forma explícita. El código fuente no especifica en qué registros se guardarán los valores.
Salida Se solicita el servicio OUT mediante TRAP x21. Se llama a printf desde la biblioteca estándar.
Herramienta de ejecución Ensamblador y simulador compatibles con LC-3. Compilador de C y entorno compatible con el programa generado.

La comparación no implica que cada línea de C se traduzca en una única instrucción: un compilador puede generar varias instrucciones y optimizar el resultado.

Pregunta 1.f: límites del modelo LC-3

Pregunta 1.f.1: ¿Qué aspectos del procesador, la memoria y la entrada/salida de un ordenador real no reproduce el simulador LC-3?

Respuesta orientativa: LC-3 permite estudiar una CPU didáctica, el PC, los registros, una memoria sencilla y operaciones de entrada/salida. No reproduce toda la arquitectura de un ordenador real: simplifica la memoria, los servicios del sistema y la comunicación con dispositivos físicos, y no muestra todos los controladores, niveles de memoria ni componentes de un sistema operativo.

Subpregunta 1.f.2: Explica al menos una diferencia entre la consola simulada y un periférico físico.

Respuesta orientativa: La consola es una representación dentro del simulador: muestra el carácter enviado por OUT, pero no equivale a una pantalla física ni enseña su controlador, conexión o señales eléctricas. El valor del simulador consiste en hacer visible un modelo de ejecución, no en representar cada detalle de un equipo actual.

Ejercicio 2: modificación de los datos

Apartado 2.a: Cambia los datos para sumar 2 y 6.

Subpregunta 2.a.1: ¿Qué cambios debes realizar en los datos definidos con .FILL?

Respuesta orientativa: Sustituye los valores de .FILL de NUM1 y NUM2 por x0002 y x0006, respectivamente.

Subpregunta 2.a.2: Antes de ejecutar, predice el valor final de R2.

Respuesta orientativa: R2 contendrá x0008.

Subpregunta 2.a.3: Antes de ejecutar, predice el valor final de R0.

Respuesta orientativa: Después de la conversión a ASCII, R0 contendrá x0038.

Subpregunta 2.a.4: Antes de ejecutar, predice el carácter que aparecerá.

Respuesta orientativa: Aparecerá el carácter 8.

Subpregunta 2.b: Ensambla, ejecuta y contrasta tu predicción.

Respuesta orientativa: La ejecución debe confirmar los valores previstos: R2 = x0008, R0 = x0038 antes de la salida y el carácter 8 en la consola. Si el simulador muestra algún dato distinto, conviene comprobar que se cambiaron ambos valores .FILL, que se volvió a ensamblar el programa y que se ejecutó desde el inicio.

El resultado puede entregarse con otra organización o formulación. Lo importante es que la tabla, los valores calculados y la explicación del recorrido de datos sean coherentes entre sí y con el programa ejecutado.

Fuente de la plantilla

Ejercicio 3: documento de entrega

Enunciado: Entrega un documento 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 8 y una reflexión breve sobre los límites del modelo simulado.

Comprobación del entregable: El documento identifica a quien lo entrega e incluye las respuestas razonadas, la tabla con los valores o las indicaciones «no visible», el programa ejecutado, la comparación y la evidencia solicitada. La captura debe corresponder a la ejecución que se describe; la reflexión puede variar si justifica correctamente los límites del modelo.