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.
int filtro(int x, int lim) { if (x < lim) return 0; else return x; }
#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; }
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!