INF1018 - Software Básico

Aulas de Laboratório

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: 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!