Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2018, 19:09   #1
Xaakii
 
Регистрация: 20.11.2018
Сообщений: 4
По умолчанию Метод Гаусса в ассемблере

Реализация с использованием ассемблерной вставки программи
для вычисления произведения матриц АВ, где А - заданная матрица размер-
ности n x n, а элементы матрицы В задаются формулой bij = i + j - 1.
Код:
#include <iostream>
using namespace std;
void main()
{
 
int n;
cout << “ n : ”;
cin >> n;
int** a = new int*[n]; 
int** b = new int*[n]; 
int** res = new int*[n]; 
cout << “ А : ”;
for (int i = 0; i < n; i++)
{
a[i] = new int[n];
b[i] = new int[n];
res[i] = new int[n];
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
b[i][j] = i + j — 1;
res[i][j] = 0;
}
}
 
cout << “ A: ” << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout << a[i][j] << “ ”;
}
cout << endl;
}
cout << endl;
cout << “ B: ” << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout << b[i][j] << “ ”;
}
cout << endl;
}
cout << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
__asm
{
mov edx, res // edx = res
mov esi, i
imul esi, 4
add edx, esi // edx = &res[i]
push [edx]
pop edx // edx = res[i]
mov esi, j
imul esi, 4
add edx, esi // edx = &res[i][j]
push edx
xor esi, esi
mov ecx, n
start:
mov eax, a
mov ebx, b
a_to_eax:
mov edx, i
mov eax, [eax + 4 * edx] // eax = a[i]
mov edx, esi
mov eax, [eax + 4 * edx] // eax = a[i][esi]
b_to_ebx:
mov edx, esi
mov ebx, [ebx + 4 * edx] // ebx = b[esi]
mov edx, j
mov ebx, [ebx + 4 * edx] // ebx = b[esi][j]
end:
pop edx
imul eax, ebx // eax = a[i][esi]*b[esi][j]
add [edx], eax
push edx
inc esi
loop start
pop edx
}
}
}
cout << “ A*B: ” << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout << res[i][j] << “ ”;
}
cout << endl;
}
cout << res << endl;
system("pause");
}
Есть такой пример.

Моя задача: По заданной матрицей A и вектором b решить методом Гаусса
матричное уравнение Ax = b.
Пусть матрицу А и вектор В зададим так, как показано в примере, это С ++, это я понимаю. Но как для этого написать ассемблерную вставку с методом Гаусса, я не знаю. Помогите пожалуйста.

Последний раз редактировалось Аватар; 20.11.2018 в 19:13.
Xaakii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Гаусса Maray Помощь студентам 6 18.10.2015 23:45
метод Гаусса Max161995 Visual C++ 0 18.05.2014 00:16
метод простых операций и метод гаусса зейделя tarasman11 Паскаль, Turbo Pascal, PascalABC.NET 1 23.09.2012 14:46
метод Гаусса на C/C++ Passadobl Фриланс 4 21.10.2010 16:54
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08