-
Notifications
You must be signed in to change notification settings - Fork 22
Examen: Parcial 1:2022_10_26:GISAM
- Tiempo: 40 minutos
- Descripción: Examen Parcial 1. Laboratorio. Grado en Ingeniería de Sistemas Audiovisuales y Multimedia
- Fecha: 2022/Oct/26
- 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 display.s, que calcule la siguiente expresión:
digito = X + Y + W -T + 2
Evaluarla para los valores iniciales de X=128, Y=32, W=4, T=64. El resultado calculado se debe guardar en la variable digito que debe estar en la primera posición del segmento de datos. Además, este resultado se debe escribir en la posición de memoria 0xFFFF0010 (donde se encuentra el display de 7 segmentos derecho)
NOTA: Envía el fichero display.s con la solución como una entrega del laboratorio
Como siempre ocurre al programar, existen infinitas soluciones. Pero en todas ellas se debe respetar la especificación
Este es el contenido del fichero display.s:
#-- Calcular la expresion digito = X + Y + W - T + 2
#-- Direccion de memoria del display de 7 segmentos
.eqv DISP_R 0xFFFF0010
#-- (Opcional) Valores iniciales de las variables de la expresion
#-- (Usar constantes es una buena practica de programacion)
.eqv X 128
.eqv Y 32
.eqv W 4
.eqv T 64
#-- Segmento de datos
.data
#-- Variable donde depositar el resultado (ESPECIFICACION)
digito: .word 0
.text
#-- Realizar la inicializacion
#-- Registros usados: a --> x1, b-->x2, c-->x3, d-->x4
#-- digito -> x5
li x1, X
li x2, Y
li x3, W
li x4, T
#-- Calcular la expresion
#-- Expresion: digito = a + b + c - d + 2
add x5, x1, x2 #-- x5 = a + b
add x5, x5, x3 #-- x5 = a + b + c
sub x5, x5, x4 #-- x5 = a + b + c - d
addi x5, x5, 2 #-- x5 = a + b + c + 2
#-- Almacenar expresion en variable de memoria (ESPECIFICACION)
#-- El registro x6 contiene la direccion de memoria
la x6, digito
sw x5, 0(x6)
#-- Enviar resultado al display de 7 seg (ESPECIFICACION)
li x6, DISP_R
sw x5, 0(x6)
#-- Terminar
li a7, 10
ecall
Al ejecutarlo se muestra el dígito 4 en el display de 7 segmentos
Este programa tiene 16 instrucciones. 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
-
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...
El script de test está disponible, por si quieres probarlo con tus programas para practicar. También está disponible un mini-script para bajarse el rars 1.5 desde el repositorio de github
- Script de Test: TEST-01.sh
- Script de descarga del RARs: get_rars.sh
Estos scripts se han hecho para ejecutarse en la bash de LINUX
Sigue lo siguientes pasos:
- Crea un directorio donde se realizarán las pruebas. Por ejemplo Test
- Mete en el directorio Test los siguientes ficheros:
-
TEST-01.sh
--> Script de test -
display.s
---> Tu programa (o puedes bajarte el fichero ya solucionado: display.s -
get_rars.sh
--> (Opcional) Script para descargar el RARs -
rars1_5.jar
--> El simulador RARs
-
En el mismo directorio de Test necesitas tener el RARs. Si ya lo tienes descargado copialo a Test. Si no lo tienes, ejecuta el script de descarga (get_rars.sh). Estos son los ficheros de la carpeta Test:
obijuan@Hoth:~/Test$ ls
display.s get_rars.sh TEST-01.sh
Ejecutamos el script get_rars.sh:
/home/obijuan/Develop/MyTeachingURJC/2019-20-LAB-AO/wiki/Examenes/2022-10-26-P1-GISAM/display.s
/home/obijuan/Develop/MyTeachingURJC/2019-20-LAB-AO/wiki/Examenes/2022-10-26-P1-GISAM/get_rars.sh
/home/obijuan/Develop/MyTeachingURJC/2019-20-LAB-AO/wiki/Examenes/2022-10-26-P1-GISAM/TEST-01.sh
[....]
rars1_5.jar 100%[======================================>] 1,76M 9,79MB/s in 0,2s
2022-11-04 09:15:40 (8,71 MB/s) - ‘rars1_5.jar’ saved [1843878/1843878]
obijuan@Hoth:~/Test$
Ahora ya tenemos todos los ficheros:
obijuan@Hoth:~/Test$ ls
display.s get_rars.sh rars1_5.jar TEST-01.sh
Para realizar la prueba hay que ejecutar el script TEST-01.sh
:
obijuan@Hoth:~/Test$ bash TEST-01.sh
Esta es la salida:
-----Ejecutando TEST-01-----
> ✅️ rars1_5.jar existe
> ✅️ display.s existe
> ➡️ PROBANDO: display.s
java -jar rars1_5.jar nc me ic dump 0x10010000-0x10010010 HexText mem.hex 10000 dump .text HexText code.hex display.s
> ✅️ mem.hex generado
> ✅️ Variable Digito: 00000066
> ✅️ El programa termina llamando a EXIT
> ✅️🎖️ BONUS!!!. Menos de 17 instrucciones
> Instrucciones totales: 16
> Ciclos de ejecución: 15
------FIN-------
Al terminar se queda esperando a que apretemos ENTER
El script es muy básico, y no detecta toda la casuistica, pero sí permite detectar las violaciones de las ESPECIFICACIONES
- Katia Leal Algara
- Juan González-Gómez (Obijuan)
L1: Práctica 1-1. RARs
L2: Práctica 1-2. Ensamblador
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
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
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
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
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
Práctica 1: Sesiones 1,2 y 3
Práctica 2: Sesiones 4, 5 y 6
Práctica 3: Sesiones 7 y 8
Práctica 4: Sesiones 9, 10 y 11
Práctica 5: Sesión 12