0% encontró este documento útil (0 votos)
34 vistas5 páginas

Normas y Ejercicios Parcial Computación UBA

Cargado por

Yami Morales
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas5 páginas

Normas y Ejercicios Parcial Computación UBA

Cargado por

Yami Morales
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Organización del Computador II - Departamento de Computación - UBA

Primer Parcial
Segundo Cuatrimestre 2022

Normas generales
- El parcial es INDIVIDUAL

- Una vez terminada la evaluación se deberá completar un formulario con el hash del commit del
repositorio de entrega. El link al mismo es: https://forms.gle/NGw8EvZD3KeAfXEw9.

- Luego de la entrega habrá una instancia coloquial de defensa del trabajo

Régimen de Aprobación
- Para aprobar el examen es necesario obtener cómo mínimo 60 puntos.

- Para conservar la posibilidad de promocionar es condición necesaria obtener como mínimo 80


puntos.

Compilación y Testeo
El archivo main.c es para que ustedes realicen pruebas básicas de sus funciones. Sientanse a gusto
de manejarlo como crean conveniente. Para compilar el código y poder correr las pruebas cortas
implementadas en main deberá ejecutar make main y luego ./runMain.sh.
En cambio, para compilar el código y correr las pruebas intensivas deberá ejecutar ./runTester.sh.
El programa puede correrse con ./runMain.sh para verificar que no se pierde memoria ni se realizan
accesos incorrectos a la misma.

Pruebas intensivas (Testing)


Entregamos también una serie de tests o pruebas intensivas para que pueda verificarse el buen funcio-
namiento del código de manera automática. Para correr el testing se debe ejecutar ./runTester.sh,
que compilará el tester y correrá todos los tests de la cátedra. Luego de cada test, el script comparará
los archivos generados por su parcial con las soluciones correctas provistas por la cátedra. También
será probada la correcta administración de la memoria dinámica.

Ej. 1 - (45 puntos)


Datos:
- Estructura msg_t:
Implementa un tipo de dato asociado a un mensaje etiquetado. Se encuentra definida en ej1.h.
El mismo contiene un campo con el texto del mensaje, un campo con la longitud de dicho texto (sin
el caracter nulo) y finalmente la etiqueta o tag del mensaje en cuestión representada por un número
entre 0 y MAX_TAGS-1. En C:

1
typedef struct msg{
char* text;
size_t text_len;
int tag;
} msg_t;

Finalmente, como restricción para la entrega, deberán incluir la solución completa en el archivo
ej1.asm, es decir su solución debe estar totalmente contenida en este archivo.
Aunque se evaluará sólo la implementación en asm, se sugiere realizar previamente la implemen-
tación en C, en este caso, la misma deberá estar en ej1.c.
Para seleccionar qué implementación se testeará con ./runTester.sh pueden modificar la cons-
tante USE_ASM_IMPL en el archivo ej1.h. Por ejemplo para testear la implementación en asm deberá
estar definida:

#define USE_ASM_IMPL 1

Y para testear con la implementación en C (función agrupar_c), definir:

#define USE_ASM_IMPL 0

Se pide:
Implementar la siguiente función en asm:

char** agrupar(msg_t *msgArr, size_t msgArr_len);

La misma devuelve un arreglo de una longitud igual al número máximo de etiquetas definido, donde
cada posición del array contiene un string de C con la concatenación del texto de todos los mensajes
de la misma etiqueta o tag. Por ejemplo:

2
Ej. 2 - (30 puntos)
En este ejercicio van a programar un filtro que se aplica a un archivo de audio en formato WAV. Este
es un formato PCM signed de 16 bits donde el canal izquierdo y el derecho vienen alternados de la
siguiente manera:

El filtro tiene que cumplir lo siguiente para cada canal:

yn = 1/4(xn + xn+1 + xn+2 + xn+3 ) (1)


n+3
X
= 1/4( xi ), (2)
i=n

donde:

• x[n] es la señal de entrada en la posición n y para cada canal

3
• y [n] es la señal de salida en la posición n y para cada canal

O de manera gráfica:

Notar que:

• En caso de que el resultado no sea entero, este debe ser truncado.

• Además si N es la longitud de la entrada en cantidad de datos (1 dato = 4 bytes teniendo en


cuenta ambos canales), siempre se va a cumplir que N=4*k+3, siendo k un entero mayor a cero

• Este ejercicio debe realizarse utilizando el paradigma de programación SIMD, en caso contrario
será considerado incorrecto.

4
Preguntas teóricas - (25 puntos)
Tema 1
a Explicar cómo es que en el arranque el procesador x86 accede a la dirección física 0xFFFFFFF0,
a partir de los valores de los registros que intervienen en la determinación de su dirección física,
y si el procesador está en Modo Real.

b Dados dos registros SIMD que tienen los siguientes valores:

3892 F145 DEDA A164


532F 1768 E234 94BA

indicar cuánto valen las sumas con aritmética de desborde y con aritmética saturada con y sin
signo si cada paquete es de 16 bits.

También podría gustarte