Здравствуйте! Проблема такая: Задали задание, нужно написать программу, в которой главный модуль находится в языке С С++, а дополнительный модуль в языке Ассемблера. Программа обязательно должна состоять из 2 раздельный файлов, т.е Нельзя встроить код ассемблера в код С++. Из главного модуля передаю количество элементов матрицы, и указатель на первый елемент матрицы.
В ассемблере нужно: поменять местами элементы первого столбца и первой строчки в матрице, если сумма первого столбца = сумме первой строки.
Код написанный на С++:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <conio.h>
//extern "C" void asm_proc(int **a, int, int); // описание прототипа ASM-подпрограммы
using namespace std;
void Input(int** a, int n);
void Output(int** a, int n);
void Delete(int** a, int n);
void Obm (int** a, int n);
int main()
{
setlocale(LC_ALL, "russian");
srand(time(0)); // генерация случайных чисел
int** a = new int* [3]; // 3 строки в массиве
for (int count = 0; count < 3; count++)
a[count]= new int[3]; // и 3 столбцов
cout << "Задание: Если сумма элементов первой строки = сумме элементов первого столбца, " << endl << "обмнять элементы первой строки с элементами первого столбца " << endl<<endl;
cout << "Введите элементы массива: " << endl;
Input(a, 3);
//asm_proc(a, 3);
Obm(a, 3);
cout << "Массив после оброботки: " << endl;
Output(a,3);
Delete(a, 3);
getchar(); getchar();
return 0;
}
void Obm(int** a, int n)
{
int str = 0, stb = 0, d, i= 0, j =0;
va:
str += a[0][i];
stb += a[i][0];
i++;
if (i != n)
goto va;
if (str == stb)
{
vb:
d = a[0][j];
a[0][j] = a[j][0];
a[j][0] = d;
j++;
if (j != n)
goto vb;
}
}
void Input(int **a, int n)//функция заполнения массива с входными параметрами: массив и ограничение
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cin >> a[i][j] ; // заполняем случайными числами
}
}
void Output(int** a, int n)//функция вывода массива в консоль
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << a[i][j] << "\t";//потоковый вывод
cout << endl;//переход на следующую строку
}
}
void Delete(int** a, int n)
{
for (int i = 0; i < n; i++)
delete[]a[i];
}
Помогите, пожалуйста написать код на Ассемблере. Что-то начала писать, но не знаю как должно это выглядеть и запуталась:
.586
.model flat, stdcall
option casemap : none
.data
A dd 1,2,3,11,12,13,21,22,23
len_str dd 0
n_str dd 3
n_colum dd 3
.code
start:
mov eax,n_colum
shl eax,2
mov len_str,eax
Xor esi,esi
Mov ecx,n_str
m2: Xor edi,edi
Push ecx
Mov ecx, n_colum
m1: Mov eax, A[esi][edi*4]
Inc edi
Loop m1
add esi,len_str
Pop ecx
Dec ecx
Jnz m2
end start
Или хотя бы напишете как должно выглядеть передача массива с С++ в ассемблер и возврат обратно отредактированного. Обработку напишу сама