Skip to content

Examen: Parcial 2:2024_11_13:Datos

Miguel edited this page Nov 22, 2024 · 1 revision

Examen Parcial 2: 2024-11-13. Ciencia e Ingeniería de Datos

  • Tiempo: 50 minutos
  • Descripción: Examen Parcial 1. Laboratorio. Grado de Ciencia e Ingeniería de Datos
  • Fecha: 2024/Octubre/9
  • Temario: Sesiones L5, L6, L7 y L8

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
  • 8 preguntas tipo test
  • Las respuesats incorrectas restan un 33% del valor de la pregunta
  • Solución disponible en Aula virtual

Programa (5 ptos)

Hacer un programa en RARS que convierta una entrada hexadecimal de hasta 32 bits a un decimal sin signo. El programa pedirá el valor en hexadecimal (se supondrá correcto) y mostrará el resultado de convertirlo a decimal, terminando. Si no se da ningún valor (se pulsa directamente intro), terminará sin mostrar nada.

Se muestran a continuación tres ejecuciones de ejemplo (en la última se ha pulsado directamente intro como entrada):

Valor hexadecimal: 12abC

El valor en decimal es 76476

-- program is finished running (0) --


Valor hexadecimal: FFFFffff

El valor en decimal es 4294967295

-- program is finished running (0) --


Valor hexadecimal: 

-- program is finished running (0) --

Notas:

  • La diferencia entre una mayúscula y una minúscula es un bit (ASCII en binario de A=01000001 y de a=01100001). Haciendo un AND u OR adecuado, se puede convertir de una a otra.

  • Si una parte le resulta muy complicada (por ejemplo, que acepte mayúsculas y minúsculas), implemente solo una de ellas y, si le queda tiempo cuando termine el resto, intente completarlo.

  • Si el programa no ensambla, se calificará con un cero. Le recomendamos que vaya guardando versiones que ensamblen según vaya avanzando.

  • Si el fichero donde está su programa referencia a otro fichero, entréguelo también.

Solución al programa

Como siempre ocurre al programar, existen infinitas soluciones. Pero en todas ellas se debe respetar la especificación del enunciado

Este es el contenido del fichero hexaTxt2dec.s:

#  Programa: hexaTxt2dec.s
# Propósito: Convierte cadenas en hexadecimal de hasta 32 bits a decimal sin signo
#     Autor: Javier Macías del Campo
#     Fecha: 09/11/2023
#      Obs.: Se presupone que la cadena introducida es correcta (o vacía, o hexadecimal correcto)

	.include "servicios.asm"
	
	.eqv MAX 10  # Longitud de un hexadecimal de 32 bits más dos (para \n\0)
	.eqv AND_MAY 0xDF  #bin.11011111 para hacer AND para pasar a mayúscula (A 01000001, a 01100001)
	
	.data
bufStr:	.space MAX
txtEnt: .string "Valor hexadecimal: "
txtRes:	.string "El valor en decimal es "
	
	.text
	
	#inicializamos registros para comparaciones, operaciones, etc.
	la s0, bufStr   #s0 => dirección inicio cadena
	li s1, 16       #s1 => multiplicador hexadecimal (16)
	li s2, '\n'     #s2 => fin de línea
        li s3, '9'      #s3 => ascii '9' (para separar '0'-'9' de 'A'-'F')
        li s4, '0'      #s4 => ascii '0' (para restar a '0'-'9' y convertir a decimal)
        li t0, 'A'      #ascii 'A'
        addi s5, t0, -10  #s5 => ascii 'A' - 10 (para restar a 'A'-'F' y convertir a decimal)

        #mostramos mensaje petición valor hexadecimal
        la a0, txtEnt
	li a7, PRINT_STRING
	ecall 
	
	#leemos valor hexadecimal
	mv a0, s0
	li a1, MAX
	li a7, READ_STRING
	ecall
	
	#inicializamos "contadores"
	mv t0, s0       #t0 => puntero a la cadena introducida
	li t1, 0        #t1 => resultado (hasta el momento) en decimal
	
	
	#procesamiento entrada
sigue:  lb t2, 0(t0)    #t2 => carácter a analizar
	
	beq t2, s2, compru  #si es '\n', se ha terminado de analizar
	
ok:	mul t1, t1, s1     #multiplicamos por 16
        bgt t2, s3, digHex #si >'9', es 'A'-'F' o 'a'-'f'  
        
        #es un carácter '0'-'9'
        sub t2, t2, s4   #convertimos a entero
        b suma
        
digHex:	#es un carácter 'A'-'F' o 'a'-'f' 
	andi t2, t2, AND_MAY  #convertimos a mayúscula
	sub t2, t2, s5  #convertimos a entero
	
suma:	add t1, t1, t2  #sumamos al resultado
	addi t0, t0, 1  #incrementamos puntero a la cadena
	b sigue
	
                           
compru:	beq s0, t0, fin  #si estamos al inicio cadena con \n, terminar (cadena vacía)
        
        #escribimos el resultado
        la a0, txtRes
        li a7, PRINT_STRING
        ecall
        
        mv a0, t1
        li a7, PRINT_INT_U
        ecall
        
        li a0, '\n'
        li a7, PRINT_CHAR
        ecall
        
        #terminamos                
fin:	li a7, EXIT
	ecall

Este es el contenido del archivo servicios.asm:

#   Archivo: servicios.asm
# Propósito: Códigos servicios S.O. para incluir en los programas rars
#     Autor: ObiJuan (con adiciones y comentarios de Javier Macías del Campo)
#     Fecha: 09/11/2024

	.eqv PRINT_INT    1
	.eqv PRINT_INT_U  36
	.eqv READ_INT     5
	.eqv PRINT_STRING 4
	.eqv READ_STRING  8
	.eqv PRINT_CHAR   11
	.eqv READ_CHAR    12
	.eqv EXIT         10

Autores

  • Miguel Ángel de Miguel
  • Javier Macías

Licencia

Enlaces

Página principal


Sesiones de Prácticas

P1: Simulador RARs

L1: El simulador RARs
L2: Calculando expresiones
L3: Práctica 1-3. Variables

P2: E/S mapeada. Llamadas al sistema

L4: Pract 2-1. E/S mapeada
L5: Práctica 2-2: Inst. ecall
L6: Prác 2-3: Cadenas

P3: Bucles y Saltos condicionales

L7: Práct 3-1: Bucles y saltos
L8: Práct 3-2: Cadenas II

P4: Subrutinas

L9: Pract 4-1: Subrut. Nivel-1
L10: Pract 4-2: La pila
L11: Pract 4-3: Recursividad

P5: Memoria Dinámica

L12: Pract 5-1. Heap. Listas

VÍDEO DE DESPEDIDA

SESIONES ADICIONALES

L13: RV32I: Resto de instrucciones
L14: Macros
L15: Entrada/Salida a bajo nivel
L16: Multiplicaciones/divisiones. Unit Tests 🚧
L17: Biblioteca stdio: salida a alto nivel 🚧
Los registros de estado y control (CSR)
Interrupciones y excepciones
Borrador

SOLUCIONES

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

Ejercicios de examen

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
GISAM. Parcial 2. 2025-Nov-19
GISAM. Parcial 3. 2026-Enero-9
GISAM. Parcial 1. 2026-Oct-21
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
TELECO. Parcial 2. 2025-Nov-13
TELECO. Parcial 3. 2026-Ene-21
TELECO. Extra. 2026-Jun-25
TELECO. Parcial 1. 2026-Oct-09
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
Robótica. Parcial 1. 2026-Feb-23
Robótica. Parcial 2. 2026-Abr-13
Robótica. Parcial 3. 2026-May-11
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
Datos. Parcial 2. 2025-Nov-19

Clone this wiki locally