Skip to content

Examen: 2020_06_01:Robótica

Juan Gonzalez-Gomez edited this page Jun 1, 2020 · 2 revisions

Examen convocatoria ordinaria: 2020-06-01. Ingeniería en Robótica Software

  • Tiempo: 1:30h
  • Descripción: Examen del Laboratorio del grado de Ingeniería en Robótica Software. Convocatoria ordinaria
  • Fecha: 2020/Junio/01

Contenido

Enunciado

Solución comentada

(Por hacer)

Solución

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 cuatro ficheros de una posible solución:

  • Fichero replace.s
	.globl replace
	
	.text

#-------------------------------------------
#-- replace(pcad, c_org, c_remp)
#--   Funcion para reemplazar el caracter c_orig por c_remp en la cadena
#--   apuntada por pcad
#--
#-- ENTRADAS:
#--   * a0: pcad: Puntero a la cadena
#--   * a1: c_org: caracter original 
#--   * a2: c_remp: Caracter a reemplazar
#..
#-- SALIDAS:
#--   Ninguna
#------------------------------------------
replace:
	
	#-- Es una funcion hoja: no hay que guardar la direccion 
	#-- de retorno: no es necesario guardar ra en la pila
	#-- Tampoco necesitamos la pila para otra cosa
	
        #-- Leer siguiente caracter
next:
	lb t0, 0(a0)
	
	#-- Es el final de la cadena?
	beq t0, zero, fin  # Si --> Terminar
	
	#-- Es el caracter igual al original?
	bne t0, a1, incrementar #-- No, pasar al sigueinte
	
	#-- Si, reemplazarlo por el nuevo
	sb a2, 0(a0)
	
	
incrementar:	
	#-- NO: apuntar al siguiente caracter
	addi a0, a0, 1
	
	#-- Repetir bucle
	b next	
	
fin:
	ret
  • Fichero test_replace.s
#-------------------------------------------------------------------
#-- test_replace.s:  Programa para probar la funcion replace  
#-------------------------------------------------------------------

	# -- Servicios del sistema operativo
	.eqv PRINTSTRING 4
	.eqv EXIT 10
			
	
	.data
	
	#-- Cadenas de pruebas
 test1: .string "=== Prueba 1 ===\n"
 test2: .string "Abracadabra\n"
 
	.text
	
	#-- Imprimir la primera cadena de prueba
	la a0, test1
	li a7, PRINTSTRING
	ecall
	
	#-- Reemplazar los caracteres '=' por '*'
	li a1, '='
	li a2, '*'
	jal replace
	
	#-- Imprimir la cadena reemplazada
	la a0, test1
	li a7, PRINTSTRING
	ecall
	
	#--------- Prueba con la segunda cadena
	#-- Imprimir la cadena reemplazada
	la a0, test2
	li a7, PRINTSTRING
	ecall
	
	#-- Reemplazar las aes por '-'
	li a1, 'a'
	li a2, '-'
	jal replace
	
	#-- Imprimir la cadena reemplazada
	la a0, test2
	li a7, PRINTSTRING
	ecall
	
	#-- Exit
	li a7, 10
	ecall
  • Fichero replace_vowels.s
	.globl replace_vowels
	
	.text

#-------------------------------
#- replace_vowels(pcad, car)
#-  pcad: a0: Puntero a la cadena a sustituir las vocales
#-  car:  a1: Caracter a usar de reemplazo para TODAS las volcales	
#------------------------------
	
replace_vowels:	

	#-- Se trata de una funcion intermedia
	#-- Es necesario usar la pila para guardar la direccion de retorno
	addi sp, sp, -16
	
	#-- Guardar la direcion de retorno
	sw ra, 12(sp)
	

	#-- Guardamos en la pila el puntero a la cadena
	#-- y el caracter. Es necesario para NO violar el 
	#-- convenio, ya que al llamar a una función los  
	#-- perdemos
	sw a0, 0(sp)  #-- Posicion 0: Puntero a la cadena
	sw a1, 4(sp)  #-- Posicion 4: Caracter

	#-- Ahora solo tenemos que llamar consecutivamente a las funciones de
	#-- replace para sustituir cada vocal por el caractere de reemplazo:
	#--
	#-- replace(pcad, 'a', car)
	#-- replace(pcad, 'e', car)
	#-- replace(pcad, 'i', car)
	#-- repalce(pcad, 'o', car)
	#-- replace(pcad, 'u', car)
	
	#-- Para no violar el convenio, los valores de
	#-- a0 y a2 (pcad, y car) los leemos de la pila


	#------------ Reemplazar la vocal a
	lw a0, 0(sp)  # a0: puntero a la cadena
	li a1, 'a'    # 
	lw a2, 4(sp)  # a2: Caracter de reemplazo
	jal replace 
	
	#------------ Reemplazar la vocal e
	lw a0, 0(sp)  # a0: puntero a la cadena
	li a1, 'e'    # 
	lw a2, 4(sp)  # a2: Caracter de reemplazo
	jal replace 
	
	#------------ Reemplazar la vocal i
	lw a0, 0(sp)  # a0: puntero a la cadena
	li a1, 'i'    # 
	lw a2, 4(sp)  # a2: Caracter de reemplazo
	jal replace
	
	#------------ Reemplazar la vocal o
	lw a0, 0(sp)  # a0: puntero a la cadena
	li a1, 'o'    # 
	lw a2, 4(sp)  # a2: Caracter de reemplazo
	jal replace
	
	#------------ Reemplazar la vocal u
	lw a0, 0(sp)  # a0: puntero a la cadena
	li a1, 'u'    # 
	lw a2, 4(sp)  # a2: Caracter de reemplazo
	jal replace
	
	
	#-- Recuperar la direccion de retorno
	lw ra,12(sp)
	
	#-- Recuperar la pila
	addi sp, sp, 16
	
	ret
  • Fichero: main.s
	# -- Servicios del sistema operativo
	.eqv PRINTSTRING 4
	.eqv EXIT 10
			
	
	.data
	
	#-- Cadenas de prueba
	
 cad1:   .string "===> a e i o u <===\n"	
 cad2:   .string "Cuando Fernando Septimo usaba paleto\n"
 

	.text
	
	#------------- TEST 1	
	# -- Imprimir la cadena original
	la a0, cad1
	li a7, PRINTSTRING
	ecall
	
	# -- Lllamar a replace_vowels
	la a0, cad1
	li a1, '*'
	jal replace_vowels
	
	# -- Imprimir la cadena reemplazada
	la a0, cad1
	li a7, PRINTSTRING
	ecall
	
	#--------------- TEST 2
	# -- Imprimir la cadena original
	la a0, cad2
	li a7, PRINTSTRING
	ecall
	
	# -- Lllamar a replace_vowels
	la a0, cad2
	li a1, 'a'
	jal replace_vowels
	
	# -- Imprimir la cadena reemplazada
	la a0, cad2
	li a7, PRINTSTRING
	ecall
	
	#-- Exit
	li a7, 10
	ecall

Autores

Licencia

Enlaces

Página principal


Sesiones de Prácticas

P1: Simulador RARs

L1: Práctica 1-1. RARs
L2: Práctica 1-2. Ensamblador
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

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

SOLUCIONES

Práctica 1: Sesiones 1,2 y 3
Práctica 2: Sesiones 4, 5 y 6
Práctica 3: Sesiones 7 y 8
Práctica 4: Sesiones 9, 10 y 11
Práctica 5: Sesión 12

Clone this wiki locally