Additions:
==Soluzioni Esercizi 1-6==
Sono di sponibili le [[SolEserc02AA1516 soluzioni degli esercizi 1-6]]
Deletions:
.globl mistero
Additions:
.globl mistero
cmpl 12(%esp), %eax
jnb .L3
movzwl (%edx,%eax,2), %eax
.L3:
movl $-1, %eax
Additions:
==Esercizio 7==
[[https://docs.google.com/a/dis.uniroma1.it/forms/d/1CBfcKEpctN5NtfxSw1eaOycIm8iA-0Rrm_tou0Unsi4/viewform Domande su operandi e modi di indirizzamento della memoria IA32]]
==Esercizio 8==
[[https://docs.google.com/a/dis.uniroma1.it/forms/d/1U5OFAfU9V51mz1l99KYXAeHSjQss7VmTX5FG65ycgqI/viewform Domande su istruzioni aritmetico-logiche IA32]]
Additions:
Tradurre in C la seguente funzione IA32 generata con ##gcc -m32 -O1## in un modulo ##es5.c##:
%%(asm;es5.s)
Tradurre in C la seguente funzione IA32 generata con ##gcc -m32 -O1## in un modulo ##es6.c##:
.globl mistero
Deletions:
Tradurre in C la seguente funzione IA32 in un modulo ##es5.c##:
%%(c;es5.s)
Tradurre in C la seguente funzione IA32 in un modulo ##es6.c##:
.globl mistero
Additions:
==Esercizio 5==
Tradurre in C la seguente funzione IA32 in un modulo ##es5.c##:
%%(c;es5.s)
Scrivere un programma di prova ##es5-main.c## per verificare la correttezza della funzione.
==Esercizio 6==
Tradurre in C la seguente funzione IA32 in un modulo ##es6.c##:
%%(asm;es6.s)
.globl mistero
mistero:
movl 4(%esp), %edx
movl 8(%esp), %eax
jmp .L2
.L4:
movzwl -4(%edx,%eax,2), %ecx
subl $1, %eax
cmpw (%edx,%eax,2), %cx
ja .L5
.L2:
cmpl $1, %eax
ja .L4
movl $1, %eax
ret
.L5:
movl $0, %eax
ret
Scrivere un programma di prova ##es6-main.c## per verificare la correttezza della funzione.
Additions:
int streq(const char* s1, const char* s2);
res = streq("ciao", "ciao");
printf("streq(\"ciao\", \"ciao\")=%d\n", res);
res = streq("ciaos", "ciao");
printf("streq(\"ciaos\", \"ciao\")=%d\n", res);
res = streq("ciac", "ciao");
printf("streq(\"ciac\", \"ciao\")=%d\n", res);
res = streq("cia", "ciao");
printf("streq(\"cia\", \"ciao\")=%d\n", res);
res = streq("", "");
printf("streq(\"\", \"\")=%d\n", res);
}%%
No differences.
Additions:
Tradurre in IA32 la seguente funzione C in un modulo ##es1.s##:
Tradurre in IA32 la seguente funzione C in un modulo ##es2.s##:
Tradurre in IA32 la seguente funzione C in un modulo ##es3.s##:
Tradurre in IA32 la seguente funzione C in un modulo ##es4.s##:
Deletions:
Tradurre in IA32 la seguente funzione C:
Tradurre in IA32 la seguente funzione C:
Tradurre in IA32 la seguente funzione C:
Tradurre in IA32 la seguente funzione C:
Additions:
unsigned sum = 0;
while (n>=1) sum += n--;
return sum;
unsigned sum1N(unsigned n);
unsigned res;
res = sum1N(4);
printf("sum1N(4)=%u\n", res);
res = sum1N(0);
printf("sum1N(0)=%u\n", res);
Additions:
==Esercizio 3 (istruzione while, somma dei numeri da 1 a n)==
%%(c;es3.c)
unsigned sum1N(unsigned n) {
%%(c;es3-test.c)
Additions:
Si tenga presente che non è possibile usare due operandi memoria: ad esempio ##cmpb (%eax), (%ecx)## è illegale. Testare il funzionamento della funzione scritta con il seguente programma di prova:
Additions:
%%(c;es4.c)
%%(c;es4-test.c)
Additions:
==Esercizio 4 (istruzione while, uguaglianza di stringhe C)==
int streq(const char* s1, const char* s2) {
while (*s1 == *s2)
if (*s1 == 0) return 1;
else s1++, s2++;
return 0;
No differences.
Additions:
**Nota bene:** compilare a 32 bit con ##gcc -m32##.
Deletions:
**Nota bene:** compilare a 32 bit con ##-m32##.
Additions:
**Nota bene:** compilare a 32 bit con ##gcc -m32## (##gcc -m32 es1-main.c es1.s -o es1##).
Deletions:
**Nota bene:** compilare a 32 bit con ##gcc -m32## (##gcc -m32 es1-main.c es1.s -o es1##).
Additions:
**Nota bene:** compilare a 32 bit con ##gcc -m32## (##gcc -m32 es1-main.c es1.s -o es1##).
Deletions:
**Nota bene:** compilare a 32 bit con ##gcc -m32## (##gcc es1-main.c es1.s -o es1 -m32##).
Additions:
**Nota bene:** compilare a 32 bit con ##gcc -m32## (##gcc es1-main.c es1.s -o es1 -m32##).
Deletions:
**Nota bene:** compilare a 32 bit con ##-m32## (##gcc es1-main.c es1.c -o es1 -m32##).