"Cole" do primeiro laboratório de assembly para ver como passar os strings de formatação para printf e scanf, respeitando o código das funções apresentadas abaixo.
#include <stdio.h>
void swap (int* x, int* y) {
int z;
z=*x; *x=*y; *y= z;
}
int main (void) {
int a, b;
printf ("valor de a? ");
scanf ("%d", &a);
printf ("valor de b? ");
scanf ("%d", &b);
swap (&a, &b);
printf ("a = %d\nb = %d\n", a, b);
return 0;
}
f, com a definição abaixo, em assembly.
Teste-a com a função main dada, escrita em C.
#include <stdio.h>
#include <stdlib.h>
#define MAX 4
int f (int a[], int b[]){
int local [MAX];
int i, acc;
for (i=0;i<MAX;i++)
local[i] = a[i]+b[i];
acc = 1;
for (i=0; i<MAX; i++)
acc = acc*local[i];
return acc;
}
int main (void) {
int um[MAX], outro[MAX], i;
for (i=0;i<MAX;i++) {
printf ("valor de um[%d]? ",i);
scanf ("%d", &um[i]);
}
for (i=0;i<MAX;i++) {
printf ("valor de outro[%d]? ",i);
scanf ("%d", &outro[i]);
}
printf ("resultado de f: %d\n", f(um, outro));
return 0;
}
calcula e foo
em assembly. (Comece codificando apenas calcula, teste
com o resto em C, e depois codifique foo.
#include <stdio.h>
int calcula (int a[], int tam) {
int i = 0;
int acc = 0;
for (i=0; i<tam; i++)
acc += a[i];
return acc;
}
int foo (int a[], int tam) {
int i;
int b[tam];
for (i = 0; i<tam; i++)
b[i] = calcula (&(a[i]), tam-i);
return calcula (b, tam);
}
int main (void) {
int a[4] = {1, 1, 1, 1};
printf ("%d\n", foo(a,4));
return 0;
}