-
Notifications
You must be signed in to change notification settings - Fork 21
Examen: Parcial 1:2024_10_10:TELECO

- Tiempo: 50 minutos
- Descripción: Examen Parcial 1. Laboratorio. Grados de Telecomunicaciones
- Fecha: 2024/Oct/10
- Temario: Sesiones L1-L4
El examen se ha realizado a través de Aula virtual. Tiene dos partes: Test y un programa
- Realizado a través de Aula virtual
- 10 preguntas tipo test
- Las respuesats incorrectas restan un 25% del valor de la pregunta
- Solución disponible en Aula virtual
Escribe un programa en ensamblador del RISC-V, en el fichero memory.s, que calcule la siguiente expresión:
f = x + 2y + 4z
donde x,y,z y f son VARIABLES almacenadas en memoria, en el segmento de datos, en ese mismo orden. En la primera dirección del segmento de datos está x, luego y, seguida de z y de f. Las variables x,y y z están inicializadas al valor 1 (Es su valor al arrancar el programa)
El programa deberá leer las variables x, y, y z de memoria, calcular la expresión, y depositar el resultado en la variable f en memoria. Además, deberá sacar este valor por el Display de 7 segmentos derecho, situado en la dirección 0xFFFF0010
Conseguirás este bonus si has obtenido la máxima puntuación (programa perfecto) y si tu programa tiene menos de 17 instrucciones
Note
En el enunciado había una errata. Decía Menos de 16 instrucciones. Debería decir Menus de 17 instrucciones
Se tendrá en cuenta en las correcciones
#-- Calcular la expresion: f = x + 2y + 4z
#-- x,y,z son variables inicializadas a 1 en el segmento de datos
#-- f es otra variable
.data
#-- Variables (ESPECIFICACIONES)
x: .word 1 #-- Inicializada a 1 por ESPECIFICACIONES
y: .word 1 #-- Inicializada a 1 por ESPECIFICACIONES
z: .word 1 #-- Inicializada a 1 por ESPECIFICACIONES
f: .word 0
.text
#-- x1 contiene la direccion de la variable x
#-- se usa para acceder a todas ellas
la x1,x
#-- f = x + 2y + 4z
# x10 x2 x3 x4
#-- Leer x
lw x2,0(x1) #-- x2 = x
#-- Leer y. Calcular 2y
lw x3,4(x1) #-- x3 = y
add x3,x3,x3 #-- x3 = 2y
#-- Leer z. Calcular 4z
lw x4,8(x1) #-- x4 = z
add x4,x4,x4 #-- x4 = 2z
add x4,x4,x4 #-- x4 = 4z
#-- Calculo final: f = x2 + x3 + x4 (x + 2y + 4z)
add x10,x2,x3
add x10,x10,x4
#-- Almacenar la variable f en memoria (12 bytes más arriba de x)
sw x10,0xC(x1)
#-- Mostrar f en el display de 7 segmentos
li x2,0xFFFF0010
sw x10,0(x2)
#-- Terminar
li a7, 10
ecallEste programa tiene 16 instrucciones. ¡Cumple el Bonus! 🏅
La evaluación del programa se hace en dos fases:
-
Funcionalidad (2.5 ptos): Se comprueba si el programa funciona, y si cumple con las especificaciones (Nombre del fichero correcto, ensablado sin errores, sin errores en tiempo de ejecución, resultado correcto, variables definidas en sus posiciones de memoria especificadas, etc). Esto se hace mediante un script de test, que automatiza el proceso. Se quitan puntos según los errores encontrados:
- Violación de especificaciones: -0.5
- Programa no ensambla: -0.5
- Error en tiempo de ejecución al pasar las pruebas: Runtime error: -0.5
- Retraso en la entrega: -0.5
- No hay segmento de código: -0.5
- Variable no contiene el valor correcto: -0.5
- El programa no termina (-0.5): No se llama al servicio exit del sistema operativo para terminar el programa de forma controlada
-
Código (2.5 ptos): Se inspecciona visualmente cómo está hecho el código: código limpio, claro, con comentarios, instrucciones correctas, fallos de programación, etc... Se restan puntos por errores encontrados en el código:
- No hay instrucción sw para escribir en variable (-0.5)
- Registros inicializados con CONSTANTES cuando el enunciado pide leerlos de memoria (variables) (-0.5)
- Código sin sentido (-0.5): Se ha introducido una instrucción, o directiva, que no tiene relación con el enunciado y no se da una explicación explícita de porqué se ha puesto
- Comentario contradictorio (-0.5): La instrucción hace una cosa, pero en los comentarios se indica otra distinta
- Comentarios no coherentes (-0.5): Se indica algo en los comentarios que no tiene nada que ver con el código que se está escribiendo
- Uso de un registro NO inicializado (-0.5)
- Violacion de especificaciones (-0.5)
- Dato inventado (-0.5). El código añade algo, o supone algo que no tiene sentido según lo que dice el enunciado
- Error en calculos (-0.5)
- No hay comentarios, o son muy escasos (-0.5)
El script de test está disponible, por si quieres probarlo con tus programas para practicar
- Script de Test: test.py
El script de test se debe ejecutan en la terminal de LINUX
Sigue lo siguientes pasos:
- Crea un directorio donde se realizarán las pruebas. Por ejemplo Parcial1
- Pon en ese directorio el programa realizado:
memory.s, o puedes bajarte el fichero ya solucionado: memory.s - Crea el directorio Parcial1/TEST y mete los siguientes ficheros
-
test.py--> Script de test
-
La estructura queda así:
Parcial1/
├── memory.s
└── TEST
└── test.py
Ejecutamos el script test.py:
obijuan@JANEL:~/test/Parcial1/TEST$ python3 test.py
────────────────────────────────────────
ARQUI-BOT
────────────────────────────────────────
> ❌️ RARS no existe
> Descargando RARS desde la URL: https://github.com/TheThirdOne/rars/releases/download/v1.5/rars1_5.jar
> OK!
> ✅️ RARS EXISTE
> ✅️ ../memory.s existe
> Probando: ../memory.s
> Ejecutando: java -jar rars1_5.jar x10 nc me ic 10000 dump 0x10010000-0x10010010 HexText data.hex dump .text HexText text.hex ../memory.s
> ✅️ data.hex generado
> ✅️ x: 0x1
> ✅️ y: 0x1
> ✅️ z: 0x1
> ✅️ f: 0x7
> Instrucciones totales: 16
> ✅️ El programa termina llamando a EXIT
> Ciclos de ejecución: 15
> Comprobando BONUS...
> ✅️ Menos de 17 instrucciones
> 🎖️ BONUS CONSEGUIDO!!!
────────────────────────────────────────
Pulsa ENTER...
Primero comprueba si en el directorio está el fichero rars_1.5.jar. Si no es así, el script de test se lo baja del repositorio. A continuación analiza el fichero memory.s y muestra en la salida los resultados
El script es muy básico, y no detecta toda la casuistica, pero sí permite detectar las violaciones de las ESPECIFICACIONES
- Juan González-Gómez (Obijuan)


L1: El simulador RARs
L2: Calculando expresiones
L3: Práctica 1-3. Variables
L4: Pract 2-1. E/S mapeada
L5: Práctica 2-2: Inst. ecall
L6: Prác 2-3: Cadenas
L7: Práct 3-1: Bucles y saltos
L8: Práct 3-2: Cadenas II
L9: Pract 4-1: Subrut. Nivel-1
L10: Pract 4-2: La pila
L11: Pract 4-3: Recursividad
L12: Pract 5-1. Heap. Listas
L13: RV32I: Resto de instrucciones 🚧
Macros
Entrada/Salida a bajo nivel
Los registros de estado y control (CSR)
Interrupciones y excepciones
Borrador
Soluciones a los ejercicios planteados en cada sesión para practicar:
Sesión L1
Sesión L2
Sesión L3
Sesión L4
Sesión L5
Sesión L6
Sesión L7
Sesión L8
Sesión L9
Sesión L10
Sesión L11
Sesión L12
Simulacro examen 1
GISAM. Ordinario. 2019-Dic-11
GISAM. Extra. 2020-Jul-03
GISAM. Ordinario. 2021-Ene-21
GISAM. Ordinario. 2022-Ene-10
GISAM. Extra. 2022-Jun-29
GISAM. Parcial 1. 2022-Oct-26
GISAM. Parcial 2. 2022-Nov-30
GISAM. Parcial 3. 2022-Dic-21
GISAM. Parcial 1. 2023-Oct-09
GISAM. Parcial 2. 2023-Nov-11
GISAM. Parcial 3. 2023-Dic-20
GISAM. Extra. 2024-Jun-17
GISAM. Parcial 1. 2024-Oct-14
GISAM. Parcial 2. 2024-Nov-13
GISAM. Parcial 3. 2024-Dic-16
GISAM. Extra. 2025-Jun-17
GISAM. Parcial 1. 2025-Oct-20
TELECO. Ordinario. 2019-Dic-13
TELECO. Extra. 2020-Jul-07
TELECO. Ordinario. 2021-Ene-21
TELECO. Extra. 2021-Jul-02
TELECO. Ordinario. 2022-Ene-10
TELECO. Extra. 2022-Jun-29
TELECO. Ordinario. 2023-Ene-10
TELECO. Extra. 2023-Jun-29
TELECO. Parcial 1. 2023-Oct-20
TELECO. Parcial 2. 2023-Nov-17
TELECO. Parcial 3. 2023-Dic-22
TELECO. Extra. 2024-Jun-17
TELECO. Parcial 1. 2024-Oct-10
TELECO. Parcial 2. 2024-Nov-21
TELECO. Parcial 3. 2024-Dic-19
TELECO. Extra. 2025-Jun-17
TELECO. Parcial 1. 2025-Oct-10
Robótica. Ordinario. 2020-Jun-1
Robótica. Extra. 2020-Jul-13
Robótica. Ordinario. 2021-Mayo-20
Robótica. Extra. 2021-Junio-16
Robótica. Parcial 1. 2022-Feb-25
Robótica. Parcial 2. 2022-Abril-1
Robótica. Parcial 3. 2022-Mayo-6
Robótica. Parcial 1. 2023-Feb-27
Robótica. Parcial 2. 2023-Mar-27
Robótica. Parcial 3. 2023-May-08
Robótica. Parcial 1. 2024-Feb-26
Robótica. Parcial 2. 2024-Mar-20
Robótica. Parcial 3. 2024-May-06
Robótica. Extra. 2024-Junio-24
Robótica. Parcial 1. 2025-Feb-25
Robótica. Parcial 2. 2025-Mar-31
Robótica. Parcial 3. 2025-May-19
Datos. Parcial 1. 2023-Oct-09
Datos. Parcial 2. 2023-Nov-15
Datos. Parcial 3. 2023-Dic-20
Datos. Parcial 1. 2024-Oct-09
Datos. Parcial 2. 2024-Nov-13
Datos. Parcial 3. 2025-Ene-17
Datos. Parcial 1. 2025-Oct-15