novonum
abaixo em assembly.
int novonum(void) { int minhalocal; printf("numero: "); scanf("%d",&minhalocal); return minhalocal; }Teste sua função com a
main
mostrada abaixo:
#include <stdio.h> int novonum(void); int main (void) { printf ("%d\n", novonum()); return 0; }
ex2.c
com o código abaixo, compile-o e
o execute, verificando seu resultado.
#include <stdio.h> int addl (int a[], int n) { int i; int s = 0; for (i=0; i<n; i++) s += a[i]; return s; } int bemboba (int num) { int local[4]; int *a; int i; for (i=0,a=local;i<4;i++) { *a = num; a++; } return addl (local, 4); } int main (void) { printf ("%d\n", bemboba (5)); return 0; }Traduza agora a função
bemboba
para assembly,
criando um arquivo bemboba.s
.
Lembre-se que você não precisa alocar na pilha todas as variáveis locais, apenas as que não podem ser alocadas em registradores...
Substitua em ex2.c
a função bemboba
por seu
protótipo, e crie um novo executável ex2
, que reune
os dois módulos:
gcc -Wall -o ex2 ex2.c bemboba.s
Teste o seu novo programa, comparando seu resultado com o obtido anteriormente.