Additions:
unsigned mystrlen(const char* s) { // s è una stringa terminata da un terminatore a zero
Deletions:
unsigned mystrlen(char* s) { // s è una stringa terminata da uno zero
Additions:
while (v
==Esercizio 11 (Calcolo lunghezza di una stringa)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##mystrlen.s##:
unsigned mystrlen(char* s) { // s è una stringa terminata da uno zero
unsigned n = 0;
while (*s++) n++;
return n;
Deletions:
Additions:
void clear(char* v, unsigned n) { // v è un array, n è la lunghezza dell'array
unsigned i=0;
while (i
==Esercizio 10 (Costrutto while: azzeramento di un array - variante)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##clear2.s##:
void clear2(char* v, unsigned n) { // v è un array, n è la lunghezza dell'array
char* p=v+n;
while (v
Deletions:
void clear(char* v, int n) { // v è un array, n è la lunghezza dell'array
int i=0;
while(i
Additions:
==Esercizio 5 (Costrutto if: valore assoluto)==
==Esercizio 6 (Costrutto if...else: valore assoluto)==
==Esercizio 7 (Costrutto if..else: differenza in valore assoluto)==
==Esercizio 9 (Costrutto while: azzeramento di un array)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##clear.s##:
void clear(char* v, int n) { // v è un array, n è la lunghezza dell'array
int i=0;
while(i
Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui il ##while## viene rimpiazzato da un ##if (...) goto##. Scrivere un programma di prova per testare la funzione IA32.
Deletions:
==Esercizio 5 (Costrutto if)==
==Esercizio 6 (Costrutto if...else)==
==Esercizio 7 (Costrutto if..else)==
Additions:
==Esercizio 8 (Costrutto if)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##get_second.s##:
short get_second(short* v, int n) { // v è un array, n è la lunghezza dell'array
short a = -1;
if (n>=2) a=v[1];
return a;
Additions:
Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui l'##if (...) istruzione## viene rimpiazzato da un ##if (...) goto##. Scrivere un programma di prova per testare la funzione IA32.
Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui l'##if (...) istruzione## viene rimpiazzato da un ##if (...) goto##. Scrivere un programma di prova per testare la funzione IA32.
==Esercizio 7 (Costrutto if..else)==
Si traduca in Assembly IA32 la seguente funzione C che calcola il valore assoluto della differenza dei parametri, scrivendo un modulo ##mod.s##:
int mod(int x, int y) {
if (x>=y) return x-y;
else return y-x;
Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui l'##if (...) istruzione## viene rimpiazzato da un ##if (...) goto##. Scrivere un programma di prova per testare la funzione IA32.
Additions:
==Esercizio 5 (Costrutto if)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##abs.s##:
int abs(int x) {
if (x<0) x = -x;
==Esercizio 6 (Costrutto if...else)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##abs2.s##:
int abs2(int x) {
if (x>=0) return x;
else return -x;
Additions:
Si tenga presente che l'istruzione ##imul## deve avere come operando destinazione necessariamente un registro. Usare il seguente programma di prova:
Additions:
raddoppia(&x);
Deletions:
raddoppia(&x)
Additions:
==Esercizio 3 (Accesso a parametri interi di una funzione)==
Deletions:
==Esercizio 5 (Accesso a parametri interi di una funzione)==
Additions:
==Esercizio 5 (Accesso a parametri interi di una funzione)==
==Esercizio 4 (Accesso a parametri puntatore di una funzione)==
Deletions:
==Esercizio 3 (Accesso ai parametri di una funzione)==
Si traduca in Assembly IA32 la seguente funzione C:
==Esercizio 4 (Accesso a parametri interi di una funzione)==
==Esercizio 5 (Accesso a parametri puntatore di una funzione)==
Additions:
%%(c;quadrato_main.c)
%%(c;raddoppia_main.c)
Additions:
==Esercizio 5 (Accesso a parametri puntatore di una funzione)==
Deletions:
==Esercizio 4 (Accesso a parametri puntatore di una funzione)==
Additions:
Si vedano le discussioni e le soluzioni sul [[http://solo.diag.uniroma1.it/index.php?board=304.0 forum]].
==Esercizio 3 (Accesso ai parametri di una funzione)==
Si traduca in Assembly IA32 la seguente funzione C:
int quadrato(int x) {
return x*x;
==Esercizio 4 (Accesso a parametri interi di una funzione)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##quadrato.s##:
int quadrato(int x) {
return x*x;
Usare il seguente programma di prova:
int quadrato(int x);
printf("quadrato(8)=%d\n", quadrato(8)); // deve stampare 64
==Esercizio 4 (Accesso a parametri puntatore di una funzione)==
Si traduca in Assembly IA32 la seguente funzione C, scrivendo un modulo ##raddoppia.s##:
void raddoppia(int* p) {
*p = *p * 2;
Usare il seguente programma di prova:
void raddoppia(int* p);
int x = 15;
raddoppia(&x)
printf("x=%d\n", x); // deve stampare 30
Additions:
printf("es2() -> %hd\n", z); // stampa contenuto variabile z
Deletions:
printf("es2() -> %h\n", z); // stampa contenuto variabile z
Additions:
==Esercizio 2 (Invocazione funzione IA32 da programma C)==
Deletions:
==Esercizio 2==
Additions:
Se si ritiene che servano registri di appoggio per il calcolo dell'espressione, usare preferibilmente i registri C e/o D.
Deletions:
Se si ritiene che servano registri di appoggio per il calcolo dell'espressione, usare preferibilmente C e/o D.
Additions:
Scrivere un file ##es2.s## che contiene la traduzione IA32 della funzione C ##es2##. Compilare il programma insieme al main di prova, ricordando che il valore restituito da una funzione per convenzione è contenuto nel registro A:
Deletions:
Scrivere un file ##es2.s## che contiene la traduzione IA32 della funzione C ##es2##. Compilare il programma insieme al main di prova:
Additions:
short es2(); // prototipo per la funzione definita nel modulo es2.s
Deletions:
short es2(); // prototipo per la funzione definita nel modulo ##es2.s##.