Ассемблерная вставка "Произведение массивов" - Assembler
Формулировка задачи:
Помогите пожалуйста сделать ассемблерную вставку части "Произведение массивов"
#include "iostream" #include "time.h" #include "iomanip" #include "conio.h" using namespace std; void selectSort(int*, int); int main() { float fTimeStart = clock() / (float)CLOCKS_PER_SEC; setlocale(LC_ALL, "Russian"); int n = 20; const int p = 7; int *mas = new int[n]; int *mas2 = new int[n]; int *mas3 = new int[n]; srand(time(NULL)); cout << "Первый массив +7: "; for (int i = 0; i < n; i++) { mas[i] = rand() % 50 ; mas[i] += p; cout << mas[i] << " "; } cout << "\n\n"; cout << "Второй массив: "; for (int i = 0; i < n; i++) { mas2[i] = rand() % 50; cout << mas2[i] << " "; } cout << "\n\n"; cout << "Произведение массивов: "; for (int i = 0; i < n; i++) { mas3[i] = mas[i] * mas2[i]; cout << mas3[i] << " "; } cout << "\n\n"; selectSort(mas3, n); cout << "Отсортированный массив: "; for (int i = 0; i < n; i++) { cout << mas3[i] << " "; } cout << "\n"; float fTimeStop = clock() / (float)CLOCKS_PER_SEC; printf("Длительность процесса %f секунд\n", fTimeStop - fTimeStart); getchar(); system("pause"); return 0; } void selectSort(int* perestanovka, int length) { for (int j = 0; j < length; j++) { int temp = perestanovka[0]; for (int z = j + 1; z < length; z++) { if (perestanovka[j] > perestanovka[z]) { temp = perestanovka[j]; perestanovka[j] = perestanovka[z]; perestanovka[z] = temp; } } } }
Решение задачи: «Ассемблерная вставка "Произведение массивов"»
textual
Листинг программы
mov ecx, n //ecx = размер массива mov esi, mas //esi = адрес mas mov edi, mas2 //edi = адрес mas2 mov ebx, mas3 //ebx = адрес mas3 @l: lodsd //eax = mas[i], esi += 4 imul dword ptr [edi] // eax = eax*mas2[i] mov [ebx], eax // mas3[i] = eax add edi, 4 // следующий add ebx, 4 // элемент loop @l // цикл по n элементам
Объяснение кода листинга программы
В данном коде выполняется произведение массивов.
- Сначала в регистр ecx записывается размер массива (n).
- Затем в регистр esi записывается адрес первого массива (mas), в регистр edi — адрес второго массива (mas2), а в регистр ebx — адрес третьего массива (mas3).
- Далее выполняется цикл, в котором каждый элемент первого массива (mas) умножается на соответствующий элемент второго массива (mas2) и записывается в третий массив (mas3).
- После каждой итерации к регистрам esi, edi и ebx прибавляется 4, чтобы перейти к следующим элементам массивов.
- Цикл продолжается до тех пор, пока не будет выполнено условие завершения цикла (loop).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д