INF1018 - Software Básico

Funções: parâmetros e registro de ativação

  1. Traduza para assembly a função add a seguir, criando um arquivo add.s.

    int add (int a, int b, int c) {
      return a+b+c;
    }
    

    Escreva agora, em C, uma função main que chame essa função add. Por exemplo,

    #include <stdio.h>
    
    int add (int a, int b, int c);
    
    int main (void) {
       printf("%d\n", add(1,2,3));
       return 0;
    }
    
    Compile os dois arquivos juntos (algo como gcc -Wall -no-pie -o prog add.s main.c) e execute o resultado.
  2. Traduza a função fat abaixo para assembly. Teste-a com uma função main escrita em C.

    int fat (int n) {
      if (n==0) return 1;
      else return n*fat(n-1);
    }
    

  3. Traduza para assembly a função foo mostrada abaixo.

    Atenção: a sua tradução deverá representar a indexação do array a!

    void foo (int a[], int n) {
      int i;
      int s = 0;
      for (i=0; i<n; i++) {
        s += a[i];
        if (a[i] == 0) {
          a[i] = s;
          s = 0;
        }
      }
    }
    
    Crie agora um arquivo C com uma função main que chame foo, compile os dois módulos juntos e execute o resultado, verificando se a saída do programa está correta!!!