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 foo1 (int a[], int tam) {
  return foo (a, 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\nfoo1(a) == %d\n", foo(a,4), foo1(a,4));
    return 0;
}
  1. Troque a função foo1 por uma função foo1 escrita em assembly (em outro arquivo), cuja implementação seja a tradução de foo para assembly.
  2. Agora escreva a main em assembly. (a função main é como outra função qualquer!)