![]() |
|
Duración: | 3 horas |
Puntuación: | 80 puntos (sobre 100) |
Fecha: | 24 de junio de 2005 |
Nota: | Se podrán usar libros, apuntes y calculadora. |
Cada elemento consta de la dirección en la que está almacenado el nombre seguido de los 8 bytes en little endian de la clave.
Se quiere diseñar un programa para comprobar el acceso de usuarios a la aplicación. Para ello es preciso escribir el código ensamblador de las siguientes subrutinas:
(10 puntos) Rutina comparar
: Recibe como parámetros a
través de la pila las direcciones de comienzo de dos strings. Devuelve
también a través de la pila el número 0 si ambos strings son idénticos
(letra a letra) y 1 en el caso de que sean diferentes. La rutina debe
comprobar si alguno de los parámetros tiene el valor cero, en cuyo caso
se devuelve directamente el valor 0 como resultado sin efectuar
comparación alguna.
(30 puntos) Rutina busca
: Recibe como parámetros a través
de la pila en posiciones ascendentes de memoria la
dirección base de la tabla de usuarios, el número de entradas en dicha
tabla, la dirección del string con el nombre introducido por el
usuario, y los 32 bits de menos peso seguidos de los 32 bits de más peso
de la clave introducida. La siguiente figura muestra cómo se almacenan estos
parámetros en la pila.
La rutina busca si en la tabla de usuarios (primer parámetro) existe un
usuario cuyo nombre y clave sean idénticos a los dados (tercer y cuarto
parámetros). La rutina devuelve el resultado a través del registro
%eax
. Si existe un elemento con nombre de usuario y clave
idénticos a los dados devuelve el índice de dicho elemento (la tabla
comienza por el índice cero). Si no hay elemento alguno que tenga
nombre de usuario y clave idénticos se devuelve el número -1. Para
comparar los nombres de usuarios se debe utilizar la rutina
comparar
del apartado anterior.
Notas (aplicables a ambos apartados):
Se require que el código esté perfectamente documentado. Una solución sin comentarios se considerará incorrecta.
Se supone que no hay 2 usuarios con el mismo login.
PROBLEMA 2 (24 puntos)
En este ejercicio vamos a trabajar con un ordenador que llamaremos SímplezJun05. El formato de instrucciones de SímplezJun05 se representa en la figura 1.
![]() |
Figura 1: Formato de instrucciones de SímplezJun05 |
Como indica la figura 1 las instrucciones de SímplezJun05 pueden ocupar una palabra o 2 de Memoria Principal. La primera palabra contiene el Código de Operación (campo CO) en los 3 bits más significativos y el campo CD (en los 9 bits siguientes), que hace referencia a una palabra de Memoria Principal utilizada por la instrucción.
En aquellas instrucciones que ocupan 2 palabras de Memoria Principal, en la segunda palabra solamente se consideran los 9 bits menos significativos, que identificaremos como campo CD2, que contiene la dirección de una segunda palabra de Memoria Principal utilizadas por la instrucción. La Memoria Principal de SímplezJun05 es idéntica a la de Símplez, es decir, de 512 palabras de 12 bits. La temporización de la Memoria Principal es idéntica a la de Símplez.
En hoja adjunta se presenta la ruta de datos de SímplezJun05. Esta ruta de datos es idéntica a la de Símplez excepto en que aparece un nuevo registro (CD2), que se utilizará para guardar el campo CD2 de una instrucción cuando sea necesario. Este registro tiene una entrada de carga (eri2). Asimismo, el dato contenido en el registro CD2 puede ser llevado al bus Ai activando la microorden sri2.
Se pide:
(12 puntos) Se desea implementar sobre esta ruta de datos una instrucción (que ocupa 2 palabras de Memoria Principal) que haga lo siguiente: suma el contenido del Acumulador con la palabra de Memoria Principal cuya dirección se indica en el campo CD de la instrucción, dejando el resultado en dicha palabra de Memoria Principal. Al final de la ejecución de la instrucción el contenido del Acumulador debe ser el mismo que había justo antes de comenzar la ejecución de dicha instrucción. El campo CD2 se utiliza para identificar la dirección de una palabra de Memoria Principal auxiliar en la que se puede guardar un dato temporalmente. En otras palabras, el contenido de esta segunda palabra de Memoria Principal puede ser modificado libremente, sin que haya que conservar su valor inicial. Dibuje un cronograma que implemente la instrucción pedida.
(12 puntos) Se desea implementar una instrucción (que ocupa 2 palabras de Memoria Principal) que haga lo siguiente: intercambia el contenido de las dos palabras de Memoria Principal cuyas direcciones están en los campos CD y CD2 de la instrucción. Al final de la ejecución de la instrucción el contenido del Acumulador debe ser el mismo que había justo antes de comenzar la ejecución de dicha instrucción. Se observa que no es posible implementar esta instrucción sobre la ruta de datos de SímplezJun05. Indique que modificaciones habría que hacer sobre dicha ruta de datos para poder implementar esta instrucción. Dibuje las modificaciones sobre la ruta de datos de SímplezJun05. Razone la respuesta.
PROBLEMA 3 (16 puntos)
Considere el secuenciador microprogramado de Símplez en el que se modifica el contenido de la memoria de control de la forma siguiente. En la microinstrucción correspondiente a I0 eliminamos incp. En todas las microinstrucciones correspondientes a I1 menos las de BR, BZ y HALT añadimos incp. Se ejecuta el programa que se presenta en la tabla 1 (inicialmente el contenido de la palabra de dirección 10 es 20 y el de la palabra de dirección 11 es 6). Al terminar la ejecución (es decir, cuando se alcanza la instrucción HALT) se consulta el valor de la palabra de Memoria Principal de dirección 11 y se observa que el valor almacenado es un 4.
Escriba la secuencia de instrucciones que se ejecutan. Indique de forma detallada lo que vaya ocurriendo en cada instrucción. ¿Cuál sería el contenido de la palabra de dirección 10 al finalizar la ejecución?
[0] CLR [1] LD /11 [2] BZ /9 [3] DEC [4] ST /11 [5] LD /10 [6] DEC [7] ST /10 [8] BR /1 [9] HALT |