Additions:
%%(c;es1-main.c)
Additions:
Main di prova per la funzione ##swap##:
Main di prova per la funzione ##makepass##:
Main di prova per la funzione ##bubblesort##:
Deletions:
Main di prova per funzione ##swap##:
Main di prova per funzione ##makepass##:
Main di prova per funzione ##bubblesort##:
Additions:
Tradurre in IA32 la seguente funzione C che realizza l'algoritmo di [[https://it.wikipedia.org/wiki/Ricerca_dicotomica ricerca binaria]] su array ordinati. Scrivere la soluzione nel file ##es1.s##.
Scrivere una funzione ##void cancspazi(char* s)## che elimina tutti gli spazi da una stringa ##s## e tradurla poi in IA32. Scrivere la soluzione nel file ##es2.s##.
Tradurre in IA32 le seguenti tre funzioni C che, combinate, realizzano un semplice algoritmo di ordinamento ([[https://it.wikipedia.org/wiki/Bubble_sort bubblesort]]). Scrivere la soluzione nel file ##es3.s##.
Deletions:
Tradurre in IA32 la seguente funzione C che realizza l'algoritmo di [[https://it.wikipedia.org/wiki/Ricerca_dicotomica ricerca binaria]] su array ordinati:
Scrivere una funzione ##void cancspazi(char* s)## che elimina tutti gli spazi da una stringa ##s## e tradurla poi in IA32.
Tradurre in IA32 le seguenti tre funzioni C che, combinate, realizzano un semplice algoritmo di ordinamento ([[https://it.wikipedia.org/wiki/Bubble_sort bubblesort]]):
Additions:
Tradurre in IA32 la seguente funzione C che realizza l'algoritmo di [[https://it.wikipedia.org/wiki/Ricerca_dicotomica ricerca binaria]] su array ordinati:
Deletions:
Tradurre in IA32 la seguente funzione C che realizza l'algoritmo di ricerca binaria su array ordinati:
Additions:
int res, v[] = { 1, 3, 4, 9, 12 }, n = sizeof(v)/sizeof(int);
res = binsearch(v, n, 0);
printf("%d (corretto: 0)\n", res);
res = binsearch(v, n, 3);
printf("%d (corretto: 1)\n", res);
res = binsearch(v, n, 5);
printf("%d (corretto: 0)\n", res);
res = binsearch(v, n, 12);
printf("%d (corretto: 1)\n", res);
res = binsearch(v, n, 13);
printf("%d (corretto: 0)\n", res);
res = binsearch(v, 1, 1);
printf("%d (corretto: 1)\n", res);
res = binsearch(v, 0, 1);
printf("%d (corretto: 0)\n", res);
Additions:
print(v, n); // deve stampare 1 2 3 5 9
Additions:
print(v, n); // deve stampare 1 2 3 4 5
Deletions:
#include
#include
Additions:
Scrivere una funzione ##void cancspazi(char* s)## che elimina tutti gli spazi da una stringa ##s## e tradurla poi in IA32.
Deletions:
Scrivere una funzione ##void cancspazi(char* s)## che elimina tutti gli spazi da una stringa ##s## e tradurla poi in IA32. Usare il seguente programma di prova:
Additions:
Tradurre in IA32 le seguenti tre funzioni C che, combinate, realizzano un semplice algoritmo di ordinamento ([[https://it.wikipedia.org/wiki/Bubble_sort bubblesort]]):
Deletions:
Tradurre in IA32 le seguenti tre funzioni C che, combinate, realizzano un semplice algoritmo di ordinamento:
Additions:
Usare il seguente programma di prova:
int binsearch(int* v, int n, int x);
Additions:
int m = 0; // restituisce 1 <=> x è nell'array ordinato v di dimensione n
while (m
Deletions:
int m = 0; // restituisce 1 <=> x è nell'array
while (m
Additions:
int binsearch(int* v, int n, int x) {
int m = 0; // restituisce 1 <=> x è nell'array
while (m
int k = (m+n) >> 1; // indice dell'elemento a meta' fra m ed n
if (x == v[k]) return 1; // x e' in posizione k => trovato
if (x > v[k]) m = k+1; // x puo' essere a destra fra k+1 ed n
else n = k; // x puo' essere a sinistra fra m e k
Deletions:
int binsearch(int* v, int n, int x) { // restituisce 1 <=> x è nell'array ordinato v di dimensione n
int m = 0;
while (m
int k = (m+n) >> 1; // indice dell'elemento a meta' fra m ed n
if (x == v[k]) return 1;
if (x > v[k]) m = k; // x e' nella meta' destra
else n = k; // x e' nella meta' sinistra
Additions:
Tradurre in IA32 la seguente funzione C che realizza l'algoritmo di ricerca binaria su array ordinati:
%%(c;es1.c)
int binsearch(int* v, int n, int x) { // restituisce 1 <=> x è nell'array ordinato v di dimensione n
int m = 0;
while (m
int k = (m+n) >> 1; // indice dell'elemento a meta' fra m ed n
if (x == v[k]) return 1;
if (x > v[k]) m = k; // x e' nella meta' destra
else n = k; // x e' nella meta' sinistra
}
Tradurre in IA32 le seguenti tre funzioni C che, combinate, realizzano un semplice algoritmo di ordinamento:
Deletions:
Tradurre in IA32 la seguenti tre funzioni C che realizzano un semplice algoritmo di ordinamento:
Additions:
Tradurre in IA32 la seguenti tre funzioni C che realizzano un semplice algoritmo di ordinamento:
.globl swap
.globl makepass
Sviluppare il programma incrementalmente, testando le funzioni una alla volta con i seguenti tre main.
Main di prova per funzione ##swap##:
%%(c;es3-main1.c)
void swap(int* x, int* y);
int a = 10, b = 20;
swap(&a, &b);
printf("a=%d, b=%d\n", a, b); // deve stampare: a=20, b=10
Main di prova per funzione ##makepass##:
%%(c;es3-main2.c)
int makepass(int* v, int n);
int v[] = { 2, 3, 4, 5, 1 };
makepass(v, n);
Main di prova per funzione ##bubblesort##:
%%(c;es3-main3.c)
Deletions:
Tradurre in IA32 la seguenti tre funzioni C:
Usare il seguente programma di prova:
%%(c;es3-main.c)
Deletions:
Tradurre in IA32 la seguente funzione C che calcola il numero di spazi di una stringa:
%%(c;es1.c)
unsigned cntspazi(const char* s) {
unsigned cnt = 0;
while (*s!='\0') if (*s++==' ') cnt++;
return cnt;
%%(c;es1-main.c)
unsigned cntspazi(const char* s);
unsigned c = cntspazi("uno due");
printf("%u (corretto: 1)\n", c);
c = cntspazi("unodue");
printf("%u (corretto: 0)\n", c);
c = cntspazi(" u n o d u e ");
printf("%u (corretto: 7)\n", c);
c = cntspazi("");
printf("%u (corretto: 0)\n", c);
Compilare come al solito con ##gcc -m32 -g es1.s es1-main.c -o es1##, in caso di problemi debuggare con gdb (N.B.: queste informazioni non verranno fornite durante gli esami, dovete sapere come compilare!).
~& **Suggerimento:** si ricordi il codice ASCII dello spazio.
Additions:
Scrivere tutte le funzioni assembly nello stesso file ##es3.s##:
%%(c;es3.s)
.globl bubblesort
swap: ...
ret
makepass: ...
ret
bubblesort: ...
ret
Additions:
if (v[n-1]>v[n]) {
swap(v+n-1, v+n);
Deletions:
if (v[n]>v[n-1]) {
swap(v+n, v+n-1);
Additions:
Compilare come al solito con ##gcc -m32 -g es2.s es2-main.c -o es2##. In caso di problemi debuggare con gdb.
%%(c;es3-main.c)
void bubblesort(int* v, int n);
void print(int* v, int n) {
int i;
for (i=0; i
printf("\n");
int v[] = { 9, 1, 3, 2, 5 };
int n = sizeof(v)/sizeof(int);
print(v, n);
bubblesort(v, n);
print(v, n);
Deletions:
Compilare come al solito con ##gcc -m32 -g es2.s es2-main.c -o es2##, in caso di problemi debuggare con gdb.