Você terminou o laboratório anterior? Se não, termine agora.
struct X { int val; struct X *next; }; int add (struct X *x) { int a = 0; for (; x != NULL; x = x->next) a += x->val; return a; }
Traduza a função add
para assembly e use a função
main
dada a seguir para testá-la.
#include <stdio.h>
#define MAX 10 /* MAX tem que ser maior que 1!!!! */
struct X {
int val;
struct X *next;
};
int add (struct X *x);
int main (void) {
struct X x[MAX];
int i;
for (i=0;i<MAX;i++)
x[i].val = i;
for (i=MAX-1;i>1;i--)
x[i].next = &(x[i-1]);
x[0].next = &(x[MAX-1]);
x[1].next = NULL;
printf ("resultado de add: %d\n", add(x));
return 0;
}
Assumindo a definição anterior para a estrutura X
,
traduza a função abaixo para assembly:
int add2 (struct X *x) {
if (x == NULL) return 0;
else return x->val + add2(x->next);
}
Use a função main
do exercício anterior para testar a nova função.
Refaça os exercícios anteriores assumindo que a estrutura X
tem a definição abaixo:
struct X {
char val;
struct X *next;
};
Dicas:
int f (int x) { return x+2; } void map2 (int* um, int * outro, int n) { int i; for (i=0; i<n; i++) *(outro+i) = f(*(um+i)); }Codifique a função
map2
e a função f
em assembly.
Teste com uma main
escrita em C como essa a seguir:
#include <stdio.h> #define N 10 void map2 (int* um, int * outro, int n); int main (void) { int i; int a[N], b[N]; for (i=0;i<N;i++) a[i] = i; map2(a,b,N); for (i=0;i<N;i++) printf("%d\n",b[i]); return 0; }