INF1018 - Software Básico

Variáveis Locais - Exercício extra

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.