Examen: Parcial 1:2023_10_09:Datos - myTeachingURJC/2019-20-LAB-AO GitHub Wiki

Examen Parcial 1: 2023-10-09. Ciencia e Ingeniería de Datos

  • Tiempo: 50 minutos
  • Descripción: Examen Parcial 1. Laboratorio. Grado de Ciencia e Ingeniería de Datos
  • Fecha: 2023/Octubre/9
  • Temario: Sesiones L1, L2, L3 y 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)

La velocidad final de un avión, se calcula utilizando la velocidad obtenida mediante un sensor tipo tubo de pitot, cuyo valor viene reducido por un factor de 4, la velocidad del viento, y un valor de error constante de 3

Escribe un programa en ensamblador en el fichero filtro.asm, que contenga 3 variables en memoria denominadas, v1, v2, v3, situadas en ese orden en el segmento de datos (v1 está en la posición 0x10010000)

Dicho programa debe calcular la velocidad del avión utilizando la fórmula f = 4 * v1 - (v2 + 3). El resultado se debe almacenar en la varible v3. Las variables se deben inicilalizar con los siguientes valores: v1 = 10, v2 = 2, v3 = 0. Una vez realizado el cálculo, se debe iluminar la letra C en el display de 7 segmentos derechos para indicar que se ha realizado el Cálculo.

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 filtro.asm:

#-- Programa que calcula la velocidad en base a la siguiente fórmula:
#--   f = 4 * v1 - (v2 + 3), el resultado se guarda en v3
#-- Declarar 3 variables en memoria denominadas, v1, v2, v3, situadas en ese orden en el segmento de datos
#-- Las variables se deben inicilalizar con los siguientes valores: v1 = 10, v2 = 2, v3 = 0
#-- Una vez realizado el cálculo, se debe iluminar la letra C en el display de 7 segmentos derechos 
#--   para indicar que se ha realizado el Cálculo.


	.eqv DISP_R 0xFFFF0010 #-- Dirección del display derecho
	.eqv V1 0 #-- Offset de v1 a partir de la dirección de v1
	.eqv V2 4 #-- Offset de v2 a partir de la dirección de v1
	.eqv V3 8 #-- Offset de v3 a partir de la dirección de v1
	.eqv LETRA_C 0x39 #-- Valor para iluminar la letra C
	
	
	.data

	#-- Declaración e inicialización de v1, v2 y v3
v1:	.word 10
v2:	.word 2
v3:	.word 0


	.text
	
	# Carga de la dirección de v1 en x3
	la x3, v1
	
	#-- Carga del valor de v1 y v2 en x4 y x5 respectivamente
	lw x4, V1(x3)
	lw x5, V2(x3)
	
	#-- Cálculo de la ecuación
	add x6, x4, x4 #-- x6 = v1 x 2
	add x6, x6, x6 #-- x6 = x6 x 2
	addi x7, x5, 3 #-- x7 = x5 + 3
	sub x8 x6, x7 #-- x8 = x6 + x7
	
	#-- Guarda el resultado almacenado en x8 en v3
	sw x8, V3(x3)
	
	#-- Mostrar la letra C
	li x10, DISP_R	#-- Carga la dirección del display derecho
	li x11 LETRA_C  #-- Carga el valor de la letra C
	sw x11, 0(x10)  #-- Guarda en el MMIO del display derecho el valor de la letra C
	
	
	#-- Terminar
	li a7, 10
	ecall

Evaluación

La evaluación del programa se ha hecho de la siguiente manera:

  • Estilo: comentarios, pseudoinstrucciones, eqv, etc. (1pto)

  • Variables: Definir variables en .data y leer/escribir correctamente (1pto)

  • Ecuación: Calcular correctamente la ecuación (1pto)

  • Optimización: 15 instrucciones o menos (1pto)

  • Display: Iluminar la letra C (1pto)

Autores

Licencia

Enlaces