Repository navigation
Examen: Parcial 2:2024_11_13: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
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
- 8 preguntas tipo test
- Las respuesats incorrectas restan un 33% del valor de la pregunta
- Solución disponible en Aula virtual
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.
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
ecallEste 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- Miguel Ángel de Miguel
- Javier Macías


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
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 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
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