Examen: Parcial 1:2024_03_20:Robotica - myTeachingURJC/2019-20-LAB-AO GitHub Wiki

Examen Parcial 2: 2024-03-20. Robotica

  • Tiempo: 50 minutos
  • Descripción: Examen Parcial 2. Laboratorio. Grado en Ingeniería de Robótica Software
  • Fecha: 2024/Marzo/20
  • Temario: Sesiones L5,L6 y L7

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 un fichero llamado cuenta.s, que pida al usuario de la aplicación dos números enteros:

Primer numero: <input>
Segundo numero: <input>

La lógica de la aplicación será la siguiente:

  • En el caso de que sea el mismo número, la aplicación deberá imprimir el mensaje "Iguales" en una línea
  • En el caso de que el segundo número sea mayor que el primero, se imprimirá a continuación en una nueva línea un mensaje que diga: "Cuenta hacia delante" y en la siguiente línea la secuencia de números desde el primero hasta el segundo ambos incluidos separados por espacios.
  • En el caso contrario en el que el segundo es menor que el primero, se imprimirá un mensaje en una nueva línea que diga: "Cuenta atrás" y en la siguiente línea la secuencia de números desde el primero hasta el segundo, ambos incluidos, separados por espacios.

Ejemplo de tres ejecuciones consecutivas en RARS:

Bonus

El programa completo debe ocupar menos de 52 instrucciones

NOTA: Define todas las constantes de los servicios del sistema operativo dentro del propio fichero cuenta.s

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 cuenta.s:

# Programa de examen
# Pide dos numeros al usuario e imprime la secuencia entre ellos indicando si es ascendente o descendente.

   #syscalls
   .eqv EXIT 10
   .eqv PRINT_CHAR 11
   .eqv PRINT_INT 1
   .eqv READ_INT 5
   .eqv PRINT_STRING 4
   
   .eqv SPACE 0x20

   .data
num1_intro:	 
   .string "Primer numero: "
num2_intro:	
   .string "Segundo numero: "
str_iguales:
   .string "Iguales\n"
str_cuentaascendente:
   .string "Cuenta hacia delante\n"
str_cuentadescendente:
   .string "Cuenta atras\n"		
   		
   .text
   # pide primer numero (imprime string de introduccion, lee numero y lo guarda en t0)
   li a7, PRINT_STRING
   la a0, num1_intro
   ecall
   
   li a7, READ_INT
   ecall
   mv t0, a0
   
   # pide segundo numero (imprime string de introduccion, lee numero y lo guarda en t1)
   li a7, PRINT_STRING
   la a0, num2_intro
   ecall
   
   li a7, READ_INT
   ecall
   mv t1, a0
   
   # compara los valores leidos
   
   beq t0, t1, iguales

   bge t1, t0, ascendente
   	
   #segundo numero es menor que primero =>  cuenta atras

   	#imprime mensaje de cuenta atras
   li a7, PRINT_STRING
   la a0, str_cuentadescendente
   ecall
   
   #bucle para imprimir iterando t1 hasta llegar a t0

bucle_descendente:				
   
   mv a0, t0
   li a7, PRINT_INT
   ecall
   
   li a0, SPACE
   li a7, PRINT_CHAR
   ecall
   
   addi t0, t0, -1

   bge t0, t1, bucle_descendente								

   
   b fin #saltamos a fin

ascendente:

   #imprime mensaje de cuenta hacia delante
   li a7, PRINT_STRING
   la a0, str_cuentaascendente
   ecall
   
   #bucle para iterar hasta llegar a t1

bucle_ascendente:				
   
   mv a0, t0
   li a7, PRINT_INT
   ecall
   
   li a0, SPACE
   li a7, PRINT_CHAR
   ecall
   
   addi t0, t0, 1
   
   blt t0, t1, bucle_ascendente								

   mv a0, t1
   li a7, PRINT_INT
   ecall											

   b fin #salta a fin
   																																	
iguales:
   li a7, PRINT_STRING
   la a0, str_iguales
   ecall
   	
   
   #fin de programa
fin:
   li a7,EXIT
   ecall

Este programa tiene 51 instrucciones. Se cumple el BONUS! (51 < 52)

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

TODO

Autores

  • Juan Ignacio Pérez

Licencia

Enlaces

⚠️ **GitHub.com Fallback** ⚠️