int Produs(int *v);
unde v este adresa de început a unui vector, care se termină printr-un element cu valoarea 0.
Elementele vectorului sunt nenule.
Funcția returnează produsul numerelor mai mici decât media numerelor din vector (din care
nu face parte elementul final, cu valoarea 0).
Rezolvare:
int Produs(int *){
_asm{
mov ebx, [ebp+8]
xor ecx, ecx // retinem suma numerelor pentru medie
xor edi, edi // contor pentru medie
loop_1: // calculam media numerelor din vector
cmp [ebx], 0
je final_loop_1
add ecx, [ebx]
inc edi
add ebx, 4
jmp loop_1
final_loop_1:
mov eax, ecx
xor edx, edx
div edi
mov esi, eax // punem rezultatul mediei in esi pentru
// a avea liber registrul eax pentru produsul numerelor
mov eax, 1
mov ebx, [ebp+8]
loop_2: // calculam produsul numerelor
// mai mici decat media
cmp [ebx], esi
jge final_loop_2
mul [ebx]
add ebx, 4
jmp loop_2
final_loop_2:
// valoarea returnata de functie va fi
// ceea ce se afla in registrul eax
// in cazul nostru va fi direct produsul
}
}
No comments:
Post a Comment