Home UC3M
Home IT


Fundamentos de Ordenadores 2

Febrero-Junio 2006

Arq. Ord.

Práctica 3: Examen de septiembre de 2005

Fecha de entrega: 19 de mayo de 2006


Página de entrega:http://www.it.uc3m.es/luis/fo2/p3/submit.html


1. Introducción

El enunciado de esta práctica está extraido del examen de la convocatoria de septiembre de 2005. El tiempo estimado para la solución es entre una hora y media y dos horas. Se deben entregar dos ficheros con nombres checkRow.s y checkSquare.s (del que se ofrece su estructura básica) que contengan las subrutinas compruebaFila y compruebaCuadrado respectivamente.

Para comprobar que la implementación de las rutinas es correcta se debe utilizar el fichero sudoku.s. En él se ejecutan un conjunto de pruebas. El ejecutable se obtiene mediante el siguiente comando:

gcc -o sudoku sudoku.s checkRow.s checkSquare.s

Si la ejecución es correcta el programa debe imprimir el mensaje:

Ejecución aparentemente correcta

2. Comprobación de un tablero de Sudoku

El Sudoku es un puzzle de números basado en una matriz de 9x9. La única regla para su solución es que en cada fila, cada columna y cada uno de los 9 cuadrados de 3x3 sólo pueden aparecer las cifras del 1 al 9 una sola vez. La siguiente figura muestra un ejemplo de Sudoku ya resuelto.

Se puede comprobar que cada fila, columna y cuadrado de 3x3 incluye los dígitos del 1 al 9 sin repetición. En el programa que comprueba la solución del puzzle la matriz de números enteros está almacenada por filas. Se necesitan implementar las siguientes subrutinas en ensamblador:

  1. (20 puntos) Rutina compruebaFila: Recibe como parámetros a través de la pila en posiciones ascendentes de memoria la dirección de comienzo de una fila de la solución y la dirección de comienzo de una tabla de 9 enteros inicialmente a cero. La rutina devuelve a través de la pila el entero 1 si la fila cumple el requisito de la solución, un 0 si no lo cumple, y un -1 si tiene valores incorrectos (menor que 1 o mayor que 9). La siguiente figura muestra cómo se almacenan los parámetros y el espacio para el resultado en la pila justo antes de la llamada a esta subrutina.

    La tabla de 9 enteros inicializados a cero se puede utilizar y modificar sus valores para comprobar las veces que aparece cada dígito. La solución debe realizar la comprobación utilizando un bucle.

    Además, se ha implementado previamente la rutina todoIgual que recibe como parámetro la dirección de una tabla con nueve enteros y devuelve a través del registro %eax el valor 1 si todos los elementos de la tabla son idénticos y 0 en caso contrario. La rutina compruebaFila puede contar las apariciones de cada dígito utilizando la tabla auxiliar y utilizar esta función para comprobar que todos aparecen el mismo número de veces.

  2. (20 puntos) Rutina compruebaCuadrado: Recibe como parámetros la dirección del número que está en la esquina superior izquierda del cuadrado y la dirección de una tabla de 9 enteros todos ellos inicializados a cero. Devuelve en el registro %eax el valor 1 si el cuadrado es correcto y cero en caso contrario. No realiza ninguna otra comprobación de los valores numéricos de la solución. La siguiente figura ilustra cómo están almacenados los parámetros en la pila con respecto a un cuadrado de 3x3 enteros.


© Universidad Carlos III de MadridCreative Commons License
Material bajo licencia Creative Commons .
Última modificación: