Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <limits>
- using namespace std;
- int FindMax(int a[], int n, int *i = nullptr) {
- if (n == 0) {
- if (i != nullptr) {
- *i = -1;
- }
- return 0x80000000; // Возвращаем -2147483648
- }
- int maxVal = a[0];
- int index = 0;
- __asm {
- mov edi, a // Адрес массива в регистре edi
- mov ecx, n // Длина массива в ecx
- xor edx, edx // Счетчик индексов в edx
- mov eax, [edi] // Загружаем первый элемент массива в eax (максимум)
- find_loop:
- cmp edx, ecx // Сравниваем индекс с длиной массива
- jge done // Если индекс >= длины массива, выходим
- mov ebx, [edi + edx * 4] // Загружаем элемент массива в ebx
- cmp ebx, eax // Сравниваем его с текущим максимумом
- jle skip // Если не больше, пропускаем
- mov eax, ebx // Обновляем максимум
- mov index, edx // Обновляем индекс
- skip:
- inc edx // Переходим к следующему индексу
- jmp find_loop // Повторяем цикл
- done:
- // Возвращаем результат
- mov maxVal, eax // Сохраняем максимум
- }
- if (i != nullptr) {
- *i = index; // Записываем индекс, если указатель не равен нулю
- }
- return maxVal; // Возвращаем максимальное значение
- }
- void PrintArray(const int arr[], int size) {
- for (int j = 0; j < size; ++j) {
- cout << arr[j] << " ";
- }
- cout << endl;
- }
- int main() {
- // Тестовые примеры
- // Пример 1: Пустой массив
- int arr1[] = {};
- int index1;
- int max1 = FindMax(arr1, 0, &index1);
- cout << "Исходный массив: ";
- PrintArray(arr1, 0);
- cout << "Максимум: " << max1 << ", Индекс: " << index1 << endl;
- // Пример 2: Массив с несколькими элементами, i не задан
- int arr2[] = {3, 5, 2, 5, 1};
- int max2 = FindMax(arr2, 5);
- cout << "Исходный массив: ";
- PrintArray(arr2, 5);
- cout << "Максимум: " << max2 << endl;
- // Пример 3: Массив с несколькими элементами, максимальное значение встречается несколько раз
- int arr3[] = {7, 3, 7, 1, 4};
- int index3;
- int max3 = FindMax(arr3, 5, &index3);
- cout << "Исходный массив: ";
- PrintArray(arr3, 5);
- cout << "Максимум: " << max3 << ", Индекс: " << index3 << endl;
- // Пример 4: Массив с одним элементом
- int arr4[] = {42};
- int index4;
- int max4 = FindMax(arr4, 1, &index4);
- cout << "Исходный массив: ";
- PrintArray(arr4, 1);
- cout << "Максимум: " << max4 << ", Индекс: " << index4 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement