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