Esercitazione 2 - 21 ottobre 2016 (120 min)
Esercizio 1 (istruzione if, parametri senza indirezione)
Soluzione:
.globl uguali
uguali:
movl 4(%esp), %ecx
movl $0, %eax
cmpl 8(%esp), %ecx
jne End
movl $1, %eax
End:
ret
Esercizio 2 (istruzione if, parametri con indirezione)
Soluzione:
.globl max
max:
movl 4(%esp), %eax
movl 8(%esp), %ecx
movl (%eax), %eax
movl (%ecx), %ecx
cmpl %eax, %ecx
jle end # if (ecx<=eax) goto end
movl %ecx, %eax
end:
ret
Esercizio 3 (istruzione while, somma dei numeri da 1 a n)
Soluzione:
.globl sum1N
sum1N:
movl 4(%esp), %ecx # n <-> ecx
movl $0, %eax # sum <-> eax
loop:
cmpl $1, %ecx
jb end # if (ecx<1) goto end
addl %ecx, %eax
decl %ecx
jmp loop
end:
ret
Esercizio 4 (istruzione while, uguaglianza di stringhe C)
Soluzione:
.globl streq
streq:
movl 4(%esp), %ecx # s1 <-> ecx
movl 8(%esp), %edx # s2 <-> edx
loop:
movb (%ecx), %al # *s1 <-> al
cmpb (%edx), %al
jne end0
cmpb $0, %al
je end1
incl %ecx
incl %edx
jmp loop
end0:
movl $0, %eax
ret
end1:
movl $1, %eax
ret