-
Notifications
You must be signed in to change notification settings - Fork 21
Examen: 2021_06_16:Robótica

- Tiempo: 2h
- Descripción: Examen del Laboratorio del grado de Ingeniería en Robótica Software. Convocatoria extraordinaria
- Fecha: 2021/Junio/06
- Aquí está disponible el Enunciado en PDF
- Aquí están las Plantillas: Plantillas.zip
(Por hacer)
Como siempre ocurre al programar, existen infinitas soluciones. Pero en todas ellas se debe respetar la especificación y no violar el convenio de uso de registros
Estos son los tres ficheros de una posible solución:
- Fichero fib.s
#------------------------
# int fib(a,b): Devolver el siguiente numero de fibonacci,
# suponiendo que a y b son numero correctos de la fibonacci
# Entradas:
# a: Numero de fibonacci n
# b: Numero de fibonacci siguiente a n
# Salidas:
# Numero de fibonacci siguiente a b: a+b
#---------------------------------------------
.globl fib
fib:
#-- Asumimos que a0 y a1 son numeros de fibonacci consecutivos correctos
#-- (ESPECIFICACION DEL ENUNCIADO)
#-- El siguiente numero de fibonacci será a0 + a1
#-- El resultado hay que devolverlo por a0
add a0, a0, a1
ret
- Fichero test_fib.s
# -- Constantes de los servicios del sistema
# -- operativo (ESPECIFICACIONES ENUNCIADO)
.include "so.s"
# -- Contador de terminos de fibonacci
# -- (ESPECIFICACIONES ENUNCIADO)
.eqv N 10
.text
# -- Contador de terminos de la serie de fibonacci
# -- sin contar los dos primeros (0, 1)
li s2, N
# -- valores iniciales de la secuencia de fibonacci
# -- Estos valores NO se imprimen. Se usan para calcular
# -- el siguiente trrmino
li s0, 0
li s1, 1
bucle:
# -- Comprobar si quedan terminos por calcular
# -- Si no quedan, terminar
beq s2, zero, fin
# -- Queda un término menos
addi s2, s2, -1
# -- Asignar los valores actuales
# -- para calcular el siguiente termino de fibonacci
mv a0, s0
mv a1, s1
jal fib
#-- a0 contiene el siguiente numero de fibonacci
# -- Actualizar los terminos de fibonacci actuales
mv s0, s1
mv s1, a0
#-- Imprimir nuevo termino
li a7, PRINT_INT
ecall
#-- Imprimir un espacio de separacion
li a0, ' '
li a7, PRINT_CHAR
ecall
# -- Repetir bucle
b bucle
fin:
# -- Terminar
li a7, EXIT
ecall- Fichero so.s
.eqv EXIT 10
.eqv PRINT_INT 1
.eqv PRINT_CHAR 11- Fichero print_mul5.s
#-- Constantes usadas
.eqv FIN 10
.eqv IMPRIMIR_ENTERO 1
.eqv IMPRIMIR_CARACTER 11
.globl print_mul5
.text
print_mul5:
#-- Es necesario crear la pila para guardar la direccion de retorno
#-- y los registros estáticos que se están modificando
addi sp,sp, -16
#-- Guardar direccion de retorno
sw ra, 12(sp)
#-- Guardar los registros estáticos en la pila
#-- para recuperarlos al final y respectar así
#-- el convenio
sw s0, 0(sp)
sw s1, 4(sp)
#-- El registro S0 lo inicializamos con n (a0)
#-- que es el parametro de entrada
mv s0, a0
# ----------------- ESTE CODIGO NO SE PUEDE MODIFICAR ----------------------------------
# -- Contador: 1,2,3....
li s1, 1
bucle:
beq s0, zero, terminar
addi s0, s0, -1
# -- Calcular el siguiente multiplo de 5
mv a0, s1
jal mul5
#-- En a0 se encuentra el multiplo
#-- Lo imprimimos en la consola
li a7, IMPRIMIR_ENTERO
ecall
#-- Imprimir un espacio
li a0, ' '
li a7, IMPRIMIR_CARACTER
ecall
#-- Pasar al siguiente multiplo
addi s1, s1, 1
b bucle
terminar:
#----------- FIN DEL CODIGO QUE NO SE PUEDE MODIFICAR ------------------
#-- Recuperar los valores de los registros estáticos
lw s0, 0(sp)
lw s1, 4(sp)
#-- Recuperar la direccion de retorno
lw ra, 12(sp)
#-- Recuperar el puntero de pila
addi sp, sp, 16
#-- Retornar
ret- Fichero main.s
.eqv READ_INT 5
.eqv PRINT_STRING 4
.eqv EXIT 10
.data
msg1: .string "\nIntroduce numero de multiplos a imprimir: "
.text
bucle:
#-- Imprimir mensaje de solicitud
la a0, msg1
li a7, PRINT_STRING
ecall
#-- Pedir numero al usuario
li a7, READ_INT
ecall
#-- a0 contiene el numero introducido por el usuario
#-- Si este numero es 0 se termina
beq a0, zero, fin
#-- Imprimir los multiplos pedidos, llamando a print_mult()
jal print_mul5
#-- Repetir el bucle
b bucle
fin:
#-- Terminar
li a7, EXIT
ecall
- 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