Examen: Parcial 1:2024_03_20:Robotica - myTeachingURJC/2019-20-LAB-AO GitHub Wiki
- 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
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 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:
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
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)
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...
TODO
- Juan Ignacio Pérez