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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2020, 16:29   #1
Invi
Новичок
Джуниор
 
Регистрация: 02.11.2020
Сообщений: 3
По умолчанию Сумма элементов по столбцам матрицы (Ассемблерная вставка)

Добрый день. Подскажите пожалуйста, как переделать программу. На данный момент у меня вычисляется сумма элементов по строкам матрицы. Не очень хорошо разбираюсь в языке ассемблера, так как до этого писал программы на языках высокого уровня. Очень нужна помощь, потому что мучаюсь уже довольно продолжительный отрезок времени.
Код:
#include "locale.h"

#include <iostream>

#include "conio.h"

#include <math.h>

using namespace std;

int main()

{

	setlocale(LC_ALL, "Rus");

	system("color F0");

	int N = 0, M = 0, i, j;

	cout << "Введите N = ";

	while (!(cin >> N) || (cin.peek() != '\n'))

	{

		cin.clear();

		while (cin.get() != '\n');

		cout << "Неверные данные" << endl;

	}

	cout << "Введите M = ";

	while (!(cin >> M) || (cin.peek() != '\n'))

	{

		cin.clear();

		while (cin.get() != '\n');

		cout << "Неверные данные" << endl;

	}

	int x[100][100], sum[100];

	for (i = 0; i < N; i++)

	{

		for (j = 0; j < M; j++)

		{

			cout << "Введите число x[" << i << "][" << j << "]\nx = ";

			while (!(cin >> x[i][j]) || (cin.peek() != '\n'))

			{

				cin.clear();

				while (cin.get() != '\n');

				cout << "Неверные данные" << endl;

			}

		}

		sum[i] = 0;

	}

	for (i = 0; i < N; i++)

	{

		for (j = 0; j < M; j++)

		{

			cout << " " << x[i][j];

		}

		cout << endl;

	}

	_asm

	{

		mov ebx, x; переместить адрес x в ebx

		mov edx, N; количество строк

		mov eax, M; количество столбцов

		mov j, 0; начальное значение j

		mov i, 0; начальное значение i

		mov esi, 0; индекс элементов x[][]

		mov edi, 0; индекс элементов sum[]

		jmp loopingColumn; переход на первый шаг цикла

		loopingRow :

		push ecx

			xor esi, esi; обнулить счетчик элементов массива

			mov j, 0; обнулить номер столбца

			inc i; увеличить i

			add esi, 400; переход к следующей строке(макс. 100 строк по 4 байта = 400)

			imul esi, i;

		add edi, 4; перейти к следующему элементу sum[]

			cmp i, edx; сравнение i с N(кол - во строк)

			jge End; если больше, перейти к концу

			loopingColumn :

		cmp j, eax; сравнение j c M(кол - во столбцов)

			jge loopingRow; если больше, перейти к следующей строке

			mov ecx, x[esi]; переместить текущий элемент в ecx

			add sum[edi], ecx; накопление результата текущей строки

			pop ecx; восстанавливаем значение в регистре для работы цикла

			add esi, 4; переход к следующему элементу строки

			inc j; следующий номер столбца

			loop loopingColumn

			End :

	}

	for (i = 0; i < N; i++)

		cout << "sum[" << i << "] = " << sum[i] << endl;

	_getch();

	return 0;

}
Invi вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка строк матрицы(Си + Ассемблерная вставка) Grizer Помощь студентам 1 26.06.2015 06:59
произведение элементов по столбцам матрицы kuy Паскаль, Turbo Pascal, PascalABC.NET 1 13.10.2011 19:37
Найти сумму элементов матрицы по столбцам и строкам.На паскале Дмитричок Помощь студентам 14 02.04.2011 15:34
Сумма четных элементов матрицы. Произведение элементов 3-го столбца. Минимальный элемент матрицы. renovare Помощь студентам 2 03.07.2009 21:13