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

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

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

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

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

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

Добрый день. Пытаюсь разобраться с матрицами на ассемблере, да все никак не выходит. Мне по заданию нужно найти сумму элементов, которые делятся на 3, в четных столбцах. Код на ассемблере брал у друга, поэтому не все детали могу там разобрать. Подскажите пожалуйста хотя бы приблизительно. Буду крайне признателен.
Код:
// aks5.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//

#include <iostream>
#include <Windows.h>
using namespace std;
#define N 100
int main()
{
	system("color F0");
	setlocale(LC_ALL, "rus");
	int matr[N][N];
	int i, j, n, S = 0, value = 1;
	int x = 3;
	cout << "Введите n\t";
	cin >> n;
	for (i = 0; i < n; i++) {
		for (j = 1; j <= n; j++) {
			cout << "massiv[" << i << "][" << j << "] = ";
			cin >> matr[i][j];

			if ((j % 2 == 0) && (matr[i][j] % 3 == 0))
				S += matr[i][j];
		}
	}cout << endl << "Summa C++ = " << S << endl;
	_asm
	{
		mov ebx, matr; переместить адрес x в ebx

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

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

		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 n(кол - во столбцов)

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

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

			adc S, ecx; накопление результата текущей строки

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

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

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

			loop loopingColumn

			End :
	}

	cout << endl << "Summa Ассемблер = " << S << endl;
	system("pause");
	return 0;
}
Invi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сумма элементов матрицы fkty Общие вопросы C/C++ 13 15.09.2013 15:07
Сумма элементов матрицы [n:m] (Си) Найт Помощь студентам 1 18.04.2012 16:18
Сумма элементов матрицы Паркер Помощь студентам 3 25.11.2011 15:19
Сумма элементов матрицы DenProx Помощь студентам 2 19.12.2009 14:49
Сумма четных элементов матрицы. Произведение элементов 3-го столбца. Минимальный элемент матрицы. renovare Помощь студентам 2 03.07.2009 21:13