INF1018 - Software Básico - 2010.2

Aulas de Laboratório

Instruções de Ponto Flutuante em Assembler

Reescreva as funções abaixo em assembler. Teste seus resultados.
  1. float foo (double a, float b) {
      return (a+b)*(a-b);
    }
    
  2. float foo1 (float a, float b) {
      return sin(a) + b;
    }
    

    Observação 1: não use as operações de seno/coseno do coprocessador. Chame explicitamente as funções sin/cos quando necessário. Lembre-se que o argumento dessas funções é um double. Para gerar seu programa executável, utilize:

    gcc -Wall -lm ...
    
    (a opção '-lm' é para incluir a biblioteca matemática na ligação)

  3. double foo2 (float a, float b) {
      return sin(a) + cos(b);
    }
    
    (Dica: use um espaço na pilha para guardar o resultado da primeira chamada de função.)
  4. double foo3 (double *a, int n) {
      int i;
      double r = 0.0;
      for (i=0; i<n; i++)
        r += sin(a[i]);
      return r;
    }