Examen: 2023_01_10:TELECO - myTeachingURJC/2019-20-LAB-AO GitHub Wiki
Examen convocatoria ordinaria: 2023-01-10. TELECO
- Tiempo: 2h
- Tipo de examen: Presencial, en los Laboratorios Linux de la URJC. Entrega realizada a través de Aula Virtual
- Grado: TELECO
- Descripción: Enunciado del examen y SOLUCIONES
Contenido
Enunciado
Solución
Pregunta 1: Función doble() (2 puntos)
Está implementada en el fichero doble.s (ESPECIFICACIONES):
#----------------------------------------------------------------
#-- Funcion doble(n): Calcula el doble del numero recibido
#-------------------------------
#-- ENTRADAS:
#-- * a0: Numero a doblar
#-- SALIDAS:
#-- * a0: Numero doble (2 * a0)
#----------------------------------------------------------------
.globl doble
.text
doble:
#-- Es una función hoja, por lo que no hay que guardar la direccion
#-- de retorno en la pila
add a0, a0, a0
ret
Pregunta 2: Programa principal main.s (3 puntos)
Programa principal utilizado para comprobar el funcionamiento de la función anterior (doble()):
Fichero main.s (ESPECIFICACIONES):
#----------------------------------
#-- Programa principal:
#----------------------------------
.include "so.s"
.data
#-- Mensajes indicados en la ESPECIFICACION
msg1: .string "Introduzca un numero entero: "
msg2: .string "El doble de "
msg3: .string " es "
.text
#------ Pedir un numero al usuario
#-- Imprmir los mensajes pedidos (ESPECIFICACION)
la a0, msg1
li a7, PRINT_STRING
ecall
#-- Lectura del numero entero (n)
li a7, READ_INT
ecall
#-- a0 contiene el numero introducido por el usuario
#-- Lo guardamos en s0 para no perderlo
mv s0, a0
#-- Calcular el doble del numero
jal doble
#-- a0 contiene el doble
mv s1, a0 #-- Guardar el doble en s1
#-- Imprimir el resultado:
la a0, msg2
li a7, PRINT_STRING
ecall
#-- Imprimir el numero original
mv a0, s0
li a7, PRINT_INT
ecall
#-- Imprimir el mensaje 3
la a0, msg3
li a7, PRINT_STRING
ecall
#-- Imprimir el resultado
mv a0, s1
li a7, PRINT_INT
ecall
#-- Terminar
li a7, EXIT
ecall
Pregunta 3: Programa principal cuadruple.s (3 puntos)
Fichero cuadruple.s (ESPECIFICACIONES):
#----------------------------------------------------------------
#-- Funcion cuadruple(n): Calcula el cuadruple del numero recibido
#-------------------------------
#-- ENTRADAS:
#-- * a0: Numero a cuatriplicar
#-- SALIDAS:
#-- * a0: Numero cuatriplicado (4 * a0)
#----------------------------------------------------------------
.globl cuadruple
.text
#-- Es una funcion intermecia, por lo que hay que crear la pila
#-- para guardar la direccion de retorno
cuadruple:
#-- Crear la pila
addi sp,sp, -16
#-- Almacenar direccion de retorno
sw ra, 12(sp)
#-- Calcular el doble
jal doble
#-- En a0 obtenemos el doble
#-- Calcular otra vez el doble
jal doble
#-- En a0 tenemos el cuadruple
#-- Recuperar la direccion de retorno de la pila
lw ra, 12(sp)
#-- Eliminar pila
addi sp,sp, 16
ret
Pregunta 4: Programa principal main2.s (2 puntos)
Esta función se encuentra dentro del fichero main2.s (ESPECIFICACIONES)
#----------------------------------
#-- Programa principal:
#----------------------------------
.include "so.s"
.data
#-- Mensajes indicados en la ESPECIFICACION
msg1: .string "Introduzca un numero entero: "
msg2: .string "El cuadruple de "
msg3: .string " es "
.text
#------ Pedir un numero al usuario
#-- Imprmir los mensajes pedidos (ESPECIFICACION)
la a0, msg1
li a7, PRINT_STRING
ecall
#-- Lectura del numero entero (n)
li a7, READ_INT
ecall
#-- a0 contiene el numero introducido por el usuario
#-- Lo guardamos en s0 para no perderlo
mv s0, a0
#-- Calcular el doble del numero
jal cuadruple
#-- a0 contiene el doble
mv s1, a0 #-- Guardar el doble en s1
#-- Imprimir el resultado:
la a0, msg2
li a7, PRINT_STRING
ecall
#-- Imprimir el numero original
mv a0, s0
li a7, PRINT_INT
ecall
#-- Imprimir el mensaje 3
la a0, msg3
li a7, PRINT_STRING
ecall
#-- Imprimir el resultado
mv a0, s1
li a7, PRINT_INT
ecall
#-- Terminar
li a7, EXIT
ecall
Fichero so.s
Según las ESPECIFICACIONES, todas las constantes necesarias para los servicios del sistema operativo se deben situar en el fichero so.s:
#-- Código de los servicios del sistema operativo
#-- Incluir estos archivos en tus programas
#-- para acceder a ellos fácilmente, y hacerlos más
#-- legibles
.eqv PRINT_STRING 4
.eqv READ_STRING 8
.eqv READ_INT 5
.eqv PRINT_INT 1
.eqv PRINT_CHAR 11
.eqv READ_CHAR 12
.eqv EXIT 10
Evaluación
TODO
Autores
- Katia Leal Algara
- Juan González-Gómez (Obijuan)