Repository navigation
Examen: Parcial 1:2025_10_20:GISAM

- Tiempo: 50 minutos
- Descripción: Examen Parcial 1. Laboratorio. Grado en Ingeniería de Sistemas Audiovisuales y Multimedia
- Fecha: 2025/Oct/20
- 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 term.s, que calcule la siguiente expresion:
c = b - 4a - 3
Donde a y b son dos variables almacenadas en memoria, consecutivamente. En la primera posición del segmento de datos se debe almacenar el valor 0xCAFEBACA. A continuación se sitúan las variables a y b, con los valores iniciales de 10 y 100 respectivamente. Tras ellas se encuentra la variable c
El programa debe leer las variables a y b de memoria, realizar el cálculo indicado en la expresión, y situar el resultado en la variable c en memoria
Utiliza el registro x9 para almacenar el cálculo final de la expresión, que luego se almacena en la variable c
Conseguirás este bonus si has obtenido la máxima puntuación (programa perfecto) y si tu programa tiene 11 instrucciones o menos
# Expresion a calcular: c = b - 4a - 3
.data
# -- Valor almacenado en la primera posicion del segmento de datos
.word 0xCAFEBACA #-- ESPECIFICACION
# -- Variables
a: .word 10 #-- Variable a
.word 100 #-- Variable b
.word 0 #-- Variable c
.text
#-- Registro x1: Direccion de a
la x1, a
#-- Leer las variables a y b
#-- x2 = a
lw x2, 0(x1)
#-- b está 4 bytes más arriba que a
#--x3 = b
lw x3, 4(x1)
#-- Calcular la expresion
#-- c = b - 4a - 3
#-- x9 = x3 - 4*x2 - 3
#-- Hay que usar x9 por ESPECIFICACIONES
#-- Calculo de 4a
add x2, x2, x2 #-- 2a
add x2, x2, x2 #-- 4a
#-- c = b - 4a
#-- x9 x3 x2
sub x9, x3, x2
#-- c = (b - 4a) - 3
addi x9, x9, -3
#-- x9 contiene el resultado final (ESPECIFICACIONES)
#-- Lo almacenamos en la variable c
#-- La variable c está 8 bytes por encima de a
sw x9, 8(x1)
# -- Terminar
li a7, 10
ecall
Este programa tiene 11 instrucciones por lo que se 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)
Para comprobar la funcionalidad se utiliza la herramienta Arquibot, que son un conjunto de programas python que ejecutan el simulador RARS en línea de comando y comprueban el funcionamiento correcto del programa en ensamblador entregado por el estudiantado
Para comprobar tu solución sigue estas instrucciones:
- Descarga este fichero: arquibot-0.2.zip
- Crea un directorio donde se realizarán las pruebas. Por ejemplo Parcial1
- Pon en ese directorio el programa realizado:
term.s, o puedes bajarte el fichero ya solucionado: term.s - Descomprime en ese directorio el fichero arquibot-0.2.zip
La estructura queda así:
.
└── Parcial1
├── arquibot-0.2
│ ├── 2025-10-20-P1-run.py
│ └── arquibot
│ ├── ansi.py
│ ├── rars.py
│ └── util.py
└── term.s
Ejecutamos el script 2025-10-20-P1-run.py:
obijuan@JANEL:~/tmp/Parcial1/arquibot-0.2$ ./2025-10-20-P1-run.py
────────────────────────────────────────
ARQUI-BOT 0.2
────────────────────────────────────────
> 🤚 RARS no existe
> Descargando RARS
> OK!
> ☑️ RARS EXISTE
> ✅️ ../term.s existe
> Probando: ../term.s
> Ejecutando: java -jar rars1_6.jar x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 nc me ic 10000 dump 0x10010000-0x10010010 HexText data.hex dump .text HexText text.hex ../term.s
> ✅️ Hay segmento de datos
> ✅️ Hay segmento de código
> ✅️ Se termina con EXIT
──────── Comprobando variables
> ✅️ var0 = 3405691594 (0xcafebaca)
> ✅️ a = 10 (0xa)
> ✅️ b = 100 (0x64)
> ✅️ c = 57 (0x39)
> ✅️ Registro x9: 57
> Instrucciones totales: 11
> Ciclos de ejecución: 10
> Comprobando BONUS...
> ✅️ Máximo de 11 instrucciones
> 🎖️ BONUS CONSEGUIDO!!!
────────────────────────────────────────Este script primero comprueba si en el directorio está el fichero rars_1.6.jar. Si no es así, lo baja del repositorio. A continuación analiza el fichero term.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
L14: Macros
L15: Entrada/Salida a bajo nivel
L16: Multiplicaciones/divisiones. Unit Tests 🚧
L17: Biblioteca stdio: salida a alto 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
GISAM. Parcial 2. 2025-Nov-19
GISAM. Parcial 3. 2026-Enero-9
GISAM. Parcial 1. 2026-Oct-21
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
TELECO. Parcial 2. 2025-Nov-13
TELECO. Parcial 3. 2026-Ene-21
TELECO. Extra. 2026-Jun-25
TELECO. Parcial 1. 2026-Oct-09
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
Robótica. Parcial 1. 2026-Feb-23
Robótica. Parcial 2. 2026-Abr-13
Robótica. Parcial 3. 2026-May-11
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
Datos. Parcial 2. 2025-Nov-19