INF1018 - Software Básico

Aulas de Laboratório

Funções em Assembly

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

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

    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 main (void) {
       printf("%d\n", add(4,5));
       return 0;
    }
    
    Compile os dois arquivos juntos (algo como gcc -Wall -m32 -o prog add.s main.c; o gcc se encarrega de ligá-los) e execute o resultado.
  2. Modifique a função para retornar a soma de três parâmetros int. Modifique sua main para testar a nova função.

  3. Traduza para assembler a função C add1 mostrada abaixo:

    int add1 (int *a, int n) {
      int i;
      int s = 0;
      for (i=0; i<n; i++) s += *a++;
      return s;
    }
    
    Modifique sua main para testar essa nova função.
  4. Traduza para assembler a função C foo mostrada abaixo.
    (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;
        }
      }
    }
    
    Modifique sua main para testar essa nova função.
  5. Codifique a função fat, com a definição abaixo, em 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);
    }