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 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; }