INF1018 - Software Básico

Aulas de Laboratório

Aula 6 - Funções em Assembler

  1. Considere o arquivo abaixo:

    .text
    
    .global	add
    add:	push	%ebp
    	mov	%esp, %ebp
    
    	mov	8(%ebp), %eax
    	add	12(%ebp), %eax
    
    	mov	%ebp, %esp
    	pop	%ebp
    	ret
    
    Esse arquivo define uma função add, equivalente a definição em C int add (int a, int b) { return a+b; }

    Escreva, 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 programas juntos (algo como gcc -Wall -o lab7 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. Escreva, em assembler, uma função len, que retorne o comprimento de uma dada string. (Lembre-se que o parâmetro, uma string, é o endereço de uma sequência de caracteres na memória.) Modifique sua main para testar essa nova função.

  4. Escreva, em assembler, uma função add1, equivalente à função C abaixo:

    int add1 (int *a, int n) {
      int i;
      int s = 0;
      for (i=0; i<n; i++) s += a[i];
      return s;
    }
    
    Modifique sua main para testar essa nova função.
  5. Escreva, em assembler, uma função add1, equivalente à função C abaixo:

    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.