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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2018, 10:05   #1
f1gh
Новичок
Джуниор
 
Регистрация: 09.12.2017
Сообщений: 2
По умолчанию Не могу разобраться в работе программе

Пожалуйста, прокомментируйте ассемблерный код, не могу понять что, где происходит, буду благодарен

Код:
#include "pch.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
#include <clocale>  
using namespace std;
#define nmax 10                                		//максимальный размер матрицы

int a[nmax][nmax];                                  	//матрица A

void main(int argc, char* argv[])
{
	setlocale(LC_ALL, ".1251");
	int x, y;                                 		//счетчики
	int am, an;										//размеры матрицы A

	printf("Введите количество строк матрицы А (m): ");
	scanf("%i", &am);
	printf("Введите количество столбцов матрицы А (n): ");
	scanf("%i", &an);



	printf("\n\nВведите матрицу A:\n");
	for (x = 0; x < am; x++)
	{
		for (y = 0; y < an; y++)
		{
			printf("Введите элемент матрицы A[%i,%i]: ", x + 1, y + 1);
			scanf("%i", &a[x][y]);
		}
	}


	//-------------------------------------------

	_asm {

		mov esi, 0
		push esi
		mov edi, 0
		mov edx, am

		cicl1 :           //цикл замены элементов главной диаганали на ссуму элементов строки
		mov esi, 0                  //задаем начальное смещение в матрице A
			mov ecx, an				//загружаем размер матрицы A

			mov eax, 0
			cicl :                      //цикл суммы элементов строки
			add eax, a[esi][edi]
			add esi, 4
			loop cicl

			pop esi
			mov a[esi][edi], eax
			add esi, 4
			push esi
			add edi, nmax * 4   //переходим к следующей строке
			dec edx
			jnz cicl1

			pop esi
			mov esi, 0
			mov edi, 0
			mov eax, 0
			mov edx, 0
			mov ebx, 0


			mov edx, am
			mov ebx, 1
			cicl2:

		mov ecx, 0
			sub edx, ebx
			cmp edx, 10
			jae p2
			cicl3 :
		mov eax, a[esi][edi]
			add esi, 4
			add edi, nmax * 4   //переходим к следующей строке
			cmp eax, a[esi][edi]
			jb p1
			xchg a[esi][edi], eax
			sub esi, 4
			sub edi, nmax * 4
			mov a[esi][edi], eax
			add esi, 4
			add edi, nmax * 4

			p1:

		add ecx, 1
			cmp ecx, edx
			jb cicl3

			mov esi, 0
			mov edi, 0
			add ebx, 1
			cmp ebx, am
			jb cicl2

			p2 :
		mov esi, 0
			mov edi, 0
			mov eax, 0
			mov edx, 0
			mov ebx, 0
	}
	//-------------------------------------------

	printf("\n\nРезультирующий массив А:\n");
	for (x = 0; x < am; x++)			//цикл по строкам матрицы
	{
		for (y = 0; y < an; y++)		//цикл по столбцам матрицы
			printf("%-5i", a[x][y]);//выводим значение элемента матрицы

		printf("\n");
	}
	//-------------------------------------------

	printf("\n\n\n[Press any key]");
	getchar();
	getchar();
}
Задание: Посчитать и вывести суммы элементов больше заданного пользователем числа, расположенных в верхнем и нижнем треугольниках, образуемых диагоналями. Заменить элементы кратные 3 левого треугольника на первую сумму, а кратные 5 на вторую.
f1gh вне форума Ответить с цитированием
Старый 25.11.2018, 19:18   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вам в учебном заведении более чем достаточно было дано материала для этого.
Не понятно почему код на С? разве у вас не должен быть какой нибудь МАСМ или другой ассемблерный компилятор?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 31.05.2019, 12:23   #3
Nif-naf
Форумчанин
 
Аватар для Nif-naf
 
Регистрация: 05.09.2016
Сообщений: 131
По умолчанию

Р±' 2 worda =4 byta B MaTp.
Немного о GoAsm.
Nif-naf вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться в программе, как она работает SK-Mentos Общие вопросы C/C++ 3 25.11.2010 15:11
разобраться в программе fredwriter Помощь студентам 6 10.10.2010 10:47
Помогите разобраться в программе... Tee Jay Помощь студентам 0 25.06.2009 19:20
помогите разобраться в программе iwaniwan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 15.04.2009 19:38
Помогите разобраться в программе Gekada Общие вопросы C/C++ 1 09.12.2008 19:23