UC3M
Fundamentos de Ordenadores II - Examen Septiembre 04
Ingeniero de Telecomunicación
 
Depto. de Ingeniería Telemática 
Universidad Carlos III de Madrid

 2ª Parte: Problemas

Duración: 2 horas 30 minutos 
Puntuación:  76 puntos (sobre 100)
Fecha: 22 de septiembre de 2004
Nota: Se podrán usar libros, apuntes y calculadora. 


Requisitos para aprobar el examen:
  1. Nota en el examen >= 50 puntos
  2. Nota del problema 1 >= 10 puntos
  3. Nota del problema 2 >= 9 puntos

PARTE 1: NIVEL DE MÁQUINA CONVENCIONAL

PROBLEMA 1(40 puntos)

La empresa VideoStream S.A. diseña un programa en ensamblador que procesa secuencias de bytes. Dichas secuencias almacenan una señal de vídeo, tienen una longitud variable y terminan siempre con un byte cuyo valor es 0 (los bytes de la secuencia son todos diferentes a cero).

La empresa quiere diseñar dos rutinas para detectar y reemplazar los lugares en una secuencia en los que aparecen cuatro bytes consecutivos con determinados valores numéricos. La siguiente figura muestra un ejemplo de una secuencia de bytes en la que se encuentra un patrón formado por los bytes consecutivos con valores v1, v2, v3 y v4.

Secuencia de Bytes

Se pide escribir el código ensamblador para las siguientes rutinas:

Se require que el código esté perfectamente documentado. Una solución sin comentarios se considerará incorrecta. Se valorará la eficiencia en la ejecución de la solución propuesta.

PARTE 2: FUNCIONAMIENTO INTERNO DEL ORDENADOR

PROBLEMA 2 (36 puntos)

En este ejercicio vamos a implementar una instrucción que haga lo siguiente: "Intercambia el contenido de la palabra de memoria cuya dirección es (CD), siendo CD un campo de la instrucción, con el contenido de la palabra de memoria cuya dirección es (CD) + 1". Al terminar de ejecutarse esta instrucción el contenido del acumulador debe de ser el mismo que el que había justo antes de empezar a ejecutarse la instrucción.

En este problema se considera que el formato de instrucciones es el mismo que en Símplez original y que la temporización de la Memoria Principal es idéntica a la de Símplez original.

Para implementar esta instrucción se propone utilizar 2 rutas de datos distintas, cuyo esquema se presenta en hojas adjuntas. A continuación se describen estas 2 rutas de datos.

La primera ruta de datos, que llamaremos SímplezSep04R1 se diferencia de la ruta de datos original de Símplez exclusivamente en lo siguiente:

La segunda ruta de datos, que llamaremos SímplezSep04R2 se diferencia de la ruta de datos original de Símplez exclusivamente en lo siguiente:

Se pide:

  1. (8 puntos) Razone si en el caso de que la microorden inra incrementase el contenido de RA en el flanco de bajada del reloj, en vez de en el de subida, la instrucción pedida se podría ejecutar en el mismo número de ciclos de reloj, en menos o requeriría más ciclos de reloj (para ambas rutas de datos).

    Solución:

    Si la microorden inra incrementase el contenido de RA en el flanco de bajada, cuando se activase inra se incrementaría el contenido de RA al final del ciclo, por lo que en el siguiente ciclo de reloj no sería posible realizar un acceso a Memoria Principal, ya que la temporización de la Memoria Principal exige que la dirección a la que se va a acceder esté en RA un tiempo antes de realizar el acceso. Por lo tanto, en este supuesto se necesitaría un ciclo de reloj adicional.

  2. (28 puntos) Para cada una de las rutas de datos propuestas escriba un cronograma que permita ejecutar la nueva instrucción que se ha descrito en este ejercicio. Para ello, escriba una tabla del estilo de la que se presenta a continuación, en la que se indica que microórdenes estarían activas en cada ciclo de reloj:

    Ciclo de relojMicroórdenes
    1lec, eri, incp
    2...
    ......

    Nota: se penalizará, para cada ruta de datos, con 2 puntos cada acceso a Memoria Principal utilizado por encima del mínimo y con 1 punto cada ciclo de reloj por encima del mínimo.

    Solución:

    SímplezSep04R1

    Ciclo de relojMicroórdenes
    1lec, eri, incp
    2sri, era, sac, eaux2
    3lec, eaux1
    4inra, tra2, eac
    5lec, eaux1
    6-
    7sac, esc
    8sac, sri, era, tra2, eac
    9sac, esc
    10sac, rs, tra2, eac, scp, era

    SímplezSep04R2

    Nota: Activar eaux1 y eaux2 simultáneamente en el mismo ciclo de reloj no lleva el dato disponible en ese momento en el bus de datos a AUX2 porque el retardo que se produce desde que se carga el dato en AUX1 hasta que ese dato está disponible a la salida de AUX1 más el retardo de propagación de la salida de AUX1 a la entrada de AUX2 es muy superior a la duración del flanco de bajada del reloj (teóricamente igual a 0, en la práctica de duración despreciable). Por el contrario, si se activan esas 2 microórdenes lo que ocurre es que el dato que había en AUX1 antes del flanco de bajada del reloj pasa a AUX2 y el dato en el bus de datos pasa a AUX1.

    Ciclo de relojMicroórdenes
    1lec, eri, incp
    2sri, era
    3lec, eaux1
    4inra, eaux2
    5lec, eaux1
    6sac, eaux1, eaux2, tra2, eac
    7sac, esc
    8sac, sri, era, eaux2, tra2, eac
    9sac, esc
    10sac, tra2, eac, scp, era