INF1018 - Software Básico

Variáveis Locais

  1. Codifique a função novonum abaixo em assembly.
    int novonum(void) {
      int minhalocal;
      printf("numero: ");
      scanf("%d",&minhalocal);
      return minhalocal;
    }
    
    Teste sua função com a main mostrada abaixo:
    #include <stdio.h>
    int novonum(void);
    
    int main (void) {
      printf ("%d\n", novonum());
      return 0;
    }
    
  2. Crie um arquivo ex2.c com o código abaixo, compile-o e o execute, verificando seu resultado.
    #include <stdio.h>
    int addl (int a[], int n) {
      int i;
      int s = 0;
      for (i=0; i<n; i++)
        s += a[i];
      return s;
    }
    
    int bemboba (int num) {
      int local[4];
      int *a;
      int i;
    
      for (i=0,a=local;i<4;i++) {
        *a = num;
        a++;
      }
      return addl (local, 4);
    }
    
    int main (void) {
      printf ("%d\n", bemboba (5));
      return 0;
    }
    
    Traduza agora a função bemboba para assembly, criando um arquivo bemboba.s.

    Lembre-se que você não precisa alocar na pilha todas as variáveis locais, apenas as que não podem ser alocadas em registradores...

    Substitua em ex2.c a função bemboba por seu protótipo, e crie um novo executável ex2, que reune os dois módulos:

    gcc -Wall -o ex2 ex2.c bemboba.s
    
    Teste o seu novo programa, comparando seu resultado com o obtido anteriormente.