Ensamblador - tarea01 arqcomp udec 01-2008

 
Vista:

tarea01 arqcomp udec 01-2008

Publicado por Jaime Parada (1 intervención) el 08/04/2008 02:43:54
Necesito ayuda en lo siguiente:

Arquitectura de Computadores
543.426
Tarea No. 1
Resuelva los siguientes problemas utilizando la convención estándar de uso de
registros MIPS (temporales, argumentos, valores de retorno, etc.).
Nota importante: Todos los ejercicios solicitan escribir funciones. La idea es
que estas funciones puedan ser usadas desde cualquier programa u otra función.
No se está solicitando un programa principal, ni impresión de resultados en
pantalla, ni nada adicional. Sólo la función. Aparte de entregar el informe, se debe
enviar un archivo de texto con el código assembly de las funciones a la dirección
[email protected].
1. (10 puntos) Escriba una función en assembly MIPS “str_inv” que invierte el
contenido de un string. La función debe además retornar el número de caracteres
del string. Utilice el siguiente código C como referencia (no utilice un algoritmo
distinto).

int str_inv (char *s)
{
int cnt = 0;
char tmp;
char *end;
char *start = s;
while (*s != 0) {
s++;
cnt++;
}
end = s – 1;
while (start < end) {
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
return cnt;
}

2. (10 puntos) Modifique el código anterior para escribir una función en assembly
MIPS “str_pal” que determine si un string es palíndrome (se lee igual de derecha
a izquierda que de izquierda a derecha). La idea es escribir una nueva función, no
invertir el string primero y luego compararlo con el original.

3. (10 puntos) El algoritmo bubblesort ordena un vector de enteros recorriendo el
vector y comparando pares de elementos adyacentes, invirtiendo su orden si es
necesario. Repitiendo este proceso el número necesario de veces, el vector queda
ordenado. Escriba una función en assembly MIPS que ordene un vector usando el
siguiente código C como referencia.

void bsort (int v[], int n)
{
int i, j, tmp;
for (j = 0; j < n; j++) {
for (i = 0; i < n – 1; i++) {
if (v[i] > v[i+1]) {
tmp = v[i];
v[i] = v[i+1];
v[i+1] = tmp;
}
}
}
}

4. (10 puntos) La siguiente función en C toma dos vectores de n elementos, los
ordena y luego los mezcla en un vector ordenado de 2n elementos. Implemente la
función en assembly MIPS invocando la función “bsort” del ejercicio anterior.

void merge (int v1[], int v2[], int v3[], int n)
{
int i, j, k;
bsort(v1, n);
bsort(v2, n);
j = 0;
k = 0;
for (i = 0; i < n; i++) {
while( (j < n) && (v2[j] < v1[i]) {
v3[k] = v2[j];
j++;
k++;
}
v3[k] = v1[i];
k++;
}
}

Entregar un informe escrito (en computador) con el código debidamente comentado y las
explicaciones correspondientes. Plazo máximo de entrega: Miércoles 9 de Abril hasta las
18 horas en Secretaría de Electrónica. No se corregirán tareas atrasadas.
Se debe trabajar en grupos de 2 personas. Grupos de 1 persona son permitidos pero no
recomendados. No se permitirán grupos de más de 2 personas. Se les recuerda que
cualquier copia (entre tareas o de fuentes externas) resultarán en calificación 1 para todas
las tareas involucradas.

En especial ayuda en el problema 4... (ojo q requiere del 3, pero solo basta con invocar).
Obviamente he avanzado, en realidad faltan el 3 y el 4.

Espero su colaboración lo antes posible, solo eso.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder