Skip to content

Examen: Parcial 1:2022_02_25:Robótica

Juan Gonzalez-Gomez edited this page Oct 23, 2022 · 13 revisions

Examen Parcial 1: 2022-02-25. Ingeniería en Robótica Software

  • Tiempo: 40 minutos
  • Descripción: Examen Parcial 1. Laboratorio. Grado de Ingeniería en Robótica Software
  • Fecha: 2022/Feb/25
  • Temario: Sesiones L1-L4

Contenido

Enunciado

El examen se ha realizado a través de Aula virtual. Tiene dos partes: Test y un programa

Test (5 ptos)

  • 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

Programa (5 ptos)

Escribe un programa en ensamblador del RISC-V, en el fichero calc.s, que calcule la siguiente expresión:

f = a + b - c + 30

donde, a, b, c y f son variables situadas en memoria, de forma consecutiva, en ese orden. La variable a debe estar en la primera posición de memoria del segmento de datos. Las variables deben estar inicializadas con los valores a=1, b=2, c=3 y f=0. El programa calcula la expresión para esos valores de las variables, deja el resultado en la variable f y termina

Bonus: Puntuación extra si el programa tiene menos de 12 instrucciones

NOTA: Envía el fichero calc.s con la solución como una entrega del laboratorio

Solución al programa

Como siempre ocurre al programar, existen infinitas soluciones. Pero en todas ellas se debe respetar la especificación

Este es el contenido del fichero calc.s:

#-- Programa calc.s: Evaluar la siguiente expresion:
#-- f = a + b - c + 30, donde a,b,c y f son VARIABLES
#-- Deben estar inicializadas a los valores: a=1, b=2, c=3, f=0
#-- El resultado de la expresión es: 1 + 2 -3 + 30 = 30
#-- Si al ejecutar el programa tenemos el valor 30 en la variable f
#-- el calculo será correcto (Dirección de f:  0x1001000C)

   #-- (opcional) Lo desplazamientos para acceder a las
   #-- variables se pueden definir mediante constantes
   .eqv vA  0
   .eqv vB  4
   .eqv vC  8
   .eqv vF  0xC

   .data
   
a:	.word 1  #-- Variable a. Desplaz. 0
b:      .word 2  #-- Variable b. Desplaz. 4
c:      .word 3  #-- Variable c. Desplaz. 8
f:      .word 0  #-- Variable d  Desplaz. C

   .text
   
   #-- x10: Registro puntero para acceder a las variables
   la x10, a  #-- Contiene la direccion de la variable a
   
   #-- Leer las variables a,b y c en los regisrtros x1, x2 y x3
   
   #-- x1 = variable a
   lw x1, vA(x10)
   
   #-- x2 = variable b
   lw x2, vB(x10)
   
   #-- x3 = variable c
   lw x3, vC(x10)
   
   #----- Calcular la expresion. El resultado se deja en x4
   
   #-- x4 = a + b
   add x4, x1, x2
   
   #-- X4 = X4 - c
   sub x4, x4, x3
   
   #-- Resultado final: x4 = x4 + 30
   addi x4, x4, 30
   
   #-- Almacenar x4 en la variable f
   sw x4, vF(x10)
   
   #-- Terminar
   li a7, 10
   ecall
   

Este programa tiene 11 instrucciones. Se cumple el BONUS! (RECUERDA: Las instrucciones se refieren al Código máquina por lo que para saber la cuenta exacta debes verlo en el RARs)

Evaluación

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...

TEST automático

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

Preparando el entorno

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
    • calc.s ---> Tu programa (o puedes bajarte el fichero ya solucionado: calc.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
calc.s  get_rars.sh  TEST-01.sh

Ejecutamos el script get_rars.sh:

obijuan@Hoth:~/Test$ bash get_rars.sh 
--2022-03-04 10:18:30--  https://github.com/TheThirdOne/rars/releases/download/v1.5/rars1_5.jar
Resolving github.com (github.com)... 140.82.121.3
Connecting to github.com (github.com)|140.82.121.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
[....]
rars1_5.jar                100%[======================================>]   1,76M  9,79MB/s    in 0,2s    

2022-03-04 10:18:31 (9,79 MB/s) - ‘rars1_5.jar’ saved [1843878/1843878]

obijuan@Hoth:~/Test$ 

Ahora ya tenemos todos los ficheros:

obijuan@Hoth:~/Test$ ls
calc.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
> ✅️ calc.s existe

> ➡️  PROBANDO: calc.s
java -jar rars1_5.jar nc me ic dump 0x10010000-0x10010010 HexText mem.hex 10000 dump .text HexText code.hex calc.s

> ✅️ mem.hex generado
> ✅️ Variable a: 00000001
> ✅️ Variable b: 00000002
> ✅️ Variable c: 00000003
> ✅️ Variable f: 0000001e
> ✅️ El programa termina llamando a EXIT
> ✅️🎖️  BONUS!!!. Menos de 12 instrucciones
> Instrucciones totales: 11
> Ciclos de ejecución: 10

------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

Autores

Licencia

Enlaces

Página principal


Sesiones de Prácticas

P1: Simulador RARs

L1: Práctica 1-1. RARs
L2: Práctica 1-2. Ensamblador
L3: Práctica 1-3. Variables

P2: E/S mapeada. Llamadas al sistema

L4: Pract 2-1. E/S mapeada
L5: Práctica 2-2: Inst. ecall
L6: Prác 2-3: Cadenas

P3: Bucles y Saltos condicionales

L7: Práct 3-1: Bucles y saltos
L8: Práct 3-2: Cadenas II

P4: Subrutinas

L9: Pract 4-1: Subrut. Nivel-1
L10: Pract 4-2: La pila
L11: Pract 4-3: Recursividad

P5: Memoria Dinámica

L12: Pract 5-1. Heap. Listas

VÍDEO DE DESPEDIDA

Ejercicios de examen

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

SOLUCIONES

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

Clone this wiki locally