void rotateVector(int *v,int n,int pos);
- parametrul v este adresa primului element al unui vector
- parametrul n reprezintă numărul de elemente din vector
- parametrul pos reprezintă numărul de poziții cu care se va roti vectorul
Funcția deplasează elementele vectorului cu pos poziții.
Exemplu:
Fie vectorul V={10, 5, 20, 8, 30}. După apelul rotateVector(V,5,2), vectorul va arăta în felul următor: {8, 30, 10, 5, 20}.
Rezolvare:
void rotateVector(int *, int, int){ _asm{ mov edi, [ebp+8] mov ecx,0 loop_1: // retinem de fiecare data ultima valoare din vector // ca sa putem sa o adaugam pe prima pozitie cmp ecx, [ebp+16] je final_loop_1 mov ebx, [ebp+12] dec ebx mov eax, [edi+ebx*4] loop_2: // scriem valorile vectorului una peste alta de // la stanga la dreapta cmp ebx, 0 je final_loop_2 mov esi, ebx dec esi mov edx, [edi+esi*4] mov [edi+ebx*4],edx dec ebx jmp loop_2 final_loop_2: mov [edi+0*4], eax inc ecx jmp loop_1 final_loop_1: } }
No comments:
Post a Comment