-
Notifications
You must be signed in to change notification settings - Fork 21
Examen: Parcial 2:2023_03_27:Robótica

- Tiempo: 50 minutos
- Descripción: Examen Parcial 2. Laboratorio. Grado de Ingeniería en Robótica Software
- Fecha: 2023/Marzo/27
- Temario: Sesiones L5, L6, y L7
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 conv_dec_hex.s, que pida al usuario un número entero y lo imprima en hexadecimal. Esta operación se debe repetir en un bucle hasta que el usuario introduce el número 0. En ese momento se termina el programa
En este pantallazo se muestra la salida del programa cuando el usuario introduce los números 15, 255 y 0 (para terminar). Utiliza exactamente las mismas cadenas y saltos de línea (ESPECIFICACIÓN)

Utiliza uno de los servicios del sistema operativo para realizar la conversión de decimal a hexadecimal
Todas las constantes del sistema operativo deben definirse en el fichero serv.s
El número introducido por el usuario, si es diferente de 0, se debe almacenar en la dirección 0x10010040 del segmento de datos. El programa completo (con los bonus) debe ocupar menos de 22 instrucciones
NOTA: Envía ambos ficheros (conv_dec_hex.s y serv.s), de forma independiente, a través de la entrega de prácticas
Este es el programa completo, junto con los bonus
#-- Conversor de decimal a hexadecimal
#-- Pedir número en decimal
#-- Terminar al introducir el número 0
#-- Constantes del sistema operativos (ESPECIFICACION)
.include "serv.s"
#-- Mensajes a mostrar al usuario (ESPECIFICACION)
.data
msg1: .string "\n\nIntroduce numero en decimal: "
msg2: .string "Valor en hexadecimal: "
.text
bucle:
#---------- Mostrar mensaje 1
la a0, msg1
li a7, PRINT_STRING
ecall
#--- Pedir numero al usuario
li a7, READ_INT
ecall
#-- a0: Contiene el numero en decimal
mv t0, a0
##-- Comprobar si el numero es 0.
##-- Si es asi, terminar
beq t0, zero, fin
##--- BONUS-----
#-- Almacenar el numero en la direccion 0x10010040
la t1, msg1
sw t0, 0x40(t1)
#--- Fin BONUS
#------ Imprimir el mensaje 2
la a0, msg2
li a7, PRINT_STRING
ecall
#-- Imprimir numero en hexadecial
mv a0, t0
li a7, PRINT_INT_HEX
ecall
#-- Repetir
b bucle
fin:
#-- Terminar
li a7, EXIT
ecall
Este programa tiene 21 instrucciones en código máquina, por lo que se cumple el Bonus
Este es el fichero serv.s con las constantes de los servicios del sistema operativo:
#-- Código de los servicios del sistema operativo
.eqv PRINT_INT 1
.eqv READ_INT 5
.eqv PRINT_STRING 4
.eqv READ_STRING 8
.eqv PRINT_CHAR 11
.eqv READ_CHAR 12
.eqv PRINT_INT_HEX 34
.eqv EXIT 10La 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.zip
- 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 Parcial-2
- Pon en ese directorio el programa realizado:
conv_dec_hex.syserv.s, o puedes bajarte los ficheros ya solucionados: conv_dec_hex.s, serv.c - Descomprime el archivo TEST.zip. Se crea el directorio TEST. Mete ahí los siguientes ficheros:
-
get_rars.sh--> (Opcional) Script para descargar el RARs -
rars1_5.jar--> El simulador RARs
-
En el directorio 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:~/Parcial-2/TEST$ ls
get_rars.sh TEST-01.shEjecutamos el script get_rars.sh:
obijuan@Hoth:~/Parcial-2/TEST
$ ./get_rars.sh
--2023-03-05 11:53:47-- https://github.com/TheThirdOne/rars/releases/download/v1.5/rars1_5.jar
Resolving github.com (github.com)... 140.82.121.4
[....]
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:~/Parcial-2/TEST$ ls
get_rars.sh rars1_5.jar TEST-01.shPara realizar la prueba hay que ejecutar el script TEST-01.sh:
obijuan@Hoth:~/Parcial-2/TEST$ bash TEST-01.shEsta es la salida:
-----Ejecutando TEST-01-----
> rars1_5.jar existe
> ✅️ ../conv_dec_hex.s existe
> ✅️ ../serv.s existe
> ➡️ PROBANDO: ../conv_dec_hex.s
java -jar rars1_5.jar nc me ic dump 0x10010040-0x10010044 HexText mem.hex 10000 dump .text HexText code.hex ../conv_dec_hex.s
> ✅️ mem.hex generado
> ✅️ Consola salida: Mensaje 1
> ✅️ Consola salida: Mensaje 2
> ✅️ Conversion de 15 OK
> ✅️ Conversion de 255 OK
> ✅️ Servicio 34 definido
> ✅️ El programa termina llamando a EXIT
> Instrucciones totales: 21
> 😀️ 0x10010040: 000000ff
> ✅️🎖️ BONUS!!!
> Ciclos de ejecución: 47
> SALIDA EN CONSOLA
Introduce numero en decimal: Valor en hexadecimal: 0x0000000f
Introduce numero en decimal: Valor en hexadecimal: 0x000000ff
Introduce numero en decimal:
------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: 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