• Предмет: Информатика
  • Автор: olegdidukh1008
  • Вопрос задан 2 месяца назад

#include
using namespace std;
int 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 (int i = 0; i < n; i++){
for (int j = 0; j < n; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << " B : " << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << b[i][j] << " ";
}
cout << endl;
}cout << endl;
// АСЕМБЛЕРНА ВСТАВКА (алгоритм множення матриць)
__asm
{
mov ecx, 0
start1:
mov edi, 0
start2 :
mov edx, res // edx = res
mov esi, ecx
imul esi, 4
add edx, esi // edx = &res[i]
push [edx]
pop edx // edx = res[i]
mov esi, edi
imul esi, 4
add edx, esi // edx = &res[i][j]
push edx
xor esi, esi
start :
mov eax, a
mov ebx, b
a_to_eax :
mov edx, ecx
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, edi
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
cmp esi, n
jne start
pop edx
inc edi
cmp edi, n
jne start2
inc ecx
cmp ecx, n
jne start1
}
// ВИВЕДЕННЯ РЕЗУЛЬТАТУ
cout << " A * B: " << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << res[i][j] << " ";
}
cout << endl;
}
cout << res << endl; system("pause");
}
Замінити тільки частину асемблера так, щоб він підходив під це завдання: Для квадратної матриці A= {aij} порядку nобчислити різницю між максимальним елементом рядків з парними номерами і мінімальним елементом рядків з непарними номерами. В с+++

Ответы

Ответ дал: lywehhhhh
0

#include <iostream>

using namespace std;

int main()

{

// ФОРМУВАННЯ МАТРИЦІ

int n;

cout << "Введіть n: ";

cin >> n;

int** a = new int*[n]; // матриця A

cout << "Введіть елементи матриці A: " << endl;

for (int i = 0; i < n; i++) {

a[i] = new int[n];

for (int j = 0; j < n; j++) {

cin >> a[i][j];

}

}

// Обчислення різниці між максимальним елементом рядків з парними номерами і мінімальним елементом рядків з непарними номерами

int max_even = INT_MIN;

int min_odd = INT_MAX;

__asm {

mov ecx, 0 // індекс рядка

// Цикл обходу рядків

start1 :

mov edi, 0 // індекс стовпця

xor eax, eax // eax = 0 (максимальний елемент рядка)

xor ebx, ebx // ebx = 0 (мінімальний елемент рядка)

// Цикл обходу елементів у рядку

start2 :

mov edx, a // edx = a

mov esi, ecx

imul esi, 4

add edx, esi // edx = &a[i]

mov esi, edi

imul esi, 4

add edx, esi // edx = &a[i][j]

mov esi, [edx] // esi = a[i][j]

// Знаходження максимального елемента у рядку з парним номером

cmp ecx, 1

jne check_min

cmp esi, eax

jle check_min

mov eax, esi

jmp check_min

check_min :

// Знаходження мінімального елемента у рядку з непарним номером

cmp ecx, 0

jne end_check

cmp esi, ebx

jge end_check

mov ebx, esi

end_check :

inc edi

cmp edi, n

jne start2

// Оновлення максимального елемента рядків з парними номерами

cmp ecx, 1

jne end_update_max

cmp eax, max_even

jle end_update_max

mov max_even, eax

end_update_max :

// Оновлення мінімального елемента ряд

Вас заинтересует