INF1018 - Software Básico

Chamadas de funções em Assembly

  1. Considere o programa C a seguir:

      #include <stdlib.h>
      int main() {
        system("ls -ls");
        return 0;
      }
    
    Traduza a função main para assembly, criando um arquivo ex1.s. Aproveite o seguinte esqueleto para criar o seu arquivo assembly:
      .data
      s1: .string "ls -ls"
    
      .text
      .globl main
      main:
      /* prologo */
        pushl %ebp
        movl  %esp, %ebp
    
      /* coloque seu codigo aqui */
    
      /* finalizacao */
        movl %ebp, %esp
        popl %ebp
        ret
    
    "Compile" seu programa com o comando gcc -m32 -o ex1 ex1.s e execute-o, verificando seu resultado.


  2. Considere agora o programa a seguir, composto por dois módulos (arquivos) C:
    • arquivo filtro.c:
      int filtro(int x, int lim) {
        if (x < lim)
          return 0;
        else
          return x;
      }
      
    • arquivo main.c:
      #include <stdio.h>
      #define LIM 1
      
      int filtro(int x, int lim);
      
      int nums[5] = {3,-5,7,8,-2};
      
      int main() {
        int i;
        int *p = nums;
        for (i = 0; i < 5; i++) {
          printf("%d\n", filtro(*p,LIM));
          p++;
        }
        return 0;
      }
      
    Compile os dois módulos juntos (gcc -Wall -m32 -o ex2 filtro.c main.c) e execute o programa gerado, verificando seu resultado.

    Traduza agora a função main para assembly, criando um novo arquivo mainasm.s. Aproveite o seguinte esqueleto para criar o seu arquivo assembly:

      .data
      nums: .int 3, -5, 7, 8, -2
      s1:   .string "%d\n"
    
      .text
      .globl main
      main:
      /* prologo */
         pushl %ebp
         movl  %esp, %ebp
    
      /* coloque seu codigo aqui */
    
      /* finalizacao */
         movl %ebp, %esp
         popl %ebp
         ret
    
    Compile os dois módulos juntos (gcc -Wall -m32 -o ex2asm filtro.c mainasm.s), execute o programa gerado e verifique se o resultado é o mesmo obtido pelo programa com a main em C!