IMPORTANTE: Antes de fazer os exercícios abaixo, verifique se você não deixou exercícios incompletos nos demais laboratórios! Se sim, complete-os!
Considere o código abaixo:
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 1;
}
Considere o código abaixo:
struct X {
int v;
struct X *next;
};
int f (int x) { return x; }
int add (struct X *x) {
int a = 0;
for (; x != NULL; x = x->next)
a += f(x->v);
return a;
}
Codifique a função add (e a funcão f) em assembly.
Teste com uma main escrita em C.
Codifique a função fat, com a definição abaixo, em assembly.
Teste-a com uma função main escrita em C.
int fat (int n) {
if (n==0) return 1;
else return n*fat(n-1);
}
Execute o código a seguir e explique os resultados mostrados pelo programa.
#include <stdio.h>
void dump (void *p, int n) {
unsigned char *p1 = (unsigned char *) p;
while (n--) {
printf("%p - %02x\n", p1, *p1);
p1++;
}
}
struct um {
int f;
char c;
short d;
char i;
};
struct um a = {(0x0aaa & -23), ~(12 << 4), (0x0f | 1000), (~(-4) + 1)};
int main (void) {
dump (&a, sizeof(a));
return 0;
}