Considere o programa C abaixo:
#include <stdio.h>
int calcula (int a[], int tam) {
int i = 0;
int acc = 0;
for (i=0; i<tam; i++)
acc += a[i];
return acc;
}
int foo (int a[], int tam) {
int i;
int b[tam];
for (i = 0; i<tam; i++)
b[i] = calcula (&(a[i]), tam-i);
return calcula (b, tam);
}
int main (void) {
int i;
int a[4];
for (i=0;i<4;i++) {
printf ("valor de a[%d]? ",i);
scanf ("%d", &a[i]);
}
printf ("foo(a) = %d\n", foo(a,4));
return 0;
}
Compile-o e o execute, verificando seu resultado.
Traduza agora a função foo
para assembly, criando um
arquivo foo.s
.
Sua tradução deve ser a mais direta possível
(ou seja, você deve traduzir corretamente as operações de indexação!)
Substitua no módulo C a função foo
por seu protótipo,
crie um novo executável com os dois módulos e teste o programa,
comparando seu resultado com o obtido anteriormente.